宁静:同一资源的多个案例(相同的api端点?)

时间:2019-03-17 15:05:17

标签: angular spring rest dto

例如,我有两种创建用户的方案:

  • 由管理员创建,没有密码。用户必须在激活页面上选择它。
  • 由用户自己创建,带有密码。激活页面不会显示密码输入,因为密码已经存在。

问题在于,这是同一资源,一个用户。但是,取决于调用该api的人员(地点),预期的行为是不同的。

在一种情况下,DTO应该包含用户发布的密码,在另一种情况下,则不应包含用户发布的密码。

我该怎么办?

  • 两个api端点具有两个不同的DTO(带有和不带有密码)?但是我们不遵守约定创建一个给定资源的终点的惯例
  • 相同的端点,但是收到的DTO将包含判别式,以便知道我们是否要处理密码?如果不是,密码字段必须为空?
  • 还有什么?

我不确定该怎么做。

谢谢

2 个答案:

答案 0 :(得分:1)

这种情况的最佳策略是在请求的标头中传递一个属性。有了这些信息,您就可以使用属性创建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(){
   ...
}

答案 1 :(得分:0)

我认为最好的方法是使用一个可选参数设定一个终点。像这样:

@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 }