一. RESTful html
RESTful (Representational State Transfer) 是一种经常使用流行的软件架构,设计风格或协议标准。提供了一组设计风格和约束条件。主要用于客户端和服务端的交互。java
1. 统一资源接口api
2.使用http方法安全
iOS 以AFNetworking 为例架构
typedef NS_ENUM(NSUInteger, HTTPMethod) { GET = 10, HEAD, POST, PUT, PATCH, DELETE };
2.1 幂等性(idempotent、idempotence)ide
Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests isurl
the same as for a single request.spa
——HTTP/1.1规范中幂等性的定义.net
(1)幂等性是数学中的一个概念,表达的是N次变换与1次变换的结果相同设计
(2)“发起一个指定请求 N 次,获得的结果影响应该是一致的”
(3)http 幂等性 针对的是请求结果 不是请求资源内容
GET 幂等性:不论请求多少次,GET请求结果都不变。
(至关于只读,你只有读结果 eg: get news list / get current time stamp 可能返回内容有变坏,可是获得结果 就是目标新闻列表/当前时间戳 )
POST 非幂等性: 不论调用多少次,都将是产生新的资源 (至关于新建)
PATCH 非幂等性:PUT方法的补充,用来对已知资源进行局部更新,更新屡次,就会请求屡次 好比只执行一次累加,可是不当心触发屡次求,累加结果会不断变化 (按需更新)
PUT 幂等性:操做主要用来替换所有的资源,并且其实幂等的。(用替换的形式来实现更新效果,每次都得把所有内容都写一遍,全部有了补充的PATCH)
DELETE 幂等性:请求删除目标资源,结果都是一个结果“删除”,所以是幂等的
2.2 遵照RESTful 设计规则 选择 Http 请求方式
(1)POST & PUT & PATCH 使用区别
若是是昨天以前,有人这么问我,我可能只会简单回答一两句:“POST 是向服务端写入资源,PUT 是更新所有资源,PATCH 是更新指定资源” 好像也说不出更多的花花样了。
那么如今我就会从幂等性和 RESTful 设计约束角度多说一点。
“POST 从幂等性质来说 是非幂等的,使用POST 请求会明确可知这一点,每一次POST请求结果都会建立新的资源(关键在建立新的 非幂等)”
“PUT 是幂等的 是所有替换更新资源。(关键是在更新所有 幂等)”
“PATCH 非幂等性 是更新部分资源”
“看似有些时候 用哪一种请求都尚可的状况,从尊重RESTful 协议角度,若是你明确这个api 须要资源幂等性,那么就应该设计使用PUT 的请求方式,这样来直观明确表达。”
(2)GET & POST 使用区别
若是是昨天以前,有人这么问我,我可能也是一两句回答:“GET 请求是没有请求body 直接url 明文获取资源 ,而且 url 长度还有限制 POST 请求是向服务端写入资源 有请求body POST 请求相对比 GET 更安全 由于body信息不在url里体现”。这样子
今天 我就能够从幂等性来进一步说明这个区别
“ GET 是幂等 适合作查询操做 POST 非幂等,适合作建立新增操做”
“若是均可以的时候,由于GET 请求参数都要写在URL 里 有明文 和 长度限制的特色”
“这个时候能够选择使用POST 来进行’查新’的折中方案,不会在url 中体现参数,也规避了url 的长度限制 虽然POST 非幂等,但方案折中符合要求 ”。
参考