ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

【Spring】RESTful设计风格

【Spring】RESTful设计风格 前言–REST(Representational State Transfer),即“表现层状态转移”,它定义了互联网软件服务的架构原则。如果一个架构的符合 REST 原则就被称之为 RESTful 架构这是目前最流行的互联网软件服务架构设计风格之一。 REST 并不是一种标准而更像是一种架构理念和设计原则目的是为了让 Web API更加简洁、易于理解和使用在开发过程中后端时常需要向客户端提供API接口进行使用在设计API接口时我们就需要尽可能让客户端能够快速理解API含义。如果在设计时遵守一定的规范就能大大减少前后端沟通成本提高开发效率了。一、RESTful的特点------------RESTful主要有以下几个特点 1、同一资源使用同一个URI 2、规范统一接口☆ 3、同一资源有多样表现形式json/html 4、客户端与服务端的请求交互是无状态的 5、可缓存允许客户端缓存响应的内容### 无状态http请求本身是无状态的它是基于 client-server架构的。每个请求从客户端到服务器必须包含所有必要的信息以便服务器能够理解请求并独立地处理它。这意味着服务器不应该存储任何会话信息无法从一次请求中获取之前请求的任何信息。### 规范统一接口让我们先来举个简单的例子。比如传统开发要实现一个删除功能其路径可能是下面这样 GET http://localhost:8080/deleteid20而采用RESTful设计风格的路径则是这样的 http://localhost:8080/users/20怎么样看着是不是清爽很多。传统方式针对同一资源进行增删查改就可能需要四个不同的接口维护起来并不方便。而RESTful主要特点就是通过资源进行分组同一组别的系统组件之间的交互通过统一的接口进行。比如针对用户的操作都由 users 这一URI统一资源标识符进行标识获取、创建、更新、删除都通过统一的路径进行访问。那么服务端又该如何对不同操作进行区分呢通过规定使用标准的HTTP方法来执行操作常见的方法有*GET获取资源。*POST创建新资源。*PUT更新现有资源。*DELETE删除资源。*PATCH对资源进行部分修改。也就是说使用RESTful规范后针对统一资源操作的API就只剩一个了。要执行增删查改的操作只需要使用不同的请求类型HTTP Method就行了。并且服务端返回的数据也可以是完全一致的前端可以通过不同的HTTP状态码来判断请求是否成功。二、Spring中实现RESTful API----------------------Spring Boot 提供了对RESTful API的支持。主要通过与REST操作方式对应的注解来实现 * GetMapping处理GET请求获取资源 * PostMapping处理POST请求新增资源 * PutMapping处理PUT请求更新资源 * DeleteMapping处理DELETE请求删除资源 * PatchMapping处理PATCH请求用于更新部分资源在RESTful规范中每个网址对应一个资源因此在对URI命名时尽量采用名词并且一般都与数据库的表明相对应。比如用户管理模块的API就可以这么设定对应的Spring Boot代码就是 RestController RequestMapping(“/user”) public class UserController { //根据id获取用户信息 GetMapping(“/{id}”) public Result get(RequestParam Integer id){ //业务逻辑 return Result.success(); } //添加用户 PostMapping public Result add(RequestBody User user){ //业务逻辑 return Result.success(); } //修改用户信息 PutMapping public Result update(RequestBody User user){ //业务逻辑 return Result.success(); } //修改用户的某个参数如密码、头像等 PatchMapping(“/password”) public Result updateAvatar(RequestParam String password){ //业务逻辑 return Result.success(); } //根据id删除用户 DeleteMapping(“/{id}”) public Result delete(RequestParam Integer id){ //业务逻辑 return Result.success(); } } * * * 那么本篇文章就到此为止了如果觉得这篇文章对你有帮助的话可以点一下关注和点赞来支持作者哦。如果有什么讲的不对的地方欢迎在评论区指出希望能够和你们一起进步
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进