Restful :同一资源的多个案例(相同的 api 终点?)
Restful : multiple cases for a same ressource (same api end point ?)
例如,我有两种创建用户的场景:
- 管理员创建,无密码。用户必须在激活页面上选择它。
- 用户自己创建,有密码。激活页面不会显示密码输入,因为密码已经存在。
问题是它是同一个资源,一个用户。但是根据调用 api 的人(地点),预期的行为会有所不同。
在一种情况下,DTO 应该包含用户发布的密码,在另一种情况下,它不应该。
我该怎么办?
- 两个 api 端点有两个不同的 DTO(有和没有密码)?但是我们不尊重创建给定资源的一个终点的约定
- 相同的终点,但收到的 DTO 将包含判别式以了解我们是否要处理密码?如果不是,密码字段必须为空?
- 还有别的吗?
我不知道该怎么做才对。
谢谢
针对这种情况的最佳策略是在请求的 header 中传递一个属性。有了这些信息,您可以创建 2 个端点,使用该属性来定向请求。
例如:
@PreAuthorize("hasRole('ROLE_USER')")
@PostMapping(headers = "X-YOUR-ORIGIN=user")
public ResponseEntity createUserByUser(){
...
}
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PostMapping(headers = "X-YOUR-ORIGIN=admin")
public ResponseEntity createUserByAdmin(){
...
}
我认为最好的方法是用一个可选参数做一个终点。类似于:
@PostMapping
public ResponseEntity createUser(@RequestParam(name = "userType") String userType){
//If it's admin, make sure the pwd is set in the dto. Else, it can be null
}
例如,我有两种创建用户的场景:
- 管理员创建,无密码。用户必须在激活页面上选择它。
- 用户自己创建,有密码。激活页面不会显示密码输入,因为密码已经存在。
问题是它是同一个资源,一个用户。但是根据调用 api 的人(地点),预期的行为会有所不同。
在一种情况下,DTO 应该包含用户发布的密码,在另一种情况下,它不应该。
我该怎么办?
- 两个 api 端点有两个不同的 DTO(有和没有密码)?但是我们不尊重创建给定资源的一个终点的约定
- 相同的终点,但收到的 DTO 将包含判别式以了解我们是否要处理密码?如果不是,密码字段必须为空?
- 还有别的吗?
我不知道该怎么做才对。
谢谢
针对这种情况的最佳策略是在请求的 header 中传递一个属性。有了这些信息,您可以创建 2 个端点,使用该属性来定向请求。
例如:
@PreAuthorize("hasRole('ROLE_USER')")
@PostMapping(headers = "X-YOUR-ORIGIN=user")
public ResponseEntity createUserByUser(){
...
}
@PreAuthorize("hasRole('ROLE_ADMIN')")
@PostMapping(headers = "X-YOUR-ORIGIN=admin")
public ResponseEntity createUserByAdmin(){
...
}
我认为最好的方法是用一个可选参数做一个终点。类似于:
@PostMapping
public ResponseEntity createUser(@RequestParam(name = "userType") String userType){
//If it's admin, make sure the pwd is set in the dto. Else, it can be null
}