REST模式--RESTful web服务-程序员宅基地

技术标签: 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

智能推荐

JDK17新特性_jdk17免费多久-程序员宅基地

文章浏览阅读2.6w次。JDK17 (LTS)长期支持版本JDK17 是继jdk11后的长期支持版本,中间 12到16都是非长期支持版本,17支持到 2029 年 9 月由于了解到Oracle JDK17免费下载,可以免费商用,但是1、JDK17确实可以免费商用,时间截止到2024年9月,共计3年。完整的许可协议在这里(NFTC,https://www.oracle.com/downloads/licenses/no-fee-license.html),我把权利和义务放到附录1。里面说的比较清楚,在符合美国进出口限制的情况_jdk17免费多久

java winrm4j 中文乱码问题-程序员宅基地

文章浏览阅读1.7k次。由于编码问题,java通过远程调用winrm形式,在控制台返回字符中,包括中文时,显示???,出现中文乱码!通过调整$outputencoding的方式,依然出现乱码。所以采用曲线实现的方式,通过将结果重定向输入到文件(指定文件编码格式),再读取文件的形式,获得执行脚本的结果。代码如下:package com.test;import java.io.UnsupportedEncodingExc...

虚拟机tar解压出错:gzip: stdin: unexpected end of file的解决_gzip: stdin: unexpected end of file tar: unexpecte-程序员宅基地

文章浏览阅读3k次。安装Redis时候,解压的时候出现了这样的错误:gzip: stdin: unexpected end of filetar: Unexpected EOF in archivetar: Error is not recoverable: exiting now最后发现,这个问题是因为压缩文件是从Windows拖拽到虚拟机,后来改成从Windows复制粘贴到虚拟机就可以了..._gzip: stdin: unexpected end of file tar: unexpected eof in archive tar: unex

网络MSDTC(分布式事务处理协调器)服务配置方法-程序员宅基地

文章浏览阅读1.1k次。一、启用网络DTC访问的步骤 启用网络DTC是分布式数据库事物控制的必要条件。设置过程应依下面步骤进行。 1)单击“开始”,指向“控制面板”,然后单击“添加或删除程序”; 2)单击“添加/删除 Windows 组件”; 3)选择“应用程序..._数据库服务器没有mdtc配置

CVPR2021 Deep Burst Super-Resolution阅读笔记-程序员宅基地

文章浏览阅读2.6k次,点赞6次,收藏10次。Key WordsSR:超分辨率 LR:低分辨率 HR:高分辨率 SISR:单图超分辨率MFSR:多帧超分辨率 Burst Photography:高速连拍背景知识:SR:是由一个或几个LR的图像生成HR图像的任务。SISR:即由一个单一LR输入生成HR的过程。近年来颇受追捧,究其原因,因为深度学习的引入使得SR的性能得到显著提升。但有缺陷:需要学习图像先验数据训练模型,丰富图像高频细节。MFSR:利用多张LR图像重建生成更高质量的HR。人们可以使用手持相机及手机高速连拍多张_deep burst super-resolution

使用Sequelize连接数据库-程序员宅基地

文章浏览阅读634次。Sequelize.js是一款针对nodejs的ORM框架。使用nodejs连接过数据库的人肯定对数据库不陌生了。如果是直接链接,需要自己建立并管理连接,还需要手动编写sql语句。简单的项目到是无所谓,可是一旦项目设计的东西比较复杂,表比较多的时候整个sql的编写就非常的消耗精力。在Java、c#等语言中已经有轻量的数据库框架或者解决..._sequelise 外置数据库

随便推点

LeetCode875 珂珂吃香蕉-程序员宅基地

文章浏览阅读366次。题目描述:珂珂喜欢吃香蕉。这里有 N 堆香蕉,第 i 堆中有 piles[i] 根香蕉。警卫已经离开了,将在 H 小时后回来。珂珂可以决定她吃香蕉的速度 K (单位:根/小时)。每个小时,她将会选择一堆香蕉,从中吃掉 K 根。如果这堆香蕉少于 K 根,她将吃掉这堆的所有香蕉,然后这一小时内不会再吃更多的香蕉。珂珂喜欢慢慢吃,但仍然想在警卫回来前吃掉所有的香蕉。返回她可以在 H 小时内吃掉所有香蕉的最小速度 K(K 为整数)。思路:使用二分查找法 找出最小速度K 查找边界是 最小吃香蕉速度是1 ,

用python制作生日蛋糕_纯HTML5+CSS3制作生日蛋糕(代码易懂)-程序员宅基地

文章浏览阅读829次。废话不多说,先给大家展示下效果图:蛋糕分为三个部分,底部蛋糕,顶层蛋糕和蜡烛部分。HTML的布局结构也是按照这三部分布局的。另外就是使用CSS定位和CSS3的rotate,内外阴影等效果调整部分DOM元素样式。比较简单,相信码农都懂的。不赘述其它有的没的了。下面给出完整的的HTML代码和CSS代码.birthday .container{width:600px;height:600px;margi...

Unity 创建ab包(AssetBundle)_u3d如何定义为ab包-程序员宅基地

文章浏览阅读1k次。* AssetBundle:简称AB包* 用处:1.ab是一个压缩包:包含模型,贴图,预制体,声音,甚至整个场景,可以在游戏运行的时候加载* 2.它自身保存着互相依赖的关系* 3.压缩包:LZMA和LZ4压缩算法,减少包的体积大小,更快的进行网络传输* 4.把一些可以下载的内容放在AB包里面,可以减少安装包的大小*** ab包:* 1.存在于硬盘上的文件,这个压缩包我们可以认为是一..._u3d如何定义为ab包

CV资源:网站,Companies,Labs及牛人-程序员宅基地

文章浏览阅读499次。学习网站:http://videolectures.net/ (you can find everything)https://www.learnopencv.com/companies:(1) Google AI:https://ai.google/about/(2) Facebook AI Research (FAIR):https://research.fb.com/...

【Linux监控平台搭建】Linux监控平台介绍、zabbix监控介绍、安装zabbix、忘记Admin密码如何做和Zabbix客户端安装_zabbix server 和客户端要求版本一直吗-程序员宅基地

文章浏览阅读281次。一、Linux监控平台介绍cacti、nagios、zabbix、smokeping、open-falcon等等 cacti、smokeping偏向于基础监控,成图非常漂亮 cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取_zabbix server 和客户端要求版本一直吗

xwiki的搭建及jetty升级_jetty容器怎么升级-程序员宅基地

文章浏览阅读663次。本文属于原创,未经过允许,请勿转载Topic1: 如何搭建xwikixwiki的搭建对于自己学习或者小型范围内的使用,建议直接安装带有flavor版本的xwiki, 因为distribution的版本在安装完后初始化在国内网的情况下, 插件下载不下来,导致页面不够友好。步骤1:下载 xwiki包:https://www.xwiki.org/xwiki/bin/view/Downl..._jetty容器怎么升级