API: 是应用程序编程接口,是预先定义好的函数,可以供应用程序或开发人员访问调用 REST(Representational State Transfer,表述化状态转移):指的是一组架构约束条件和原则。 RESTful:满足REST约束条件和原则的设计规范或者架构风格 REST API:是北向接口的主流设计方式,遵循RESTful设计的API
RESTful并不是专门为SDN提出的,而是专门针对Web应用中HTTP使用中出现的一些问题提出的,由于HTTP协议的使用很不规范、随意、混乱 URL的设计缺乏规范性 HTTP的动词使用不当 HTTP的返回状态码使用不规范等 Restful正是针对HTTP中上述问题而提出的
资源(resource)
比如在普通的博客应用中,资源可能是包括了用户、博文或者评论等 在SDN中,资源可能是链路、交换机、流表等
资源标识符(resource identifiers)
URI是统一资源标示符,URL是统一资源定位符。URL是URI的子集,或者说是一种具体实现 对于REST API来说一个资源对应唯一的一个URI,REST通过URI来暴露资源,URI的设计的合理性和规范性十分重要
REST API是基于HTTP协议进行设计的,由HTTP动词+URI组成,HTTP动词描述操作;URI是标识资源。
资源命名规范:
URI命名规范:
URI中有些字段可以是变量,在实际使用中可以按需替换,例如: http://api.soccer.restapi.org/leagues/{leagueId}/teams/{teamId}/players/{playerId} 其中:leagueId,teamId,playerId 是变量(数字,字符串等类型都可以)
URI格式规范
URI的query字段
作为查询的参数补充,以标示一个唯一的资源 作为过滤条件使用,例如:GET /users?role=admin 作为资源列表分页标示使用,例如:GET /users?pageSize=25&pageStartIndex=50
2xx:操作成功 3xx:重定向 4xx:客户端错误 5xx:服务器错误
200 (“OK”) :一般性的成功返回,不可用于请求错误返回; 201 (“Created”) :资源被创建; 202 (“Accepted”) :Controller控制类资源异步处理的返回,仅表示请求已经收到; 204 (“No Content”) :可能会出现在PUT、POST、DELETE的请求中; 303 (“See Other”) :返回一个资源地址URI的引用,但不强制要求客户端获取该地址的状态; 400 (“Bad Request”) :客户端一般性错误返回, 其它4xx的错误,也可以使用400,具体错误信息可以放在body中; 401 (“Unauthorized”) :认证错误; 404 (“Not Found”) :找不到URI对应的资源; 500 Internal Server Error:服务器处理请求时发生了意外; 503 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 : 通过缓存机制提升接口响应性能