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

关于restful开发的疑惑的更多相关文章

  1. 基于反射实现自己主动化restful开发

    [Author]: kwu 基于反射实现自己主动化restful开发,通用的仅仅须要写查询数据库的sql.并增加相应的javabean实现的高速restful服务的开发. 1.编写数据库的查询sql. ...

  2. 简化RESTful开发,Spring Data REST让你少掉发

    1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 前言 Springboot + Spring MVC大大简化了Web应用的RESTful开发,而Spring Data RE ...

  3. 前后端分离和restful开发规范

    一.web开发的两种模式 1.前后端不分离 在前后端不分离的应用模式中,前端页面看到的效果都是由后端控制,由后端渲染页面或重定向,也就是后端需要控制前端的展示,前端与后端的耦合度很高. 这种应用模式比 ...

  4. RESTful 开发风格介绍

    REST(英文:Representational State Transfer,简称REST)描述了一个架构样式的网络系统.在目前主流的三种Web服务交互方案中,REST相比于SOAP(Simple ...

  5. restful开发API

    http://blog.csdn.net/kkkloveyou/article/details/21391033 小示例http://blog.csdn.net/u011645059/article/ ...

  6. 如何设计处优秀的Restful API

    只知道遵规循矩的程序员是假程序员,任何技术都是不断发明创造改进的. 如何设计处优秀的Restful API?  盲目跟风,设计糟糕的Resful API = 浪费时间 ! 不啰嗦,直接进入技术主题: ...

  7. struts拓展restful

    为restful开发的话,一定要设计到URL,struts正好是管理URL的 所以在struts的项目中用restful,要遵守struts的规则 rest在struts中对应的方法 上面是官方给出的 ...

  8. restful是什么

    resful是什么 rest是一种开发的风格,他不是框架,也没有类库,是一种约定 有什么不同 非restful的开发方式 当没有接触restful的时候,URL通常是动词,比如127.0.0.1:80 ...

  9. RESTful API 编写指南

    基于一些不错的RESTful开发组件,可以快速的开发出不错的RESTful API,但如果不了解开发规范的.健壮的RESTful API的基本面,即便优秀的RESTful开发组件摆在面前,也无法很好的 ...

随机推荐

  1. Python中os.listdir的排序问题

    上周应别人要求,使用python批量修改文件名称.文件名有规律,当时就用了一个函数直接精确的用文件名替换了.后来想直接可以用listdir来遍历每个文件来修改更加通用一些.但是看了os.listdir ...

  2. JDK配置步骤

    1.安装jkd1.6.0以上版本. 2.安装结束后,运行cmd.键入: java -version判断JDK是否安装成功,如下图所示. 3.首先需要到官网上下载JDK这款软件,本人下载的是jdk-6u ...

  3. Excel 操作总结

    1.excel 表格中换行:Alt+Enter; 2.Excel2003以上版本设置下拉菜单     DATA->Data Validation ->Data Validation -&g ...

  4. 关闭TCP中135、139、445、593、1025 等端口的操作方法 (转)(记录下)

    操作要领:封闭端口,杜绝网络病毒对这些端口的访问权,以保障计算机安全,减少病毒对上网速度的影响. 近日发现有些人感染了新的网络蠕虫病毒,该病毒使用冲击波病毒专杀工具无法杀除,请各位尽快升级计算机上的杀 ...

  5. 使用Virtual Audio Cable软件实现电脑混音支持电脑录音

    http://blog.csdn.net/cuoban/article/details/50552644

  6. Linux下通过samba进行文件共享与挂载

    1.在共享服务端安装samba:# yum install samba samba-client.x86_64 samba-common -y 2.在共享服务端需要防火墙开通139.445端口: # ...

  7. 如何查看SharePoint Server的版本信息

    可以通过查看注册表来得你当前运行的是SharePoint 2010的哪个版本,具体步骤如下: 1. 登录到安装了SharePoint Central Administration 的服务器. 2. 点 ...

  8. MVC 入门-MvcMovie

    入门教程 ASP.NET MVC 5 入门 https://docs.microsoft.com/zh-cn/aspnet/mvc/overview/getting-started/introduct ...

  9. Java 字符流与基本IO

    字符流基类 java.io包中专门用于字符流处理的类,是以 Reader 和 Writer 为基础派生的一系列类.字符流以字符为单位,根据码表映射字符,一次可能读多个字节,只能处理字符类型的数据.Re ...

  10. 将git关联到pycharm

    1. 安装pycharm 2. 安装git 3. 打开pycharm, 点钟File -> settings -> Version Control -> Git 该面板中,填写git ...