【发布时间】:2019-11-05 00:07:54
【问题描述】:
我有一个用于管理用户的 REST 服务。
HTTP GET("/users") - 获取所有用户
HTTP GET("/users/{id}") - 获取特定用户的数据
当更改有关用户的某些内容时,我不确定如何构建 PUT/PATCH 的路径。
选项 1:
HTTP PUT ("/users") 并在请求正文中传输用户数据(id、名字、姓氏)
HTTP PATCH ("/users") 并在请求正文中传输用户的 ID 和 PASSWORD
选项 2:
HTTP PUT ("/users/{id}") 并在请求正文中传输用户数据(id、名字、姓氏)
HTTP PATCH ("/users/{id}") 并在请求正文中传输用户的 ID 和 PASSWORD
选项 3:
HTTP PUT ("/users/{id}") 并在请求正文中传输用户数据(id、名字、姓氏)
HTTP PATCH ("/users/{id}/password") 并在请求正文中传输用户的 ID 和 PASSWORD
@RequestMapping(value = "/users") 公共接口用户控制器 {
@GetMapping(value = "/{id}", produces = "application/json")
User getUser(@PathVariable long id);
@PutMapping(value = "", consumes = "application/json")
void addNewUser(@RequestBody User ser);
@PatchMapping(value = "/{id}/password", consumes = "application/json")
void changeUserPassword(@RequestBody UserPasswordChange passwordChangeModel, @PathVariable String id);
我不确定这些方法中哪种方法最好。我每次都可以从请求正文中获取所有数据,但我不确定创建的最佳路径应该是什么。使用“/users/{id}”更改有关用户的详细信息是有意义的,因为我正在为特定用户进行更改,但由于我可以从请求正文中读取 ID,因此路径变量在这里是多余的。
更改密码时也有同样的困惑。由于我在“/users”下只有一个 Patch 端点,我应该仍然使用“/users/{id}/password”还是应该删除“/password”部分?
【问题讨论】:
标签: rest post controller patch put