REST(表述性状态转移)是最近几年讨论的最为热烈的话题之一,其起源于Roy.T.Fielding博士的论文《软件架构风格和基于网路的软件架构设计》。Roy博士在他的论文里从架构风格角度阐述了网络应用程序中最佳架构风格REST。

  首先,REST是一个架构风格而不是一个架构,所谓架构风格就是凌驾于架构之上的一组约束。

  其次,REST对立面是RPC,而不是webservices或者SOAP,最近一些年关于REST和RPC的争论一直不断

  再次,一般的互联网服务调用存在两种User Agent,一种是普通浏览器,另一种是Client程序,REST主要针对是第二者,系统集成时候各个系统之间的服务调用

  REST强调的是尽可能多的用HTTP协议本身的语义来传达信息,这样能减少服务双方关于语义共识的需要

  在我看来,REST是标准的互联网技术,在企业内网应用价值大打折扣,因为在互联网中,随时有新的服务供应商产生,你永远也不知道将来可能要调用谁的服务,也永远不知道将来谁会把服务改掉,所以使用传统RPC服务使用者和服务供应者之间的沟通的协调难度非常大。而在企业内网虽然系统也很庞大,但是再庞大的系统也被认为是封闭的,可估算的,你很容易地知道要调用哪些服务。

  MartinFowler在最近的一篇文章里描述了逐步实现REST的四个级别:

  0级:传统的RPC,基于SOAP的WS,调用的服务名,参数放在HTTP协议的body里面,同时必须以POST方式提交,问题在于你必须清楚的知道所有服务,子服务,及其参数的信息,并且需要知道各种服务的不同点。

  1级:利用resource概念,把所有服务都抽取成resource概念,从body中提取到header里,这样做的好处就是如果你知道一个服务地址,你可能无需知道具体服务是什么,依照资源的惯例就访问到服务,比如/books/1。

  2级:利用HTTP动词,HTTP定义了4种动词,GET获取服务器资源,POST在服务器上创建新资源,PUT更改服务器上资源,DELETE删除服务器上资源,任何操作都可以看成增删改查,所以利用标准的http verb加上resource(/book/1)就能准确地操作资源,当你不知道服务具体是什么的时候也可以轻易按照惯例访问到服务,然而服务供应商更改服务也需要遵循惯例,不会像RPC那样轻易更改服务接口。

  3级:最高级别,超媒体既应用状态引擎。这个意思是说,对于任何服务都存在很多子服务,你只需要知道第一个服务的入口,便可以依据服务返回结构的自描述性得到下一个服务的入口,这样在服务供应商修改服务的时候,不会影响到客户端的调用。

RESTful Level的更多相关文章

  1. RESTFUL Level&HATEOAS

    1.什么是RESTful? REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.翻译过来就是"表现层状态转化." Roy Thomas Fie ...

  2. 基于轻量型Web服务器Raspkate的RESTful API的实现

    在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RESTful API. 模块 首先让我们了解一下"模块&quo ...

  3. 使用 Spring 3 来创建 RESTful Web Services

    来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...

  4. atitit.RESTful服务的概览and框架选型

    atitit.RESTful服务的概览and框架选型 1. REST基础概念: 1 2. URL说明: 1 3.  1 4. RESTful框架选型 2 1. spring mvc( recomm) ...

  5. RESTful和JAX-RS

    一.简介 Java Web有很多成熟的框架,主要可以分为两类Web Application和Web Services.用于Web Application的框架包括官方的Servlet/JSP, JST ...

  6. 使用 Spring 3 来创建 RESTful Web Services(转)

    使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...

  7. [转] Creating a Simple RESTful Web App with Node.js, Express, and MongoDB

    You can find/fork the sample project on GitHub Hey! This and all my other tutorials will soon be mov ...

  8. Spring 3 来创建 RESTful Web Services

    Spring 3 创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参考实现 ...

  9. HTTP methods 与 RESTful API

    Note GET, primarily used to select resources. Other options for an API method include: POST, primari ...

随机推荐

  1. linux下chromedriver的安装

    很多时候,发现phantomjs被一些网站屏蔽导致我们无法达到想要的结果,一方面phantomjs也停止维护,这时候们可以使用chromedriver(谷歌)或者firefoxdriver(火狐)来代 ...

  2. hadoop启动namenode日志报这个错,首先说怎么看日志

    hadoop启动namenode日志报这个错,首先说怎么看日志, 启动namenode会有这个,ubuntu: starting namenode, logging to /home/xiaoye/h ...

  3. 记录ok6410 jlink 命令行调试uboot

    1\启动ok6410 进入uboot命令行 2\启动JLinkGDBServer -device ARM11 3\arm-none-eabi-gdb u-boot 初始化脚本 # Connect to ...

  4. VS2017不能弹出安装界面的原因.

    如果这里选中了放大.100%入坑 解决办法:  禁用视觉主题,和元素,即可安装正常

  5. CCF CSP 201312-2 ISBN号码

    题目链接:http://118.190.20.162/view.page?gpid=T4 问题描述 试题编号: 201312-2 试题名称: ISBN号码 时间限制: 1.0s 内存限制: 256.0 ...

  6. Global.asax

    ASP.NET Global.asax 文件使用方法 - .net 标签:               asp.net.netapplicationauthenticationsessionobjec ...

  7. 微信小程序数组对象

    xml:<block wx:for="{{post_key}}" wx:for-item="{{item}}"></block> dat ...

  8. WdatePicker 日期区间设置

    <input id="billsStartDate" name="billsStartDate" onclick="WdatePicker({d ...

  9. Jquery实现checkbox按shift多选

    html <html> <head> <meta http-equiv="content-type" content="text/html; ...

  10. 代理模式——用AOP测试业务层方法的执行时间

    代理模式 对代理模式的理解,通过http://www.runoob.com/design-pattern/proxy-pattern.html 对AOP的代理模式,参考https://www.cnbl ...