前言:因为有点危机感,所以时常看看招聘网站的招聘信息,看看自己面对那些岗位要求,有哪些不满足。最近浏览的时候,经常看到岗位要求上有一个熟悉Restful。所以最近在做项目时,就边学边做,用上了这个设计风格。
Restful
简单的说:符合REST的约束条件和原则,就称它为RESTful架构。
REST:Representational State Transfer的缩写,翻译:“具象状态传输”。一般解释为 “表现层状态转换” 。
REST是设计风格而不是标准。是指客户端和服务器的交互形式。需要关注的重点是如何设计REST风格的网络接口。
REST本身并没有创造新的技术、组件或服务,而隐藏在RESTful背后的理念就是使用Web的现有特征和能力, 更好地使用现有Web标准中的一些准则和约束。虽然REST本身受Web技术的影响很深, 但是理论上REST架构风格并不是绑定在HTTP上,只不过目前HTTP是唯一与REST相关的实例。 所以我们这里描述的REST也是通过HTTP实现的REST。
特点:
- 具象的:一般指表现层,要表现的对象就是资源。比如,客户端访问服务器,获取的数据就是资源。比如文字、图片、音视频等。
- 表现:资源的表现形式。txt格式、html格式、json格式、jpg格式等。浏览器通过URL确定资源的位置,但是需要在HTTP请求头中,用Accept和Content-Type字段指定,这两个字段是对资源表现的描述。
- 状态转换:客户端和服务器交互的过程。在这个过程中,一定会有数据和状态的转化,这种转化叫做状态转换。其中,GET表示获取资源,POST表示新建资源,PUT表示更新资源,DELETE表示删除资源。HTTP协议中最常用的就是这四种操作方式。
RESTful架构:
- 每个URL代表一种资源;
- 客户端和服务器之间,传递这种资源的某种表现层;
- 客户端通过四个http动词,对服务器资源进行操作,实现表现层状态转换。
设计符合RESTful风格的API:
一、域名:
将api部署在专用域名下:
http://api.example.com
或者将api放在主域名下:
http://www.example.com/api/
二、版本:
将API的版本号放在url中。
http://www.example.com/api/v1.0/app
http://www.example.com/api/v1.2/app
三、路径:
路径表示API的具体网址。每个网址代表一种资源。 资源作为网址,网址中不能有动词只能有名词,一般名词要与数据库的表名对应。而且名词要使用复数。
//获取单个商品
http://www.example.com/app/goods/1
//获取所有商品
http://www.example.com/app/goods
四、使用标准的HTTP方法:
对于资源的具体操作类型,由HTTP动词表示。 常用的HTTP动词有四个。
GET SELECT :获取资源。
POST CREATE :新建资源。
PUT UPDATE :更新资源。
DELETE DELETE :删除资源。
示例:
#获取指定商品的信息
GET: http://www.example.com/goods/ID
#新建商品的信息
POST: http://www.example.com/goods
#更新指定商品的信息
PUT: http://www.example.com/goods/ID
#删除指定商品的信息
DELETE: http://www.example.com/goods/ID
其中最常用的就是GET和POST,这4个也是我在项目中最常用的。
HTTP请求方法详解参考文章:https://www.cnblogs.com/lnlvinso/p/11000568.html.
五、过滤信息:
如果资源数据较多,服务器不能将所有数据一次全部返回给客户端。API应该提供参数,过滤返回结果。
(这里可以用Paginator和Page在后端实现)
示例:
#指定返回数据的数量
http://www.example.com/goods?limit=10
#指定返回数据的开始位置
http://www.example.com/goods?offset=10
#指定第几页,以及每页数据的数量
http://www.example.com/goods?page=2&per_page=20
六、状态码:
服务器向浏览器返回的状态码和提示信息,常用的有:
200 OK :服务器成功返回用户请求的数据
201 CREATED :用户新建或修改数据成功。
202 Accepted:表示请求已进入后台排队。
400 INVALID REQUEST :用户发出的请求有错误。
401 Unauthorized :用户没有权限。
403 Forbidden :访问被禁止。
404 NOT FOUND :请求针对的是不存在的记录。
406 Not Acceptable :用户请求的的格式不正确。
500 INTERNAL SERVER ERROR :服务器发生错误。
我个人调试代码的时候常见的报错状态码 :400 、404 、405 、500
- 这个很重要,可以在后端写一个专门负责状态码的类,专门维护状态码,这样维护起来就方便很多,需要的时候直接导入、调用就行了,在前后端分离的时候,通过 jsonify返回给前端。
七、错误信息:
一般来说,服务器返回的错误信息,以键值对的形式通过 jsonify返回。
(服务器返回的数据格式,应该尽量使用JSON,避免使用XML。)
示例:
{
error:'Invalid API KEY'
}
参考文章:
RESTful 架构详解:https://www.runoob.com/w3cnote/restful-architecture.html
RESTful 理解总结:https://www.cnblogs.com/wang-yaz/p/9237981.html
HTTP请求方法详解参考文章:https://www.cnblogs.com/lnlvinso/p/11000568.html.
如有侵权请联系我!!!