Rest 架构 101
在微服务大行其道的今天、Rest 架构在其中扮演的角色不可忽视。本文将从下面4个问题出发,逐步建立起对 Rest 架构以及 RESTful Web Service 的整体概念。
- 什么是 Rest ?
- 什么是 RESTful Web Service ?
- 什么是 JAX-RS ?
- JAX-RS 与 Spring MVC 的区别与联系?
- 总结
Rest--REpresentational State Transfer
Rest 是一种使用 HTTP 协议、基于现有 web 标准设计的应用架构。它由 Roy Fielding 于2000第一次提出。
Rest 将应用管理的内容抽象为资源、这些资源可以是文本文件、网页、图片、视频等。客户端通过 HTTP 协议定义的 GET、POST、DELETE、PUT 等标准方法获取资源。
REST 对资源的描述支持多种格式、较为常见的如 Text、JSON、XML。
HTTP 方法简介:
- GET − 查询资源
- POST − 创建资源
- DELETE − 删除资源
- PUT − 存在则更新、否则创建资源
RESTful Web Service
Web Service 简单理解就是一种契约、它由一系列协议和标准构成。目的就是定义应用或系统间应当以何种形式进行进行数据交换。这样即使应用运行的平台不同(操作系统、云平台)、编程语言不同,应用之间也可以使用 Web Service 通过计算机网络进行数据交换。
RESTful Web Service 即使用 HTTP 方法实现 REST 架构的 Web Service。
一个RESTful web service 通常会定义一个URI --唯一标识资源、资源的描述格式如 JSON 、资源支持的 HTTP 方法列表GET、POST等。
RESTful web service 举例:
URI | HTTP Method | POST BODY | Result |
---|---|---|---|
/UserService/listUsers | GET | emtpy | List of all users. |
/UserService/addUser | POST | JSON | Detail of new user. |
/UserService/getUser/:id | GET | empty | Detail of user. |
JAX-RS -- JAVA API for RESTful Web Services
JAX-RSR 是 Servlet API 的扩展、是为了支持 RESTful Web Services 而制定的接口标准及规范JAX-RSR 2.1 即 JSR-370 。
2.0版本于2013年发布、从Java SE 5 开始支持通过注解方式创建Web Service。 JAX-RSR 参考实现: Jersey-- Oracle 通过servlet实现、RESTEasy--Red hat、Apache Cxf
Spring Framework vs JAX-RS
Spring 因为比 JAX-RSR 更早出现、所以它并未实现这个标准。而 Spring MVC 可以看作 JAX-RSR 的替代方案。
Examples
** 遵循 JAX-RS 标准 API 的资源 Controller: **
@Path("/greetings")
public class JaxRsController {
@GET
@Path("/{name}")
@Produces(MediaType.TEXT_PLAIN)
public Response greeting(@PathParam("name") String name) {
String greeting = "Hello " + name;
return Response.ok(greeting).build();
}
}
复制代码
** 遵循 Spring MVC API 的等价实现: **
@RestController
@RequestMapping("/greetings")
public class SpringRestController {
@RequestMapping(method = RequestMethod.GET, value = "/{name}", produces = MediaType.TEXT_PLAIN_VALUE)
public ResponseEntity<?> greeting(@PathVariable String name) {
String greeting = "Hello " + name;
return new ResponseEntity<>(greeting, HttpStatus.OK);
}
}
复制代码
总结
RESTful 是一种应用架构、而 RESTful Web Service 则为基于 HTTP 协议标准方法的 RESTful 架构实现。
JAX-RSR 是针对 JAVA 语言而制定的 API 标准、它支持 RESTful Web Service 架构及规范。
Java 生态中各厂商提供了符合 JAX-RSR 标准和自家Servlet容器结合的不同实现如 Jersey--Oracle、RESTEasy--Red Hat 、 Apache Cxf--Apache Org 等。
Spring 框架早于 JAX-RSR 标准的制定、它并未原生实现这个规范。而 Spring MVC 模块提供了另一种基于Spring的编程模型来实现 RESTful Web Service 架构。