写一下我对restful的理解,最近换工作面试的时候有问到我restful api的东西,工作中以前很多项目也是webapi + js前台控件的形式构建系统。实际上感觉restful太“理想化”,用起来不是特别顺手, 举例说明下:
先看看什么叫restful:
REST的名称"表现层状态转化"中,省略了主语。"表现层"其实指的是"资源"(Resources)的"表现层"。
所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。你可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI。要获取这个资源,访问它的URI就可以,因此URI就成了每一个资源的地址或独一无二的识别符。
客户端用到的手段,只能是HTTP协议。具体来说,就是HTTP协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。
  • GET /tickets # 获取ticket列表
  • GET /tickets/12 # 查看某个具体的ticket
  • POST /tickets # 新建一个ticket
  • PUT /tickets/12 # 更新ticket 12.
  • DELETE /tickets/12 #删除ticekt 12
实际上呢,不是所有的东西都是“资源”,尤其是在业务系统中,缺点如下:
有个接口是更新订单状态,你是用上面的GET POST PUT DELETE 哪个呢,看样子应该是PUT,但是路径呢PUT /tickets/12
我有时候多个接口 ,更新订单收款状态,更新订单支款状态,更新订单结算状态;
Restful 的路径明显不友好不够用;
比如,Resuful要求 GET /tickets # 获取ticket列表 。我们曾经有个需求,对方会把不超过1000个订单id传给我们,我们系统过滤其中一部分特殊订单;这也是个查询服务,用GET /tickets # 获取ticket列表的形式,1000个订单id显然是超过GET url长度的,这里也不合适;再者,我想开发多个条件查询列表服务,路径这么浅显然不合适;
实际业务中,我们webapi的路径是这样的:systemAlias/controller/action
总结下规则:
简单查询尽量用GET,好处是可以直接带查询参数copy api路径;
复杂查询和更新用POST,用的最多;
不用PUT和DELETE,原因是增加复杂度,并没有带来什么好处
看看BAT的很多openapi,也是写着restful,实际没有严格遵守,都是get和post,这是也很多人不知道put和delete的原因
如:
//根据订单id获取订单
GET oms/order/queryOrderById?id=value1&param2=value2
//根据订单id List获取订单
POST oms/order/queryOrderByIdList
//根据条件查询订单,带分页参数
POST oms/order/queryOrderByCondition
//更新订单收款状态
POST oms/order/updateOrderCollectionStatus
//批量更新订单收款状态
POST oms/order/updateOrderCollectionStatusInBatch
//批量更新订单收款状态
POST oms/order/updateOrderCollectionStatusInBatch
//批量删除订单,带操作来源
POST oms/order/deleteOrderInBatch
可能是我对Restful理解不够,觉得这种变种的服务路径才是最优解,有大侠欢迎教育 :)

转载于:https://www.cnblogs.com/binlin1987/p/6971808.html

Restful的理解,Restful 优缺点相关推荐

  1. [转载] 理解RESTful架构

    原文: http://www.ruanyifeng.com/blog/2011/09/restful.html 理解RESTful架构 作者: 阮一峰 日期: 2011年9月12日 越来越多的人开始意 ...

  2. RestFul是什么?怎样理解RestFul?

    文章目录 1. 什么是RESTful 2. 理解RESTful架构 2.1 资源(Resources) 2.2 表现层(Representation) 2.3 状态转化(State Transfer) ...

  3. [转] 理解RESTful架构

    FROM:http://www.ruanyifeng.com/blog/2011/09/restful.html 越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件 ...

  4. 理解RESTful架构

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  5. 我是如何根据豆瓣api来理解Restful API设计的

    1.什么是REST REST全称是Representational State Transfer,表述状态转移的意思.它是在Roy Fielding博士论文首次提出.REST本身没有创造新的技术.组件 ...

  6. 如何理解 RESTful 的幂等性

    来源:http://blog.720ui.com/2016/restful_idempotent/ 理解RESTful的幂等性,并且设计符合幂等规范的高质量RESTful API. 怎么理解幂等性 H ...

  7. RESTful再理解

    目录 目录 前言 RESTful的目的 REST的含义 表现层 状态转化 无状态协议HTTP 最后 前言 这是在经过一段时间的积累后,对RESTFul框架的再一次更深入的理解.希望能够将零散的知识点连 ...

  8. 理解RESTful架构【转】

    越来越多的人开始意识到,网站即软件,而且是一种新型的软件. 这种"互联网软件"采用客户端/服务器模式,建立在分布式体系上,通过互联网通信,具有高延时(high latency).高 ...

  9. 如何理解RESTful的幂等性

    理解RESTful的幂等性,并且设计符合幂等规范的高质量RESTful API. 怎么理解幂等性 HTTP幂等方法,是指无论调用多少次都不会有不同结果的 HTTP 方法.不管你调用一次,还是调用一百次 ...

最新文章

  1. P2B: Point-to-Box Network 点云目标跟踪(CVPR 2020)
  2. 尼日利亚学生开发者,用阿里云PAI打造了卡通头像神器
  3. 正方形矩阵求对角线之和
  4. Linux 用户空间和内核空间
  5. layui select第一次无法选中_Windows 10 无法访问共享的解决办法大全
  6. NET中的三种Timer的区别和用法
  7. 面试题13:在O(1)时间删除链表结点
  8. 信号与线性系统分析(吴大正,郭宝龙)(3-单位脉冲/阶跃序列以及4-信号的运算)
  9. 使用换IP软件的代理IP速度缓慢的原因是什么?详解!
  10. 威纶触摸屏与电脑连接_威纶触摸屏与三菱PLC通信接线方法
  11. 触宝输入法+android,触宝输入法国际版
  12. 手撕栈,栈的实现(C语言)
  13. QCustomPlot系列 进行框选放大(二)
  14. 怎样去除掉心灵的杂草
  15. Centos7x破解密码
  16. 码率控制(二):CRF详解
  17. 硬件架构的艺术:同步FIFO设计
  18. 记录自己复习考研专业课C语言1
  19. Unity中实现放大镜的功能
  20. 域名被微信拦截怎么才能恢复

热门文章

  1. form组件、cookie、session机制
  2. 2018焦作网络赛 - Poor God Water 一道水题的教训
  3. centos 中设置网卡等相关参数
  4. python基础27 -----python进程终结篇-----IO模型
  5. 学习笔记25_MVC前台API
  6. truncate delete 与 drop的区别
  7. java 读excel
  8. .NET开发人员十大必备下载工具
  9. Linux中的date、cal、bc三个简单命令
  10. 华为私有云的搭建方案_华为云搭建word press