iOS 学习 RESTful 中 Http 的幂等性

一. 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 非幂等,但方案折中符合要求 ”。

        

      参考 

  1. https://blog.csdn.net/SasukeN/article/details/80919889
  2. http://www.javashuo.com/article/p-gpxpexmb-kh.html
  3. https://blog.csdn.net/qq_33489669/article/details/56479485
相关文章
相关标签/搜索