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

微信公众号: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周刊》
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值