微信公众号:Java周刊
欢迎关注、一起学习、一起进步!
最近更新:
2018-04-03
1. REST的基础知识
当谈论REST时,有一种常见的错误就是将其视为“基于URL的Web服务”将REST作为另一种类型的远程过程调用(remote procedure call,RPC)机制,就像SOAP一样,只不过是通过简单的HTTP URL来触发,而不是使用SOAP大量的XML命名空间。
恰好相反,REST与RPC几乎没有任何关系。RPC是面向服务的,并关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词。
为了理解REST是什么,我们将它的首字母缩写拆分为不同的构成部分:
1.表述性(Representational):REST资源实际上可以用各种形式来进行表述,包括XML、JSON(JavaScript Object Notation)甚至HTML;最适合资源使用者的任意形式;
2.状态(State):当使用REST的时候,我们更关注资源的状态而不是对资源采取的行为;
3.转移(Transfer):REST涉及到转移资源数据,它以某种表述性形式从一个应用转移到另一个应用。
更简洁地讲,REST就是将资源的状态以最适合客户端的形式从服务器端转移到客户端(或者反过来)。
在REST中,资源通过URL进行识别和定位。至于RESTful URL的结构并没有严格的规则,但是URL应该能够识别资源,而不是简单的发一条命令到服务器上。再次强调,关注的核心是事物,而不是行为。
REST中会有行为,它们是通过HTTP方法来定义的。具体来讲,也就是GET、POST、PUT、DELETE、PATCH以及其他的HTTP方法构成了REST中的动作。这些HTTP方法通常会匹配为如下的CRUD动作:
1.Create:POST
2.Read:GET
3.Update:PUT或PATCH
4.Delete:DELETE
尽管通常来讲,HTTP方法会映射为CRUD动作,但这并不是严格的限制。有时候,PUT可以用来创建新资源,POST可以用来更新资源。实际上,POST请求非幂等性(non-idempotent)的特点使其成为一个非常灵活的方法,对于无法适应其他HTTP方法语义的操作,它都能够胜任。
基于对REST的这种观点,所以我们要尽量避免使用诸如REST服务、REST Web服务或类似的术语,这些术语会不恰当地强调行为。相反,我更愿意强调REST面向资源的本质,并讨论RESTful资源。
2. Spring是如何支持REST的
Spring很早就有导出REST资源的需求。从3.0版本开始,Spring针对Spring MVC的一些增强功能对REST提供了良好的支持。
当前的4.0版本中,Spring支持以下方式来创建REST资源:
1.控制器可以处理所有的HTTP方法,包含四个主要的REST方法:GET、PUT、DELETE以及POST。Spring 3.2及以上版本还支持PATCH方法;
2.借助@PathVariable注解,控制器能够处理参数化的URL(将变量输入作为URL的一部分);
3.借助Spring的视图和视图解析器,资源能够以多种方式进行表述,包括将模型数据渲染为XML、JSON、Atom以及RSS的View实现;
4.可以使用ContentNegotiatingViewResolver来选择最适合客户端的表述;
5.借助@ResponseBody注解和各种HttpMethodConverter实现,能够替换基于视图的渲染方式;
6.类似地,@RequestBody注解以及HttpMethodConverter实现可以将传入的HTTP数据转化为传入控制器处理方法的Java对象;
7.借助RestTemplate,Spring应用能够方便地使用REST资源。
参考资料:1.Spring In Action(FOURTH EDITION)
喜欢本文,欢迎关注《Java周刊》