RESTful API
概念
REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移。
它首次出现在2000年Roy Fielding的博士论文中,Roy Fielding是HTTP规范的主要编写者之一。 他在论文中提到:“我这篇文章的写作目的,就是想在符合架构原理的前提下,理解和评估以网络为基础的应用软件的架构设计,得到一个功能强、性能好、适宜通信的架构。REST指的是一组架构约束条件和原则。” 如果一个架构符合REST的约束条件和原则,我们就称它为RESTful架构。
什么是无状态性
使得客户端和服务器端不必保存对方的详细信息,服务器只需要处理当前的请求,不需了解请求的历史。可以更容易的释放资源。便于服务器提高处理能力。
表述指的什么
REST全称是表述性状态转移,那究竟指的是什么的表述? 其实指的就是资源。任何事物,只要有被引用到的必要,它就是一个资源。表述指的是资源的展现形式,文本资源可以用html/json/xml格式显示,图片资源可以用png/jpg。
要让一个资源可以被识别,需要有个唯一标识,在Web中这个唯一标识就是URI(Uniform Resource Identifier)。
状态转移
REST无状态通信原则,并不是说客户端应用不能有状态,而是指服务端不应该保存客户端状态
优势
- 使用“_”或“-”来让URI可读性更好
- 使用/来表示资源的层级关系
- 使用?用来过滤资源
- ,或;可以用来表示同级资源的关系
统一资源接口
接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义
GET、HEAD:安全性(无论请求多少次,都不会改变服务器资源状态)
GET、HEAD、PUT、DELETE:幂等性(无论请求多少次,资源状态结果都是一样的、后面的请求并不会产生比第一次更多的影响)
http方法 | 资源操作 | 幂等性 | 安全性 |
---|---|---|---|
GET | 获取 | true | true |
POST | 添加/追加 | false | false |
PUT | 创建/修改 | true | false |
DELETE | 删除 | true | false |
总结
POST和PUT 区别
1.幂等性:POST是false,PUT是TRUE
2.用法:POST强调的是添加、追加,还强调“创建子资源”(POST wibo/blog添加一篇博客,不清楚新的博客是wibo/blog/1还是wibo/blog/2,只是添加了),追加(POST /web/blog/1,在序号是1的博客后面追加了新的内容);PUT强调创建/修改,在Server端没有/web/blog的情况下,使用PUT /web/blog请求可以在Server端创建blog资源。blog资源创建好之后,可以使用POST /web/blog来添加一篇新的blog文章,POST请求成功后,我们就拥有了/web/blog/1这个资源,在/web/blog已经存在的情况下,PUT /web/blog可以修改blog资源的设置;而PUT /web/blog/3则可以对某一篇特定的blog文章进行修改)。
PUT和PATCH
PUT用来整体更新一个资源,所以请求中必须包含完整的资源信息。如果缺少部分信息,会导致这部分数据被更新为NULL。
PATCH则是部分更新。仅更新提供的字段,请求中缺少的字段仍保持不变。
HEAD和OPTIONS
HEAD请求用于获取某个资源的元数据(metadata)–比如,该资源是否存在,该资源的内容长度是多少等等。
OPTIONS请求用于获取某个资源所支持的Request类型,在OPTIONS请求的Response中会包含Allow头信息,比如:
Allow: GET HEAD
上述例子表示该资源只支持GET请求与HEAD请求。
参考博客:https://blog.csdn.net/xluren/article/details/40538783
参考书籍:《RESTful Web Services》