一: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. composer的用法笔记

    一.到compose官网下载 composer.exe 的安装的文件,直接打开安装,在安装的目录的要选择到,你的开发环境中的 php.exe 的所在目录里..例如:D:\phpStudy\php\ph ...

  2. 存储型XSS靶场作业

    首先进入靶场:http://59.63.200.79:8082/index.php xss平台使用:xss8c 发现CMS版本号,搜索是否此版本号存在可利用漏洞: 找到存储型xss漏洞,在xss平台生 ...

  3. SpringCloud2.0 Hystrix Dashboard 断路器指标看板 基础教程(八)

    1.启动基础工程 1.1.启动[服务中心]集群,工程名称:springcloud-eureka-server 参考 SpringCloud2.0 Eureka Server 服务中心 基础教程(二) ...

  4. python笔记41-虚拟环境virtualenv

    前言 如果你是一个python初学者,我是不建议你搞python虚拟环境的,我看到很多python的初学者同学,使用最新版的pycharm,新建一个工程时候默认就是venu虚拟环境. 然后在使用cmd ...

  5. python的pandas库读取csv

    首先建立test.csv原始数据,内容如下 时间,地点 一月,北京 二月,上海 三月,广东 四月,深圳 五月,河南 六月,郑州 七月,新密 八月,大连 九月,盘锦 十月,沈阳 十一月,武汉 十二月,南 ...

  6. solr和ElasticSearch(ES)的区别?

    Solr2004年诞生 ElasticSearch 2010年诞生 ES更新 ElasticSearch简介: ElasticSearch是一个实时的分布式的搜索引擎和分析引擎.它可以帮助你用前所未有 ...

  7. 文件上传相关报错: The current request is not a multipart request或is a MultipartResolver configured?

    1:from中涉及到图片上传的就要用post提交方式.否则就会报这个错误. 2:第一中:在jsp页面的<head></head>标签里面加上<meta http-equi ...

  8. 性能:Transform层面

    数据处理的并行度 1.BlockRDD的分区数 (1)通过Receiver接受数据的特点决定 (2)也可以自己通过repartition设置 2.ShuffleRDD的分区数 (1)默认的分区数为sp ...

  9. [Luogu 3794]签到题IV

    Description 题库链接 给定长度为 \(n\) 的序列 \(A\).求有多少子段 \([l,r]\) 满足 \[ \left(\gcd_{l\leq i\leq r}A_i\right) \ ...

  10. 51nod1423 最大二“货”

    [传送门] 单调栈其实就是个后缀$max/min$,这道题可以维护一个单调递减的单调栈,pop元素的时候,能pop掉的元素就是第二大,当前元素为第一大.遇到第一个不能pop掉的时候当前元素就是第二大, ...