一:REST API的设计

REST API是基于HTTP协议进行设计的,由HTTP动词+URI组成

(一)HTTP动词

(二)资源的原型

文档(Document):

文档是资源的单一表现形式;

集合(Collection):

集合是资源的一个容器(目录),可以向里面添加 资源(文档);

仓库(Store):

客户端管理的一个资源库,可以向仓库中新增资源 或者删除资源,或者从仓库中获取资源;

控制器(Controller):

可以执行一个方法,支持参数输入,结果返 回。

(三)RESTful设计中URI命名的规范

资源命名规范:

 文档(Document)类型的资源用      名词单数命名
 集合(Collection)类型的资源用   名词复数命名
 仓库(Store)类型的资源用     名词复数命名
 控制器(Controller)类型的资源用  **动词**命名

URI命名规范:

URI中有些字段可以是变量,在实际使用中可以按需替换,例如:
http://api.soccer.restapi.org/leagues/{leagueId}/teams/{teamId}/players/{playerId}
--- 其中:leagueId,teamId,playerId 是变量(数字,字符串等类型都可以)。

URI格式规范:

 URI中分隔符“/”一般用来对资源层级的划分, ”/“不应该出现在URL的末尾;
 URI中尽量使用连字符"-"代替下划线"_"的使用
 例如: http://api.example.restapi.org/blogs/mark-masse/entries/this-is-my-first-post
 URI中统一使用小写字母
 URI中不要包含文件(或脚本)的扩展名
 例如:不要出来.php或者.json之类的后缀名。
 CRUD的操作不要体现在URI中

举例:

URI的query字段:

 作为查询的参数补充,以标示一个唯一的资源
 作为过滤条件使用,例如:
 GET /users?role=admin
 作为资源列表分页标示使用,例如:
 GET /users?pageSize=&pageStartIndex=

(四)HTTP响应状态

REST API相关的响应状态码

 2xx:操作成功
 3xx:重定向
 4xx:客户端错误
 5xx:服务器错误

常用状态码

  (“OK”) :一般性的成功返回,不可用于请求错误返回;
 (“Created”) :资源被创建;
 (“Accepted”) :Controller控制类资源异步处理的返回,仅表示请求已经收到;
 (“No Content”) :可能会出现在PUT、POST、DELETE的请求中;
 (“See Other”) :返回一个资源地址URI的引用,但不强制要求客户端获取该
地址的状态;
 (“Bad Request”) :客户端一般性错误返回, 其它4xx的错误,也可以使用400,
具体错误信息可以放在body中;
 (“Unauthorized”) :认证错误;
 (“Not Found”) :找不到URI对应的资源;
 Internal Server Error:服务器处理请求时发生了意外;
 Service Unavailable:服务器无法处理请求,一般用于网站维护状态。

(五)元数据设计

HTTP Headers

 Content-Type :body的数据格式,如Content-type: application/json,表示主类型是application,数据格式是json
 Content-Length :body 数据体的大小
 Last-Modified :资源最后被修改的时间戳
 ETag :服务器端资源版本的标示
 Location :在响应header中使用
 Cache-Control, Expires, Date : 通过缓存机制提升接口响应性能

二:举例---实际SDN控制器中REST API的设计

(一)Floodlight REST API

Floodlight北向API对外提供了四个模块:OpenFlow流表、防火墙、ACL、多租户网络虚拟化。

ACL模块的API

 查询所有ACL规则:GET http://<controller_ip>:8080/wm/acl/rules/json
 添加ACL规则:POST http://<controller_ip>:8080/wm/acl/rules/json
 删除一条ACL:DELETE http://<controller_ip>:8080/wm/acl/rules/json
 删除所有ACL:GET http://<controller_ip>:8080/wm/acl/clear/json
使用POST动词具体创建ACL或是使用DELETE动词删除某条ACL时,还需要在json中带上需要传输的数据。例如以curl为例:
curl -X POST -d
'{"src-ip":"10.0.0.1/32","dst-ip":"10.0.0.2/32","action":"deny"}'
http://<controller_ip>:8080/wm/acl/rules/json

软件定义网络基础---REST API的设计规范的更多相关文章

  1. 软件定义网络基础---REST API概述

    一:什么是REST API REST API是北向接口的主流设计方式 API是应用程序编程接口,是预先定义好的函数,可以供应用程序或开发人员访问调用 年 Roy Thomas Fielding 的博士 ...

  2. 软件定义网络基础---SDN控制平面

    一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑.  对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量:  通过北向接口向上层应用开放多个层次的可编程能 ...

  3. 软件定义网络基础---SDN的主流构架

    一:基于不同标准的主流构架 二: ONF定义的SDN基本构架 (一) 四个平面.两大接口 三:四个平面 (一)数据平面 数据平面是由若干网元(Netword Element)构成,每个网元包括一个或多 ...

  4. 软件定义网络基础---OpenFlow概述

    一:OpenFlow概述 二:交换机模型架构 (一)OpenFlow构架三个组成成分 三:OpenFlow 1.0版本 自OpenFlow1.0发布以来,目前已经有多个版本的OF规范版本被发布 四:O ...

  5. 软件定义网络基础---OpenFlow流表

    一:流表 (一)流的概念 我们把同一时间经过同一网络中,具有某种共同特征或属性的数据,抽象为一个流 比如:我们将访问同一个地址的数据视为一个流 流一般是由网络管理员定义的,可以根据不同的流执行不同的策 ...

  6. 软件定义网络基础---NETCONF协议

    netconf协议最早被作为网管协议被提出来的,与SNMP网管协议相比较:SNMP的优势在于网络设备的监测,在大规模网管应用中有很大不足,正是针对这种不足之处,提出了NETCONF协议 一:NETCO ...

  7. 软件定义网络基础---SDN数据平面

    主要介绍SDN架构和转发模型 一:传统网络设备 (一)传统设备控制平面和数据平面 (二)数据平面的任务 数据平面对数据包的处理,主要通过查询由控制平面所生成的转发信息表来完成 (三)传统网络数据平面数 ...

  8. 软件定义网络基础---SDN的核心思想

    一:SDN包含的核心思想:解耦,抽象,可编程 二:解耦 (一)SDN网络解耦思想 解耦是指将控制平面和数据平面进行分离,主要为了解决传统网络中控制平面和数据平面在物理上紧耦合导致的问题 控制平面和数据 ...

  9. 软件定义网络基础---SDN的发展

    一:发展初期阶段--提出 架构.设计思想和实现技术的提出 二:发展中期阶段--企业加入,推动发展 三:SDN的发展趋势 (一)SD-DC SDN被大规模应用数据中心的服务器和设备部署运维,产生了软件定 ...

随机推荐

  1. fastJSON的常用方法总结

    fastJSON的常用方法总结 fastJSON中常用的对象是JSON,JSONArray,JSONObject三个对象.常用的方法如对象转为JSON字符串,JSON字符串转为对象,JSON字符串转为 ...

  2. 在CentOS 7上修改主机名的方法

    这次我们来讲解一下如何在CentOS 7环境上修改主机名 1.从VMware上登录CentOS 7的虚拟机,并以root用户登录. 2.查看未修改前的主机名 1>.我们可以通过文件hostnam ...

  3. Ubuntu安装Gitlab Runner

    第一步: 添加GitLab的官方存储库:    curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runne ...

  4. 多线程之美6一CAS与自旋锁

    1.什么是CAS CAS 即 compare and swap 比较并交换, 涉及到三个参数,内存值V, 预期值A, 要更新为的值B, 拿着预期值A与内存值V比较,相等则符合预期,将内存值V更新为B, ...

  5. 一个.Net的混淆防反编译工具ConfuserEx

    给大家推荐一个.Net的混淆防反编译工具ConfuserEx. 由于项目中要用到.Net的混淆防反编译工具. 在网上找了很多.Net混淆或混淆防反编译工具,如.NET Reactor.Dotfusca ...

  6. Selenium+TestNG+CSV数据驱动

    1.工程的目录结构: # saas SAAS_UI自动化测试工程 # 一.工程的目录结构 1.saas/src是工程的入口 a.saas/src/main/java/com/saas/encapsul ...

  7. 【原创】selenium+python+openpyxl实现登录自动化测试,自动读取excel用例数据,并将数据结果自动写入到excel

    # -*- coding: utf-8 -*- from selenium import webdriver from openpyxl import load_workbook from time ...

  8. 微信之获取微信的openid(二)详细版

    第一步 :配置测试号,网页授权获取用户基本信息. 该授权回掉页面域名为ngrok 映射的域名,我的映射地址是127.0.0.1:8080. 到此微信配置完毕,接下来就是直接上代码了 2.用户同意授权 ...

  9. html5添加视频为背景自动播放

    客户想做个打开官网自动播放一段视频,楼主使用了video标签,即下面的代码:: 于是我在video标签上添加了属性 autoplay=“autoplay” loop=“loop” 然而通过地址栏进去的 ...

  10. C#锐利体验2读书笔记

    匿名方法,迭代,匿名方法允许我们以一种“内联”的方法来编写方法代码;匿名方法是直接与委托实例化相关联的,使委托实例化更加直观方便.匿名方法的几个相关问题--参数列表,--返回值,--外部变量. add ...