zoukankan      html  css  js  c++  java
  • 关于restful开发的疑惑

      if  你没有了解过restful  return;

    一、疑惑

      restful风格开发是有争议的,restful的设计是请求“resource”,然后只能对“resource”做CRUD操作。抽象于这四种操作 根本无法满足太多太多的业务场景,现实的很多很多业务根本无法融入到restful的规范中。比方说,user login / reset password等等。

      restful的信徒,他们会说可以把它们都归并到CRUD中的一种规范中。这在我看来,纯粹是在解决一些原本不存在,根本不需要解决的问题,纯浪费......(此处省略N个字,详情点击https://www.zhihu.com/question/28570307);

    二、解决疑惑

      但是话说回来,很多企业都在使用restful,所以我们还是有必要一定的去理解它,并且尽量使解决其中的争议。

      大部分人使用restful风格开发时把POST、GET、PUT、DELETE直接对应上CRUD,基本是正确的,其中部分有错误,很多人都是跟风,并没有理解其真正的含义。我总结了以下4点用于restful开发:

    1、POST和PUT的区别

      操作(更新或者新增)的资源的名称(URI,地址)是否由客户端决定。如果时客户端决定那么用PUT,反之用POST。例如为我的博文增加一个java的分类,生成的路径就是 分类名/categories/java,那么就可以采用PUT方法,而分类名是在服务端生成的,路径是 categories/java/add么用POST。

    2、特别业务操作的使用

      当有的业务操作,无法抽象成CRUD时,建议直接使用GET或者POST即可;

    3、POST、GET、PUT、DELETE 使用时的特性

    GET 

      • 安全且幂等
      • 获取表示
      • 变更时获取表示(缓存)

    POST

      • 不安全且不幂等
      • 使用服务端管理的(自动产生)的实例号创建资源
      • 创建子资源
      • 部分更新资源
      • 如果没有被修改,则不过更新资源(乐观锁)

    PUT

      • 不安全但幂等
      • 用客户端管理的实例号创建一个资源
      • 通过替换的方式更新资源
      • 如果未被修改,则更新资源(乐观锁)

    DELETE

      • 不安全但幂等
      • 删除资源

    4、POST、GET、PUT、DELETE 使用时的状态码

    GET

      • 200(OK) - 表示已在响应中发出
      • 204(无内容) - 资源有空表示
      • 301(Moved Permanently) - 资源的URI已被更新
      • 303(See Other) - 其他(如,负载均衡)
      • 304(not modified)- 资源未更改(缓存)
      • 400 (bad request)- 指代坏请求(如,参数错误)
      • 404 (not found)- 资源不存在
      • 406 (not acceptable)- 服务端不支持所需表示
      • 500 (internal server error)- 通用错误响应
      • 503 (Service Unavailable)- 服务端当前无法处理请求

    POST

      • 200(OK)- 如果现有资源已被更改
      • 201(created)- 如果新资源被创建
      • 202(accepted)- 已接受处理请求但尚未完成(异步处理)
      • 301(Moved Permanently)- 资源的URI被更新
      • 303(See Other)- 其他(如,负载均衡)
      • 400(bad request)- 指代坏请求
      • 404 (not found)- 资源不存在
      • 406 (not acceptable)- 服务端不支持所需表示
      • 409 (conflict)- 通用冲突
      • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
      • 415 (unsupported media type)- 接受到的表示不受支持
      • 500 (internal server error)- 通用错误响应
      • 503 (Service Unavailable)- 服务当前无法处理请求

    PUT

      • 200 (OK)- 如果已存在资源被更改
      • 201 (created)- 如果新资源被创建
      • 301(Moved Permanently)- 资源的URI已更改
      • 303 (See Other)- 其他(如,负载均衡)
      • 400 (bad request)- 指代坏请求
      • 404 (not found)- 资源不存在
      • 406 (not acceptable)- 服务端不支持所需表示
      • 409 (conflict)- 通用冲突
      • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
      • 415 (unsupported media type)- 接受到的表示不受支持
      • 500 (internal server error)- 通用错误响应
      • 503 (Service Unavailable)- 服务当前无法处理请求

    DELETE

      • 301 (Moved Permanently)- 资源的URI已更改
      • 303 (See Other)- 其他,如负载均衡
      • 400 (bad request)- 指代坏请求
      • 404 (not found)- 资源不存在
      • 409 (conflict)- 通用冲突
      • 500 (internal server error)- 通用错误响应
      • 503 (Service Unavailable)- 服务端当前无法处理请求

    原文链接地址http://www.runoob.com/w3cnote/restful-architecture.html

  • 相关阅读:
    YII中表单验证
    YII中的表单挂件
    YII数据库操作(CURD操作)
    YII中的session和cookie
    YII中面包屑制作(当前位置:网站首页 >> 会员登陆)
    ios NSFileManager 用法详解
    iOS沙盒路径的查看和使用
    iOS7改变状态栏文字颜色
    iOS常用第三方库 -转
    Linux下mysql新建账号及权限设置各种方式总结
  • 原文地址:https://www.cnblogs.com/abab/p/9234366.html
Copyright © 2011-2022 走看看