深入理解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),即:“我要对数据做什么?”和“我要对哪些数据做这些?”
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。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。