在本教程中,您将通过示例学习 REST 基础知识和重要的关键概念。
在https://www.javaguides.net/p/restful-tutorial.html了解有关使用 Java 的 REST 的所有信息
让我们开始介绍 REST?
一、REST简介
什么是 REST?
REST 代表REpresentational State Transfer。
让我们了解一下 REST 首字母缩写词中每个单词的含义。
- 状态意味着数据
- REpresentational表示格式(例如 XML、JSON、YAML、HTML 等)
- 传输是指使用 HTTP 协议在消费者和提供者之间传输数据
代表性状态转移
- REST 最初由 Roy Fielding 创造,他也是 HTTP 协议的发明者。
- REST API 是一种中间应用程序编程接口,它使两个应用程序能够通过 HTTP 相互通信,就像服务器与浏览器通信的方式一样。
- REST 架构风格在世界范围内迅速变得非常流行,用于设计和构建可通信的应用程序。
- 随着移动设备的急剧增加,对 REST API 的需求也随之增加。构建 REST API 并让 Web 和移动客户端使用 API 而不是开发单独的应用程序变得合乎逻辑。
2. REST 架构
下图显示了典型的 REST 架构:
让我们通过查看上述架构来了解一些 Web 服务术语:
请求和响应:请求是 Web 服务的输入,响应是 Web 服务的输出。
消息交换格式:请求和响应的格式。有两种流行的消息交换格式:XML 和 JSON。
服务提供者或服务器: 服务提供者是托管 Web 服务的提供者。
服务消费者或客户:服务消费者是使用 Web 服务的人。
消费者意味着客户端应用程序负责准备和发送http请求消息
业务组件(由服务提供商开发)负责准备和发送 HTTP 响应消息
3. REST 架构约束
具有以下约束的 API 称为 RESTful API:
客户端-服务器架构:客户端是前端,服务器是服务的后端。需要注意的是,这两个实体是相互独立的。
无状态:在处理请求传输过程中,不应在服务器上存储任何数据。会话的状态应该保存在客户端。
可缓存:客户端应该能够将响应存储在缓存中。这大大提高了 API 的性能。
统一接口:该约束表示一个通用接口,以统一的方式管理客户端和服务器之间的所有交互,从而简化和解耦架构。
分层系统:服务器可以有多个层来实现。这种分层架构通过启用负载平衡来帮助提高可扩展性。
按需代码:此约束是可选的。此约束表明客户端应用程序的功能可以在运行时通过允许从服务器下载代码并执行代码来扩展。
在https://www.javaguides.net/2018/06/rest-architectural-constraints.html阅读有关约束的更多信息
4. REST 关键概念
资源
基于 REST 的系统的基本概念是资源。资源是您想通过您的应用程序向外界公开的任何东西。
示例 1:员工管理系统资源:
- 员工
- 部
- 项目
- 任务
- 地址
示例 2:学生管理系统的资源:
- 学生
- 老师
- 学校
- 班级
- 主题
URI - 统一资源标识符
资源可以通过统一资源标识符 (URI) 来标识。对于基于 Web 的系统,HTTP 是与外部系统通信最常用的协议。您可以使用 URI 标识唯一资源。
考虑一下,我们正在开发一个简单的博客应用程序,您可以为博客帖子资源定义 URI:
GET ——http://localhost:8080/api/posts/:返回所有帖子的列表
GET— http://localhost:8080/api/posts/2:返回一个 ID 为 2 的帖子
POST—— http://localhost:8080/api/posts/:创建一个新的 Post 资源
PUT—— http://localhost:8080/api/posts/2:更新一个 ID 为 2 的 POST 资源
DELETE—— http://localhost:8080/api/posts/2:删除一个ID为2的POST资源
子资源
在 REST 中,关系通常由子资源建模。对子资源使用以下模式。
GET /{resource}/{resource-id}/{sub-resource}
GET /{resource}/{resource-id}/{sub-resource}/{sub-resource-id}
POST /{resource}/{resource-id}/{sub-resource}
例子:
获取 /{post}/{post-id}/{comments}
获取 /{post}/{post-id}/{comments}/{comment-id}
发布 /{post}/{post-id}/{comments}
使用子资源子对象不能没有其父对象而存在。
HTTP 方法
常见的 HTTP 动词:
• GET - 获取集合或单个资源
• POST - 创建新资源
• PUT - 更新现有资源
• DELETE——删除集合或单个资源
在REST API上阅读有关 HTTP 方法的更多信息 - HTTP 方法
HTTP 状态码
该类中一些常用的状态码如下:
- 200 OK:此代码表示请求成功,并酌情将响应内容返回给客户端。
- 201 Created:此代码表示请求成功,创建了新资源。
- 400 Bad Request:此代码表示由于请求中的语法格式错误,服务器无法处理请求。客户端可以在更正请求后重试。
- 401 Unauthorized:此代码表示需要对资源进行身份验证。客户端可以通过适当的身份验证重试。
- 403 Forbidden:此代码表示服务器拒绝响应请求,即使请求有效。如果请求不是 HEAD 方法,原因将在正文内容中列出。
- 404 Not Found:此代码表示在请求中指定的位置未找到请求的资源。
- 500 Internal Server Error:此代码表示一般错误消息,它表示服务器上发生了意外错误并且无法满足请求。
5. 使用 Java 构建 REST API
使用 REST Jersey 框架构建 REST API:
- Jersey Rest Hello World 示例
- Jersey JAX-RS Restful CRUD Web 服务示例 // 流行
- Jersey Rest 开发人员指南
使用 JAX-RS RESTEasy 框架构建 REST API:
- RESTEasy Hello World 示例教程 // 流行
- RESTEasy JAX-RS 获取、发布、放置和删除教程 // 流行
- 用于 GET、POST、PUT 和 DELETE RESTFul API 的 RESTEasy 客户端
使用 Spring Boot 构建 REST API:
- Spring Boot、MySQL、JPA、Hibernate Restful CRUD API 教程 // 流行
- Spring Boot 2 JPA MySQL CRUD 示例
- Spring Boot 2 Hello World 应用程序
- Spring Boot 2 CRUD REST API 验证示例 // 流行
- Spring Data JPA 审计与 Spring Boot 2 和 MySQL 示例
- REST API 的 Spring Boot 2 异常处理 // 流行
- Spring Boot 2 日志记录 SLF4j Logback 和 LOG4j2 示例
- Spring Boot 2 + Jersey REST + JPA + Hibernate 5 CRUD REST API 示例
- Spring Boot 2 RESTful API 文档和 Swagger 2 教程 // 流行
- Spring Boot 2 - 文件上传和下载 Rest API 教程 // 流行
相关文章
- REST 概述
- REST API - HTTP 方法
- REST API - HTTP 状态码
- REST 的优点
- REST API - REST 架构约束
- REST API - REST 架构属性
- REST API - REST 架构元素
- SOAP 与 REST Web 服务之间的区别
- 如何识别 REST 资源
- 如何设计 REST 资源的 URL
- 如何将 HTTP 方法分配给 REST 资源
- 如何对 JSON 表示格式建模
- 返回什么 HTTP 状态码
- Restful API 设计最佳实践
- Jersey Rest Hello World 示例
- Jersey JAX-RS Restful CRUD Web 服务示例
- Jersey Rest 开发人员指南
- RESTEasy Hello World 示例教程
- RESTEasy JAX-RS 获取、发布、放置和删除教程
- 用于 GET、POST、PUT 和 DELETE RESTFul API 的 RESTEasy 客户端