Rest
大约 3 分钟
Rest
概念
- Web API 两种风格:面向过程(RPC)、面向 REST(REST)
 - RPC:“控制器/操作方法“ 的形式把服务器端的代码当成方法去调用。把HTTP当成传输数据的通道,不关心HTTP谓词。
 - REST:按照HTTP的语义来使用HTTP协议,一种基于资源的软件架构风格
 - Restful 优点: 
- 降低开发的复杂性
 - 提供系统的可伸缩性
 - 只需设计一套相同的后端处理接口,就可以为不同类型的终端提供服务
 - 通过URL对资源定位,语义更清晰;
 - 通过HTTP谓词表示不同的操作,接口自描述;
 - 通过HTTP状态码反映服务器端的处理结果,统一错误处理机制。
 
 - 设计原则: 
- 网络上的所有事物都可以被抽象为资源
 - 每一个资源都有唯一的资源标识,对资源的操作不会改变这些标识
 - 所有的操作都是无状态的(每次操作都是独立的,互不关联)
 
 - 对资源的操作由 HTTP 谓词表示
 - 针对不同操作,服务器向用户返回的结果应该符合规范
 - 服务器向用户返回的状态码和提示信息,使用标准 HTTP 状态码
 
HTTP 谓词
- GET(获取)、POST(新增)、PUT(整体更新)、DELETE(删除)、PATCH(局部更新)
 - OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求;
 
返回结果规范
- GET/collections:返回资源对象的列表(数组)
 - GET/collections/identity:返回单个资源对象, 如果资源不存在,返回404状态码;
 - POST/collections:返回新生成的资源对象(返回新创建的资源的全部属性)
 - PUT/collections/identity:返回完整的资源对象(返回被更新资源的完整属性)
 - PATCH/collections/identity:返回被修改的属性
 - DELETE/collections/identity:返回一个空文档 删除了资源,要返回204状态码。
 
HTTP 状态码
- 200 OK 服务器成功返回用户请求的资源,该操作是幂等的。
 - 204 NO CONTENT 删除数据成功(无响应体)。
 - 400 Bad Request 用户发出的请求有错误,该操作是幂等的。
 - 401 Unauthorized 表示用户没有认证,无法进行当前操作(用户未提供认证选项或参数)。
 - 403 Forbidden 表示用户访问是被禁止的。(用户提供了认证参数,但可能认证参数错误,或无权限)。
 - 422 Unprocesable Entity 当创建一个对象时,发生一个验证错误(验证信息不全)。
 - 500 Internal Server Error 服务器发生错误,用户将无法判断发出的请求是否成功。
 - 503 Server Unavailable //服务器当前不能处理客户端的请求(服务器性能达到瓶颈时,拒绝后续服务)
 
参数传递
- Url:用于资源定位
 - QueryString:用于 URL 之外的额外数据
 - 请求报文体:供 PUT、POST 提供数据
 
Rest实现参考
- 使用 RPC 风格:Users/AddNew、Users/GetAll、Users/DeleteById
 - 对于可以缓存的操作,使用GET请求;对于幂等的更新操作,使用PUT请求;对于幂等的删除操作,使用DELETE请求;对于其他操作,统一使用POST请求。
 - 保存、更新类的请求使用POST、PUT请求,把全部参数都放到请求报文体中;对于GET和DELETE请求,把参数放到QueryString中。推荐尽量使用URL做资源定位。
 - 对于业务错误,服务器端返回合适的4XX状态码;同时,在报文体中通过code参数提供业务错误码以及错误消息。
 - 如果请求的处理执行成功,服务器端返回值为200的Http状态码,如果有需要返回给客户端的数据,则服务器端把这些数据放到响应报文体中。
 
