推荐博客:https://www.cnblogs.com/GGGG-XXXX/p/9564651.html
RESTful规范
我们在浏览器中能看到的每个网站,都是一个web服务。那么我们在提供每个web服务的时候,都需要前后端交互,前后端交互就一定有一些实现方案,我们通常叫web服务交互方案
目前主流的三种web服务交互方案:
-- REST ( Representational State Transfer)表述性状态转移
-- SOAP (Simple Object Access Protocol) 简单的对象访问协议
-- XML-RPC (XML Remote Procedure Call)基于XML的远程过程调用
RESTful
表征性状态转移。这里所说的表征性,其实指的就是资源。通常我们称为资源状态转移
资源:任何事物,只要有被引用到的必要,它就是一个资源,不仅包括文本图片视频也包括抽象的概念,比如两个人的关系.资源在web中的唯一标识URI
URI 统一资源标志符。
URL 统一资源定位符。(URL可以说是URI的子集,通过定位的方式实现的URI。)
URI是给我们的资源进行标识的,URL是描述我们资源地址的。
统一资源接口:只使用一个URL,然后根据HTTP请求方式的不同,对资源进行不同的操作,这个就是是统一资源接口
资源的表述:资源的表述其实就是资源的展现形式,我们客户端和服务端传输的都是资源的表述,而不是资源本身。
状态转移:从当前资源的表述(也可以说状态或者表现层)会跳转到其他的资源状态,通过超链接的指引,实现"表现层状态转移"
总结:
(1)在web中,只要有被引用的必要都叫资源。
(2)每个URI代表一个资源,独一无二的。
(3)客户端通过HTTP的方法,对服务器端资源进行操作;
(4)客户端和服务器之间,传递这种资源的某种表现层;
(5)通过超链接的指引,实现"表现层状态转移"。
10条规范:
1. 面向资源编程
每个URL代表一种资源,URL中尽量不要用动词,要用名词。
2. 根据method不同,进行不同的操作
GET/POST/PUT/DELETE/PATCH
3. 在URL中体现版本
https://www.bootcss.com/v1/mycss
https://v1.bootcss.com/mycss
4. 在URL中体现是否是API
https://www.bootcss.com/api/mycss
https://api.bootcss.com/mycss
5. 在URL中的过滤条件
https://www.bootcss.com/v1/mycss?page=3
6. 尽量使用HTTPS
https://www.bootcss.com/v1/mycss
7. 响应时设置状态码
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
2xx:成功
200:OK,请求成功
201:OK,新的资源建立(post命令)
202:请求被接受,但处理未完成
204:OK,但没有内容返回
------------------------------------------------------------------------
3xx:重定向:需要用户代理执行更多的动作
301:Moved Permanently永久转移(所请求的资源已被指派为新的固定URL)
302:Found 暂时转移(所请求的资源临时位于另外的URL)
304:文档没有修改(条件GET)
307:Temporary Redirect(临时重定向)
------------------------------------------------------------------------
4xx:客户差错
400:Bad Request 请求错误
401:Unauthorized 未认证(该请求要求用户认证)
403:Forbidden 不明原因的禁止
404:Not Found 未找到
------------------------------------------------------------------------
5xx:服务器差错
500:Internal Server Error(服务器错误)
501:没有实现
502:错误的网关(网关或上游服务器来的无效响应)
503:Service Unavailable(一般是访问人数过多)
8. 返回值
GET请求 返回查到所有或单条数据
POST请求 返回新增的数据
PUT请求 返回更新数据
PATCH请求 局部更新 返回更新整条数据
DELETE请求 返回值为空
9. 返回错误信息
返回值携带错误信息
10. Hypermedia API
如果遇到需要跳转的情况 携带调转接口的URL
ret = {
code: 1000,
data:{
id:1,
name:'小强',
depart_id:http://www.luffycity.com/api/v1/depart/8/
}
}