使用 Spring MVC 创建 REST API

REST :以信息为中心的表述性状态转移(Representational State Transfer)。SOAP 一般会关注行为和处理,而 REST 关注的是要处理的数据。近年来,REST 已经成为替换传统 SOAP 的流行方案。

一、了解 REST

REST 与 RPC 几乎没有任何关系。RPC 是面向服务,并关注行为和动作,而 REST 是面向资源的,强调描述应用程序的事物和人名词。
将 REST 首字母缩写拆分来理解 REST:

  • 表述性(Representational):REST 资源实际上可以用各种形式来表述,包括 XML 、JSON、甚至 HTML——最适合资源使用者的任意形式;
  • 状态(State):当使用 REST 的时候,更关注资源的状态而不是对资源采取的行为;
  • 转移(Transfer):REST 设计到转移资源数据,它一某种表述性形式从一个应用转移到另一个应用。

更简洁的讲,REST 就是将资源的状态以最适合客户端或服务端的形式从服务端转移到到客户端(或反过来)。
在 REST 中,资源通过 URL 进行识别和定位。至于 RESTful URL 的结构并没有严格的规则,但是 URL 应该能够识别资源,而不是简单的发一条命令到服务器上。关注的核心是事物,而不是行为。
REST 中会有行为,他们是通过 HTTP 方法来定义的。具体来讲,就是 GETPOSTPUTDELETEPATCH以及其他的HTTP 方法构成了 REST 中的动作。这些 HTTP 方法通常会匹配为如下的CRUD 动作:

  • Create : POST
  • Read :GET
  • Update : PUT 或 PATCH
  • Delte : DELETE
1、Spring 是如何支持 REST 的

Spring 3.0 开始支持 REST ,4.0 支持以下方式来创建 REST 资源:

  • 控制器可以处理所有的 HTTP 方法,包含四个主要的 REST 方法:GET、PUT、DELETE、以及 POST。spring 3.2 以上还支持 PATCH;
  • 借助 @PathVariable 注解,控制器能处理参数化的 URL (将变量输入作为 URL 的一部分);
  • 借助 Spring 的视图和视图解析器,资源能够以多种方式进行表述,包括将模型数据渲染为 XML、JSON、Atom 以及 RSS 的 View 实现;
  • 可以使用 ContentNegotiatingViewResolver 来选择最适合客户端的表述;
  • 借助@ResponseBody 注解和各种 HttpMethordConverter 实现,能够替换基于视图的渲染方式;
  • 类似的,@ResponseBody 注解和 HttpMethordConverter 实现可以将传入的 HTTP 数据转化为传入控制器处理方法的 Java 对象;
  • 借助 RestTemplate ,Spring 应用能够方便的使用 REST 资源。

二、创建第一个 REST 端点

Spring 提供了两种方法将资源的 Java 表述形式转为发送给客户端的表述形式:

  • 内容协商:选择一个视图,它能够将模型渲染为呈现给客户端的表述形式;
  • 消息转换器:通过一个消息转换器将控制器所返回的对象转换为呈现给客户端的表述形式。
1、协商资源表述

Spring 的 ContentNegotiatingViewResolver 是一个特殊的视图解析器,它考虑到了客户端所需要的内容类型。a按照其最简单的形式,可以如下配置:

    @Bean
    public ViewResolver cnViewResolver(){
   
        return  new ContentNegotiatingViewResolver();
    }

理解 ContentNegotiatingViewResolver 是如何工作的,这涉及内容协商的两个步骤:

  1. 确定请求的媒体类型;
  2. 找到适合请求媒体类型的最佳视图。

确定请求的媒体类型
ContentNegotiatingViewResolver会考虑到 Accept 头部信息并使用它所请求的媒体类型,

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值