如何编写 Restful 风格的接口
AI-摘要
切换
dreamChaser AI GPT
AI初始化中...
介绍自己
生成本文简介
推荐相关文章
前往主页
前往tianli博客
本文最后更新于 2024-03-03,文章内容可能已经过时。
一、Restful风格接口
Restful 风格的API是一种软件架构风格,设计风格而不是标准,只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
在Restful风格中,用同一个请求接口(URL)而用不同的请求方式,这就避免了编写多个不同的URL,通过请求的方式也更容易区分出每个方法的功能。
客户端使用GET、POST、PUT、DELETE 4个表示操作方式的动词对服务端资源进行操作:
- GET用来获取资源,
- POST用来新建资源(也可以用于更新资源),
- PUT用来更新资源,
- DELETE用来删除资源
二、RESTful 风格接口注意事项:
2.1、RESTful接口URL命名原则
- 命名原则1:HTTP方法后跟的URL必须是名词且统一成名词复数形式
- 命名原则2:URL中不采用大小写混合的驼峰命名,尽量采用全小写单词,如果需要连接多个单词,则采用〞-”连接
- 示例:/users、 /users-fans;反例:/getUsers、 /getUsersFans
2.2、RESTful接口URL分级原则
- 分级原则1:一级用来定位资源分类,如/users即表示需要定位到用户相关资源
- 分级原则2:二级仍用来定位具体某个资源,如/users/20即表示id为20的用户,再如/users/20/fans/1即表示id为20的用户的id为1的粉丝
- 一条小建议:原则是为了让我们的开发更加规范,但是不能成为束缚我们开发的枷锁!
2.3、复杂 get 请求接口命名示例:
三、接口的编写
3.1、get 方式的请求参数详解:
参数拼接与路径中
- 后端接口
@GetMapping("/hello/{name}")
public String hello(@PathVariable("name") String name) {
return "获取到的name是:" + name;
}
- 请求地址
localhost:8080/hello/tom
以键值对形式拼接于路径中
- 后端接口
@GetMapping("/hello")
public String hello(String name) {
return "获取到的name是:" + name;
}
- 请求路径
localhost:8080/hello?name=tom
注意:多个参数之间使用 & 连接
自定义参数名称:
用于拼接在路径后边的参数名称和接收名称不一致的时候使用
- 后端接口
@GetMapping("/hello")
public String hello(@RequestParam("namename") String name) {
return "获取到的name是:" + name;
}
- 请求路径
localhost:8080/hello?namename=tom
可缺省参数
- 后端接口
@GetMapping("/hello")
public String hello(@RequestParam(required = false) String name) {
return "获取到的name是:" + name;
}
默认值参数
- 后端接口
@GetMapping("/hello")
public String hello(@RequestParam(defaultValue = "unnamed") String name) {
return "获取到的name是:" + name;
}
- 请求地址
localhost:8080/hello
使用 map 接收参数
- 后端接口
@GetMapping("/hello")
public String hello(@RequestParam Map<String, Object> params) {
return "name:" + params.get("name") + ",age:" + params.get("age");
}
- 请求地址
localhost:8080/hello?name=tom&age=18
使用对象接收参数
- 后端接口
@GetMapping("/hello")
public String hello(User user) {
return "name:" + user.getName() + ",age:" + user.getAge();
}
- 请求地址
localhost:8080/hello?name=tom&age=jerry
其中,name 和 age 是实体对应的属性,必须要保证其一致性,才能接收到参数。
3.2、post 方式
//用户注册
@PostMapping("/reg")
public R register(@RequestBody User user){
return userService.insert(user);
}
put 方式
//用户更新
@PutMapping
public R<?> modify(@RequestBody User user){
return userService.update(user);
}
delete 方式
//删除用户
@DeleteMapping("/{id}")
public R<?> remove(@PathVariable Long id){
return userService.delete(id);
}
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,转载需要在文章开头或结尾注明来自于webjing的博客,
评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果