什么是REST和RESTful API?前端
REST:(英文:Representational State Transfer,简称REST)表征性状态转移,是一种软件架构风格。json
RESTful : RESTful API就是REST风格的APIapi
restFul规范:
一、建议使用https做为网络通讯协议
二、接口的url建议加上'api'字符,清晰地代表此url是一个接口
三、接口版本号相关字符v1/v2/v3...建议加在接口的url上,代表当前接口的版本号
四、返回值中包含状态码或者Code,状态码标识当前http请求的响应码,响应码具体代表的状态在http协议里已经作了解释。而code则是对请求返回状态的更细的细分,code弥补了状态码不够用的现实,具体的code代表哪一种状态,咱们须要跟前端商量决定。
经常使用状态码:
200 OK - [GET]:服务器成功返回用户请求的数据,该操做是幂等的(Idempotent)。
201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。
202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)
204 NO CONTENT - [DELETE]:用户删除数据成功。
400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操做,该操做是幂等的。
401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。
403 Forbidden - [*] 表示用户获得受权(与401错误相对),可是访问是被禁止的。
404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操做,该操做是幂等的。
406 Not Acceptable - [GET]:用户请求的格式不可得(好比用户请求JSON格式,可是只有XML格式)。
410 Gone -[GET]:用户请求的资源被永久删除,且不会再获得的。
422 Unprocesable entity - [POST/PUT/PATCH] 当建立一个对象时,发生一个验证错误。
500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将没法判断发出的请求是否成功。
五、路径,把网路上的任何东西都看做资源,restful协议建议咱们使用名词来代表接口url路径path
https://www.luffycity.com/api/v1/animals
六、method:请求方法,restful建议操做同一资源根据不一样的http请求方法执行增删改查等不一样的操做
GET:从服务器取出资源
POST:建立新的资源
PUT:更新资源的所有属性字段
PATCH:更新资源的局部属性字段
DELETE:从服务器上删除资源
七、过滤筛选,restful建议咱们把操做资源时的过滤条件加在url上面,多以查询字符串的方式
https://www.luffycity.com/api/v1/animals?age=10&gender=0数组
八、错误处理,当返回值的状态码为4XX时,返回错误信息,以便前端展现
return HttpResponse({'detail': '用户名或者密码错误'}, status=400)
服务器
九、返回结果,针对不一样操做,服务器向用户返回的结果应该符合如下规范(具体是否须要返回须看前端需求)。
GET/collection:返回资源对象的列表(数组)
GET/collection/resource:返回单个资源对象
POST/collection:返回新生成的资源对象
PUT/collection/resource:返回完整的资源对象
PATCH/collection/resource:返回完整的资源对象
DELETE/collection/resource:返回一个空restful
十、最好作到Hypermedia,即返回结果中提供连接,连向其余API(url),使得用户不查文档,也知道下一步应该作什么
{"link": {
"rel": "collection https://www.example.com/zoos",
"href": "https://api.example.com/zoos",
"title": "List of zoos",
"type": "application/vnd.yourformat+json"
}}网络