深入理解RESTful Web Services
RESTful的软件架构已经多火不用多说,和MVC架构一样,很多网站服务(Web Services)都遵循RESTful设计模式,那么到底什么是RESTful Web Services呢?设计一个RESTful的Web Services需要注意哪些点呢?(本文理论参考自Leonard Richardson 和 Sam Ruby的书籍《RESTful Web Services》。)
1.什么是RESTful Web Services
首先,Web Services是一个web服务,是一个web接口,其设计目的是通过web来解决如何处理资源(Resource)的问题(注:资源可以指代很多,比如一段数据,一张图片,一组用户信息),而处理资源时处理的两个核心问题是:方法信息(method information)和作用域信息(scoping information),即:“我要对数据做什么?”和“我要对哪些数据做这些?”
/data/username/xxx HTTP/1.1),而报文中其余数据只是一些细节问题。

2.几种常见的非RESTful Web Services
1)将method information和scoping information都放在报文体中
例如:某网站所有所有接口的调用地址都为https://x.com/webservice/api,区别各接口和数据不同的方法是在报文体(entity-body)中加入不同的数据
<?xml version="1.0" ?>
<method>getUserData</method>
<params>
<param>
<key>name</key>
<value>Tom</value>
</param>
</params>
</xml><?xml version="1.0" ?>
<method>deleteUserData</method>
<params>
<param>
<key>name</key>
<value>Peter</value>
</param>
</params>
</xml>2)所有接口的请求方法(HTTP method)都为“GET”,而将method information放在URL中
比如:https://x.com/webservice/api/getData/?name=tom 和 https://x.com/webservice/api/?name=peter&method=delData
3.设计RESTful Web Services一定要注意的几点
1)method information仅仅用GET,POST,HEAD,PUT,DELETE和OPTION方法就够了。
根据RFC2616标准还有TRACE和CONNECT方法,不过一般来说前面6种方法已经能满足大部分与“资源”的交互了。请不要试图发明新的方法或者将方法放在URL中,而你唯一的任务是将“资源”设计的更加合理!(感觉有点像数据库中CURD)2)你编写的RESTful Web Services应该是无状态性的(statelessness)
无状态性是指接口本身不存在记忆功能,比如调用接口A、B、C和调用接口C、B、A产生的结果不同,这显然就是一个有状态性的。你编写的Web Services应该是相互独立的。如果你在调用B时需要依赖A提供的数据,那么在调用B时你应该将数据一并传过去。
最后再啰嗦两句:RESTful只是一种风格,并不是标准,如果你的Style更好,那就没必要为了RESTful而RESTful。
深入理解RESTful Web Services的更多相关文章
- RESTful Web Services初探
RESTful Web Services初探 作者:杜刚 近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTf ...
- 【转】RESTful Web Services初探
近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...
- RESTful Web Services简单介绍
近几年,RESTful Web Services渐渐开始流行,大量用于解决异构系统间的通信问题.很多网站和应用提供的API,都是基于RESTful风格的Web Services,比较著名的包括Twit ...
- 使用 Spring 3 来创建 RESTful Web Services
来源于:https://www.ibm.com/developerworks/cn/web/wa-spring3webserv/ 在 Java™ 中,您可以使用以下几种方法来创建 RESTful We ...
- 使用 Spring 3 来创建 RESTful Web Services(转)
使用 Spring 3 来创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参 ...
- 基于Spring设计并实现RESTful Web Services(转)
基于Spring设计并实现RESTful Web Services 在本教程中,你将会使用Spring来创建一个具有生产力的RESTful网络服务. 为什么用RESTful网络服务? 从和Amazon ...
- Spring 3 来创建 RESTful Web Services
Spring 3 创建 RESTful Web Services 在 Java™ 中,您可以使用以下几种方法来创建 RESTful Web Service:使用 JSR 311(311)及其参考实现 ...
- .NET RESTful Web Services入门
很早之前看到过RESTful Web Services,并未在意,也没找相关资料进行学习.今天偶尔有一机会,就找了点资料进行研究,发现RESTful真是“简约而不简单”.下面用示例来说明: 1 项目结 ...
- Jersey the RESTful Web Services in Java
Jersey 是一个JAX-RS的实现, JAX-RS即Java API for RESTful Web Services, 支持按照表述性状态转移(REST)架构风格创建Web服务. REST 中最 ...
随机推荐
- 【NOI题解】【bzoj题解】NOI2008 bzoj1063 道路设计
@ACMLCZH学长出的毒瘤题T3.再也不是“善良”的出题人了. 题意:bzoj. 题解: 经典的树形DP题目,屡见不鲜了,然而我还是没有写出来. 这一类的题目有很多,例如这里的C题. 主要套路是把对 ...
- 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
cf的比赛越来越有难度了……至少我做起来是这样. 先看看题目吧:点我. 这次比赛是北京时间21:35开始的,算是比较良心. [A]奇数与结束 "奇数从哪里开始,又在哪里结束?梦想从何处起航, ...
- LCD时序中设计到的VSPW/VBPD/VFPD/HSPW/HBPD/HFPD总结【转】
转自:https://blog.csdn.net/u011603302/article/details/50732406 下面是我在网上摘录的一些关于LCD信号所需时钟的一些介绍, 描述方式一: 来自 ...
- C#基础学习之装箱,拆箱
装箱,拆箱这两个的大条件是有继承关系. 装箱:值类型转换为引用类型 拆箱:引用类型转换为之类 但是要注意大条件. string (引用类型) int(值类型) 这个转换因为没有继承关系,内存中没 ...
- MVVM模式的模式简介
MVVM模式简介 MVVM是Model.View.ViewModel的简写,这种模式的引入就是使用ViewModel来降低View和Model的耦合,说是降低View和Model的耦合.也可以说是是降 ...
- Fiddler是最强大最好用的Web调试工具
Fiddler是最强大最好用的Web调试工具之一,它能记录所有客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说,都有很大 ...
- 一、springboot入门
构建spring boot工程一般采用两种方式 gradle .maven maven方式 pom.xml spring-boot-starter:核心模块,包括自动配置支持.日志和YAML spri ...
- 01 Getting Started 开始
Getting Started 开始 Install the Go tools Test your installation Uninstalling Go Getting help Downlo ...
- JVM性能调优监控工具——jps、jstack、jmap、jhat、jstat、hprof使用详解
摘要: JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,还有jps.jstack.jmap.jhat.jstat.hprof等小巧的工具,本博客希望 ...
- wpf mvvm模式下的image绑定
view文件 <Image Grid.Column="2" Width="48" Height="64" Stretch=" ...