zoukankan      html  css  js  c++  java
  • iOS 学习 RESTful 中 Http 的幂等性

    一. RESTful 

      RESTful (Representational State Transfer) 是一种常用流行的软件架构,设计风格或协议标准。提供了一组设计风格和约束条件。主要用于客户端和服务端的交互。

     1. 统一资源接口

     2.使用http方法

       iOS 以AFNetworking 为例

    typedef NS_ENUM(NSUInteger, HTTPMethod) {
        GET = 10,
        HEAD,
        POST,
        PUT,
        PATCH,
        DELETE
    };
     

        2.1 幂等性(idempotent、idempotence)

          Methods can also have the property of “idempotence” in that (aside from error or expiration issues) the side-effects of N > 0 identical requests is

          the same as for a single    request.

       ——HTTP/1.1规范中幂等性的定义

      (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. https://www.cnblogs.com/duhuo/p/4245202.html
    3. https://blog.csdn.net/qq_33489669/article/details/56479485
  • 相关阅读:
    linux安装篇之mongodb安装及服务自启动配置
    Linux下启动mongodb
    java 实现 图片与byte 数组互相转换
    用java imageio调整图片DPI,例如从96调整为300
    StringRedisTemplate操作redis数据
    Docker 更换国内的Hub源
    2、Docker 基础安装和基础使用 一
    Centos 6.x Openssh 升级 7.7p1 版本
    1、Docker 简介
    2. Python环境安装
  • 原文地址:https://www.cnblogs.com/someonelikeyou/p/10233709.html
Copyright © 2011-2022 走看看