一:什么是REST API
REST API是北向接口的主流设计方式
API是应用程序编程接口,是预先定义好的函数,可以供应用程序或开发人员访问调用
REST (Representational State Transfer,表述化状态转移)首次出现在2000 年 Roy Thomas Fielding 的博士论文中,
指的是一组架构约束条件和原则。
(一)REST和API关系
而满足REST约束条件和原则的设计规范或者架构风格,我们称之为RESTful,遵循RESTful设计的API就是REST API
(二)RESTful
RESTful并不是专门为SDN提出的,而是专门针对Web应用中HTTP使用中出现的一些问题提出的,由于HTTP协议的使用很不规范、随意、混乱
URL的设计缺乏规范性 HTTP的动词使用不当 HTTP的返回状态码使用不规范等 Restful正是针对HTTP中上述问题而提出的
Restful设计上例:
显得更加规范和简洁
(三)REST中的几个重要概念
资源:REST是面向资源的设计
比如在普通的博客应用中,资源可能是包括了用户、博文或者评论等 在SDN中,资源可能是链路、交换机、流表等
资源标识符:
URI是统一资源标示符,URL是统一资源定位符。URL是URI的子集,或者说是一种具体实现
对于REST API来说一个资源对应唯一的一个URI,REST通过URI来暴露资源,URI的设计的合理性和规范性十分重要
(四)REST的约束条件与原则
客户-服务器(Client-Server)约束---实现解耦
用户接口和数据存储的分离;---通过客户端用户接口和服务器数据存储的分离,提高了客户端的便捷性,也提高了服务端的可伸缩性
由于实现了解耦,就能够允许客户端和服务端分组优化,彼此之间不受影响
无状态(Stateless):
要求来自客户端的每一个请求必须包含服务器处理该请求所需的所有信息; --- 提高了可见性和可靠性,由于服务器是无状态的,能够很方便的实现水平扩展,提高了可扩展性
无状态:相对有状态而言,大多数访问网站都是有状态的
在该流程中后面的每一个状态都依赖于前面的状态,没有一个URL可以直接查询到成绩
而在RESTful的架构中
可以直接定位到服务器的资源,不依赖于服务器的会话状态,因此是无状态
缓存(Cache):
要求一个请求的响应中的数据标记为是否可缓存;如果可以,客户端可以重用相同请求的响应数据---减少了CS交互次数,提高了效率
统一接口(Uniform Interface):
核心特征,强调组件之间要有一个统一的接口; --- CS之间通信的方法必须是统一化的,例如标准的HTTP动作
分层系统(Layered System):
限制组件的行为,将架构分为若干等级的层;允许服务器和客户端之间的中间层,例如反向代理、API网关,可以代替服务器对客户端的请求进行回应,而对客户端而言是透明的,提高了系统的可扩展性,也增加了系统的复杂性
按需代码(Code-On-Demand,可选):
服务器可以提供一些代码或者脚本并在客户的运行环境中执行。