原文网址:https://www.cnblogs.com/chinajava/p/5871310.html
基于一些不错的RESTful开发组件,可以快速的开发出不错的RESTful API,但如果不了解开发规范的、健壮的RESTful API的根基面,即便优秀的RESTful开发组件摆在面前,也无法很好的理解和使用。下文Gevin结合本身的实践经验,整理了从零开始开发RESTful API的核心要点,完善的RESTful开发组件根基城市包罗全部或大部分要点,对付撑持不够到位的要点,我们也可以本身写代码实现。
1. Request 和 ResponseRESTful API的开发和使用,无非是客户端向处事器发请求(request),以及处事器对客户端请求的响应(response)。本真RESTful架构气势派头具有统一接口的特点,即,使用差此外http要领表达差此外行为:
GET(SELECT):从处事器取出资源(一项或多项)
POST(CREATE):在处事器新建一个资源
PUT(UPDATE):在处事器更新资源(客户端供给完整资源数据)
PATCH(UPDATE):在处事器更新资源(客户端供给需要改削的资源数据)
DELETE(DELETE):从处事器删除资源
客户端会基于GET要领向处事器发送获取数据的请求,基于PUT或PATCH要领向处事器发送更新数据的请求等,处事端在设计API时,也要凭据相应规范来措置惩罚惩罚对应的请求,这点此刻应该已经成为所有RESTful API的开发者的共鸣了,而且各web框架的request类和response类都很强大,具有合理的默认设置和灵活的定制性,Gevin在这里仅筹备强调一下响应这些request时,常用的Response要包罗的数据和状态码(status code),不完善的内容,欢迎大家增补:
当GET, PUT和PATCH请求告成时,要返回对应的数据,及状态码200,即SUCCESS
当POST创建数据告成时,要返回创建的数据,及状态码201,即CREATED
当DELETE删除数据告成时,不返回数据,状态码要返回204,即NO CONTENT
当GET 不到数据时,状态码要返回404,即NOT FOUND
任何时候,如果请求有问题,如校验请求数据时发明错误,要返回状态码 400,即BAD REQUEST
当API 请求需要用户认证时,如果request中的认证信息不正确,要返回状态码 401,即NOT AUTHORIZED
当API 请求需要验证用户权限时,如果当前用户无相应权限,要返回状态码 403,即FORBIDDEN
最后,关于Request 和 Response,不要忽略了http header中的Content-Type。以json为例,如果API要求客户端发送request时要传入json数据,则处事器端仅做好json数据的获取和解析即可,但如果处事端撑持多种类型数据的传入,如同时撑持json和form-data,则要按照客户端发送请求时header中的Content-Type,对差别类型是数据分袂实现获取和解析;如果API响应客户端请求后,需要返回json数据,需要在header中添加Content-Type=application/json。
2. Serialization 和 DeserializationSerialization 和 Deserialization即序列化和反序列化。RESTful API以规范统一的格局作为数据的载体,常用的格局为json或xml,以json格局为例,当客户端向处事器发请求时,或者处事器相应客户真个请求,向客户端返回数据时,都是传输json格局的文本,而在处事器内部,数据措置惩罚惩罚时根基不用json格局的字符串,而是native类型的数据,最范例的如类的实例,即东西(object),json仅为处事器和客户端通信时,在网络上传输的数据的格局,处事器和客户端内部,均存在将json转为native类型数据和将native类型数据转为json的需求,此中,将native类型数据转为json即为序列化,将json转为native类型数据即为反序列化。虽然某些开发语言,如Python,其原生数据类型list和dict能等闲实现序列化和反序列化,但对付庞大的API,内部实现时总会以东西作为数据的载体,因此,确保序列化和反序列化要领的实现,是开发RESTful API最重要的一步筹备事情
题外话,,序列化和反序列化的便捷,造就了RESTful API跨平台的特点,使得REST代替RPC成为Web Service的主流
序列化和反序列化是RESTful API开发中的一项硬需求,所以几乎每一种常用的开发语言城市有一个或多个优秀的开源库,来实现序列化和反序列化,因此,我们在开发RESTful API时,没须要制*复的*,选一个好用的库即可,如python中的marshmallow,如果基于Django开发,Django REST Framework中的serializer即可。
3. ValidationValidation即数据校验,是开发健壮RESTful API中另一个重要的一环。仍以json为例,当客户端向处事器发出post, put或patch请求时,凡是会同时给处事器发送json格局的相关数据,处事器在做数据措置惩罚惩罚之前,先做数据校验,是最合理和安适的前后端交互。如果客户端发送的数据不正确或不同理,处事器端颠末校验后直接向客户端返回400错误及相应的数据错误信息即可。常见的数据校验包孕:
数据类型校验,如字段类型如果是int,那么给字段赋字符串的值则报错
数据格局校验,如邮箱或暗码,其赋值必需满足相应的正则表达式,才是正确的输入数据
数据逻辑校验,如数据包罗出生日期和春秋两个字段,如果这两个字段的数据不一致,则数据校验掉败