使用SpringMVC创建REST API系列一:了解REST

  • Post author:
  • Post category:其他


微信公众号: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周刊》

这里写图片描述



版权声明:本文为ZJDWHD原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。