RESTful架构的理解

概念


本质:一种软件架构风格,通过 REST 可以实现系统的高性能、可伸缩、通用性、简单性、可修改性和可扩展等特性。
核心:面向资源设计的API

解决问题:

  • 降低开发的复杂性
  • 提高系统的可伸缩性

例如:设计一套API,为多个终端服务。

设计概念和准则

  • 网络上的所有事物都可以被抽象为资源
  • 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识
  • 所有的操作都是无状态的(本次操作、下次操作、上次操作之间无关系)

资源:网络上的一个实体、具体信息。

设计RESTful API


资源路径(URI):RESTful的核心是面向资源,如何规划资源路径很重要

HTTP动词(请求方式):如get,post,delete,put

过滤信息:例如获取资源列表时有分页操作/查询操作,这时要合理分配过滤信息,过滤信息设置太多,有可能会违反RESTful API 关于URI方面的限定。

状态码:当客户端发送一个请求时,服务端应当响应什么状态码

错误处理:如当发现客户端传入的参数有问题时,该返回什么样的状态信息。

返回结果:如POST资源的时候,需要返回一个资源实例;GET资源列表时,需要返回一个资源数组;

资源路径
在RESTful架构中,每个网址代表一个资源,所以网址中不能有动词,只能有名词。一般而言,API中的名词应该使用复数。例如,使用users反映用户资源的URI,而不是使用user。

URL结尾不应该包含斜杠“/”,这是作为URL路径中处理中最重要的规则之一,正斜杠(/)不会增加语义值,且可能导致混淆。REST API不允许一个尾部的斜杠,不应该将它们包含在提供给客户端的链接的结尾处。rul的路径中的正斜杠“/“字符用于指示资源之间的层次关系。

例如:有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,那么它的资源路径应设计成如下样子。

https://api.example.com/v1/zoos  //动物园资源。使用https协议头;加入v1版本号,因为以后可能会更改api。版本号的加入有两种做法,一种是加入到地址中,另一种是加入到HTTP请求头中;zoos复数

https://api.example.com/v1/animals //动物资源

https://api.example.com/v1/employees //雇员资源

HTTP动词
对资源的操作有创建、读取、更新、删除(CURD),由HTTP动词表示。

GET : 从服务器去获取资源
POST :在服务器新建一个资源
PUT:在服务器更新资源(客户端提供改变后的完整资源,服务端返回完整的更新字段)
PATCH:在服务器更新资源(客户端提供改变的属性,服务端返回只发生了更新的字段)
DELETE:从服务器删除资源
例如:

POST/zoos : 新建一个动物园
GET/zoos/ID : 获取某个指定动物园的信息
PUT/zoos/ID : 更新某个指定动物园的信息
DELETE/zoos/ID : 删除某个动物园


过滤信息
如果记录数量过多,服务器不可能都将它们返回给用户。这时就需要进行筛选。筛选时,API应该提供一个参数,过滤一下返回的结果。

例如:

?offset = 10 :指定返回记录的开始位置
?page = 2&per_page = 100 :指定第几页,以及每页的记录数
?sortby = name&order = asc :指定返回结果排序,以及排序顺序
?animal_type_id = 1 :指定筛选条件


状态码
服务器向用户返回的状态码和提示信息,使用标准的HTTP状态码

200 OK 服务器成功返回用户请求的数据
201 CREATED 新建或修改数据成功
204 NO CONTENT 删除数据成功
400 BAD REQUEST 用户发出的请求有错误
401 Unauthorized 表示用户没有认证,无法进行当前操作
403 Forbidden 表示用户的访问是被禁止的
422 Unprocesable Entity 当创建一个对象时,发生一个验证错误。例如创建用户资源时需要用户名、密码,而前端只提供用户名字段,那么就要返回一个422 状态码,并返回错误信息:”密码不能为空“
500 INTERNAL SERVER ERROR 服务器内部错误,此时服务端无法处理任何请求。
错误处理
如果状态码是4xx或5xx,就应该向用户返回出错信息。一般而言,返回的信息中将error作为键名,出错信息作为键值即可,例如:

{
  "error":"参数错误"
}


返回结果
针对不同操作(如GET,POST),服务器向用户返回的结果应该符合以下规范:

GET/collections: 返回资源对象的列表(数组)
GET/collections/identity : 读取资源时,传入标识符(identity),服务端返回标识符指定的单个资源对象
POST/collections : 返回新生成的资源对象
PUT/collections/identity : 返回完整的资源对象
PATCH/collections/identity : 返回被修改的属性
DELETE/collections/identity : 返回一个204状态码和空响应体

综述

综合上面的解释,我们总结一下什么是RESTful架构:

  (1)每一个URI代表一种资源;

  (2)客户端和服务器之间,传递这种资源的某种表现层;

  (3)客户端通过四个HTTP动词,对服务器端资源进行操作,实现"表现层状态转化"。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值