REST模式--RESTful web服务_salcon的博客-程序员秘密

技术标签: REST  RESTful  

表征状态转移(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。

目前在三种主流的Web服务实现方案中,因为REST模式的Web服务与复杂的SOAPXML-RPC对比来讲明显的更加简洁,越来越多的web服务开始采用REST风格设计和实现。例如,Amazon.com提供接近REST风格的Web服务进行图书查找;雅虎提供的Web服务也是REST风格的。

要点及标准

需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

  • 资源是由URI来指定。
  • 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。

REST的要求

  • 客户端和服务器结构
  • 连接协议具有无状态性
  • 能够利用Cache机制增进性能
  • 层次化的系统
  • 随需代码 - Javascript (可选)

关于状态

应该注意区别应用的状态和连接协议的状态。REST对于连接的无状态性实际上要求每次经过无状态的连接协议传送的信息必须包含应用中所有的状态信息。

RESTful Web 服务

RESTful Web 服务(也称为 RESTful Web API)是一个使用HTTP并遵循REST原则的Web服务。它从以下三个方面资源进行定义:

  • URI,比如:http://example.com/resources/
  • Web服务接受与返回的互联网媒体类型,比如:JSONXML ,YAML 等。
  • Web服务在该资源上所支持的一系列请求方法(比如:POST,GET,PUT或DELETE)。

该表列出了在实现RESTful Web 服务时HTTP请求方法的典型用途。

HTTP 请求方法在RESTful Web 服务中的典型应用 [1]
资源 GET PUT POST DELETE
一组资源的URI,比如http://example.com/resources/ 列出 URI,以及该资源组中每个资源的详细信息(后者可选)。 使用给定的一组资源替换当前整组资源。 在本组资源中创建/追加一个新的资源。 该操作往往返回新资源的URL。 删除 整组资源。
单个资源的URI,比如http://example.com/resources/142 获取 指定的资源的详细信息,格式可以自选一个合适的网络媒体类型(比如:XML、JSON等) 替换/创建 指定的资源。并将其追加到相应的资源组中。 把指定的资源当做一个资源组,并在其下创建/追加一个新的元素,使其隶属于当前资源。 删除 指定的元素。

PUT 和 DELETE 方法是幂等方法。GET方法是安全方法 (不会对服务器端有修改,因此当然也是幂等的)。

不像基于SOAP的Web服务,RESTful Web服务并没有的“正式”标准[2]。 这是因为REST是一种架构,而SOAP只是一个协议。虽然REST不是一个标准,但在实现RESTful Web服务时可以使用其他各种标准(比如HTTP,URL,XML,PNG等)。

实现举例

例如,一个简单的网络商店应用,

列举所有商品,

GET http://www.store.com/products

呈现某一件商品,

GET http://www.store.com/product/12345

下单购买,

POST http://www.store.com/order
<purchase-order>
  <item> ... </item>
</purchase-order>

REST的优点

  • 可以利用缓存Cache来提高响应速度
  • 通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
  • 浏览器即可作为客户端,简化软件需求
  • 相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
  • 不需要额外的资源发现机制
  • 在软件技术演进中的长期的兼容性更好

实现

参考资料

  1. ^ Richardson, Leonard; Ruby, Sam, RESTful Web Services, O'Reilly. 2007 ((May 8, 2007)), ISBN 0596529260
  2. ^ Elkstein, M. What is REST?. Retrieved on 2009-07-04.
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/skjack2010/article/details/21697209

智能推荐

tomcat用memcache进行session共享_清霄的博客-程序员秘密

tomcat版本及环境Using CATALINA_BASE:   /usr/local/81tomcatUsing CATALINA_HOME:   /usr/local/81tomcatUsing CATALINA_TMPDIR: /usr/local/81tomcat/tempUsing JRE_HOME:        /usrUsing CLASSPATH:     

【纯新手】虚拟机安装kali教程_mukami0621的博客-程序员秘密

最近在学渗透测试这方面的知识,就默默用虚拟机安装了kali linux,因为自己是个纯新手,虽然网上有教程,但是还是感觉不够具体,以至于我自己装了大概5次才真正装成功,所以决定写一篇比较具体一点的,也算是给自己留下点纪念吧,如果能帮到和我一样是新手的人,那就更好了。1.下载kali可以在官网选择适合自己的版本下载: http://www.kali.org/downloads/  或者,

JAVA HTML 转 PDF-程序员秘密

JAVA 通过 itext,wkhtmltopdf 等,将 HTML 转成 PDF。这里通过 wkhtmltopdf 实现htmlHTML转PDFwkhtmltopdf 是一个开源的,使用Qt WebKit 渲染引擎,把 html 转换为 pdf 文件的命令行工具。wkhtmltopdf官网地址wkhtmltopdf下载下载地址:https://wkhtmltopdf.org/downloads.html根据系统选择相应的版本这里以Linux为例:版本:wkhtmltox-0.12.

OpenGL编程指南(原书第8版)环境搭建_chen_227的博客-程序员秘密

环境搭建学习《OpenGL编程指南》,首先要搭建环境,运行第一个例子【第一个 OpenGL 程序 triangles.cpp】我的环境是Ubuntu14.04,以下阅读需要有linux基础知识。安装依赖库gcc g++ 安装cmake 3.19.0-rc2 源码编译安装官网https://cmake.org/download/安装命令$sudo ./bootstrap$sudo make$sudo make install安装opengl的头文件$sudo ap

ldconfig命令作用_wangqiaowqo的博客-程序员秘密

刚才在安装xchm的时候,因为没有执行ldconfig命令,导致xchm在运行的时候找不到so文件,而so文件是一个动态链接库。我们必须用ldconfig来共享它。ldconfig是一个动态链接库管理命令名称: /sbin/ldconfig 配置动态连接器(ld)运行时邦定语法: /sbin/ldconfig [ -nNvXV ] [ -f ...

7-52 数组元素循环右移问题(20 分)_centralunit的博客-程序员秘密

7-52 数组元素循环右移问题(20 分)一个数组AAA中存有NNN(&amp;gt;0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移MMM(≥0)个位置,即将AAA中的数据由(A0A1⋯AN−1A0A1⋯AN−1A_0A_1\cdots A_{N-1})变换为(AN−M⋯AN−1A0A1⋯AN−M−1AN−M⋯AN−1A0A1⋯AN−M−1A_{N-M}\cdots A_{N-1}A_...

随便推点

Elasticsearch升级数据迁移批量流式操作_trayvontang的博客-程序员秘密

目录一、简介二、bulk请求三、流式bulk操作四、http工具一、简介最近Elasticsearch升级,准备从5.2.2升级到最新的7.4.2。胆子敢这么肥的一个重要的原因是因为这个业务部分的Elasticsearch集群数据量不大,不到200G。了解了一下elasticdump,最后放弃了,决定自己写代码来迁移。因为rest client高版本的和低版本的transport cli...

【源码】Spring —— PropertySource 解读_getpropertynames_小水牛...的博客-程序员秘密

【源码】Spring —— PropertySource 解读前言PropertySourceEnumerablePropertySourceServletContextPropertySourceServletConfigPropertySourceMapPropertySourceSystemEnvironmentPropertySourcePropertiesPropertySourceResourcePropertySource类图总结前言property 键值对属性的抽象封装类注意跟 @Pr

POI将数据导入Excel,上传到服务器,并从客户端保存_mengxianhua的博客-程序员秘密

      POI将数据导入Excel,上传到服务器,并从客户端保存                          Map recordMap = null;      String key = "";                String value = "";            String sql = DBHelper.tostr(request.getParameter(

ERROR2003 10060引发的MySql用不了_weixin_33819479的博客-程序员秘密

绿色版的MYSQL启动时的问题:ERROR2003 10060引发的MySql起不来。 具体情形: ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) 或ERROR 2003 (HY000): Ca...

数据结构_基本概念(数据结构定义,算法定义,算法的时间复杂度,空间复杂度)_数据结构、算法、时间复杂度的概念_binge_kong的博客-程序员秘密

数据结构定义程序设计 = 数据结构 + 算法数据结构分:逻辑结构和物理结构逻辑结构:集合线性结构树形结构图形结构物理结构顺序结构: 硬盘中的存储单元是连续的,底层是数组实现的链式存储结构:硬盘中的存储单元可以不连续的, 底层是链表实现的...

推荐文章

热门文章

相关标签