软件定义网络基础---REST API的设计规范
一: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的设计规范的更多相关文章
- 软件定义网络基础---REST API概述
一:什么是REST API REST API是北向接口的主流设计方式 API是应用程序编程接口,是预先定义好的函数,可以供应用程序或开发人员访问调用 年 Roy Thomas Fielding 的博士 ...
- 软件定义网络基础---SDN控制平面
一:SDN控制平面 一个或多个SDN控制器组成,是网络的大脑. 对底层网络交换设备进行集中管理,状态监测.转发决策以及处理和调 度数据平面的流量: 通过北向接口向上层应用开放多个层次的可编程能 ...
- 软件定义网络基础---SDN的主流构架
一:基于不同标准的主流构架 二: ONF定义的SDN基本构架 (一) 四个平面.两大接口 三:四个平面 (一)数据平面 数据平面是由若干网元(Netword Element)构成,每个网元包括一个或多 ...
- 软件定义网络基础---OpenFlow概述
一:OpenFlow概述 二:交换机模型架构 (一)OpenFlow构架三个组成成分 三:OpenFlow 1.0版本 自OpenFlow1.0发布以来,目前已经有多个版本的OF规范版本被发布 四:O ...
- 软件定义网络基础---OpenFlow流表
一:流表 (一)流的概念 我们把同一时间经过同一网络中,具有某种共同特征或属性的数据,抽象为一个流 比如:我们将访问同一个地址的数据视为一个流 流一般是由网络管理员定义的,可以根据不同的流执行不同的策 ...
- 软件定义网络基础---NETCONF协议
netconf协议最早被作为网管协议被提出来的,与SNMP网管协议相比较:SNMP的优势在于网络设备的监测,在大规模网管应用中有很大不足,正是针对这种不足之处,提出了NETCONF协议 一:NETCO ...
- 软件定义网络基础---SDN数据平面
主要介绍SDN架构和转发模型 一:传统网络设备 (一)传统设备控制平面和数据平面 (二)数据平面的任务 数据平面对数据包的处理,主要通过查询由控制平面所生成的转发信息表来完成 (三)传统网络数据平面数 ...
- 软件定义网络基础---SDN的核心思想
一:SDN包含的核心思想:解耦,抽象,可编程 二:解耦 (一)SDN网络解耦思想 解耦是指将控制平面和数据平面进行分离,主要为了解决传统网络中控制平面和数据平面在物理上紧耦合导致的问题 控制平面和数据 ...
- 软件定义网络基础---SDN的发展
一:发展初期阶段--提出 架构.设计思想和实现技术的提出 二:发展中期阶段--企业加入,推动发展 三:SDN的发展趋势 (一)SD-DC SDN被大规模应用数据中心的服务器和设备部署运维,产生了软件定 ...
随机推荐
- 一、Linux_文件操作
1.复制文件到当前目录: # 复制文件到当前目录下, ./表示当前目录 $ cp /home/book/poems.tar.gz ./ # 复制并改名,并存放在当前目录下 (cp源文件名 新文件名) ...
- spring boot 过滤器、拦截器的区别与使用
原文:https://blog.csdn.net/heweimingming/article/details/79993591 拦截器与过滤器的区别: 1.过滤器和拦截器触发时机不一样,过滤器是在请求 ...
- VMware共享本地文件
最后可以在这里找到
- jQuery的下载以及使用
一.概述 1.版本选择 jquery官网 jQuery的版本有很多,大家在选择版本的时候,一般原则是越新越好,但其实不然,jQuery版本是在不断进步和发展的,最新版是当时最高技术水平,也是最先进的技 ...
- GitLab CI runner can't connect to tcp://localhost:2375 in kubernetes
报错的.gitlab-ci.yml配置如下 image: docker:latest services: - docker:dind variables: DOCKER_HOST: tcp://loc ...
- 15 分钟学会使用 Git 和远程代码库
Git是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- learning scala akka actorySystem create and close
package com.example import akka.actor.ActorSystem import scala.util.{Failure, Success} import scala. ...
- 62、Spark Streaming:容错机制以及事务语义
一. 容错机制 1.背景 要理解Spark Streaming提供的容错机制,先回忆一下Spark RDD的基础容错语义: 1.RDD,Ressilient Distributed Dataset,是 ...
- (12)Go面向对象
尽管Go中没有封装.继承.多态这些概念,但可以通过别的方式实现这个特性: *封装:通过方法实现 *继承:通过匿名字段实现 *多态:通过接口实现 package main import "fm ...
- C#程序发送POST请求数据中+号丢失解决方案
C#程序把RSA加密后的密码发送到后台总是校验失败,用wireshark抓包检查发现POST发出的密码中的+号都变成了空格.为了正确的发送数据,要用URL转码协议进行转码. 有两个方法进行URL转码 ...