一、REST
- 问题
网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板、桌面电脑、其他专用设备......)。
因此,必须有一种统一的机制,方便不同的前端设备与后端进行通信。这致使API构架的流行。
- 基本概念
REST是"Representational State Transfer"缩写,即是"表现层状态转化"。而"表现层"其实指的是"资源(Resource)"的表现层。
一种软件架构风格、设计风格、而不是标准,只是提供了一组设计原则和约束条件。
它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存机制等。
REST其实是一种组织Web服务的架构,而并不是我们想象的那样是实现Web服务的一种新的技术,更没有要求一定要使用HTTP。其目标是为了创建具有良好扩展性的分布式系统。
1. 资源(Resource)
就是网络上的一个实体,或是网络上的具体信息,可以是一段文本、一张图片、一首歌曲、一部电影。
每个资源都会对应的URL,且是唯一的标识符,想要获取资源只需要调用对应URL。
2. 表现层(Representation)
"资源"是一种信息实体,它可以有多种外在表现形式。
而"资源"具体呈现出来的形式,就叫它的"表现层"。
3. 状态转换(State Transfer)
访问一个网站,就是客户端和服务端的交互过程,这个过程中就会涉及到数据和状态的变化。
互联网通信协议HTPP,是无状态协议。即所有状态都保存在服务端。
客户端要操作服务端必须通过某种方式,让服务端发生"状态转换",而这转换是建立在表现层之上的,所以就是"表现层状态转换"。
客户端用到的手段只能是HTTP协议,在操作方式的动词: GET/POST/PUT/DELETE。
对应GET获取资源,POST新建资源(或更新资源),PUT更新资源,DELETE删除资源。
- 架构级约束
1.使用客户/服务器模型。客户和服务器之间通过一个统一的接口来互相通讯
2.层次化的系统。在一个REST系统中,客户端并不会固定地与一个服务器打交道
3.无状态。在一个REST系统中,服务端并不会保存有关客户的任何状态。也就是说,客户端自身负责用户状态的维持,并在每次发送请求时都需要提供足够的信息
4.可缓存。REST系统需要能够恰当地缓存请求,以尽量减少服务端和客户端之间的信息传输,以提高性能
5.统一的接口。一个REST系统需要使用一个统一的接口来完成子系统之间以及服务与用户之间的交互。这使得REST系统中的各个子系统可以独自完成演化
一个系统满足了上面所列出的五条约束,那么该系统就被称为是RESTful。
- 什么是RESTful框架
1. 每一个URL代表一种资源
2. 客户端和服务器之间,传递这种资源的某种表现层
3. 客户端通过四个HTTP动词,对服务端进行操作,实现"表现层状态转换"
RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。
二、RESTful API设计
- 协议
API与用户的通信协议,通常使用HTTP(S)协议。
- 域名
应该尽量将API部署在专用域名之下。
如: http://api.zyz.com
如果确定API很简单,不会有大规模扩从,可以考虑放在主域名之下。
如: http://www.zyz.com/api/
- 版本
应该将API的版本号放入URL。
如: http://api.zyz.com/v1/
也有将版本号放在HTTP的头信息中,但不如放在URL中方便直观,Github就是这么做的。
- 路径
路径又称"终点"(endpoint),表示AP