Restful: несколько случаев для одного и того же ресурса (одна и та же конечная точка API?) - PullRequest
0 голосов
/ 17 марта 2019

Например, у меня есть два сценария создания пользователя:

  • Создано администратором без пароля.Пользователь должен будет выбрать его на странице активации.
  • Создано самим пользователем, с паролем.На странице активации не будут отображаться вводимые пароли, потому что пароль уже существует.

Дело в том, что это тот же ресурс, пользователь.Но в зависимости от того, кому (где) вызывается API, ожидаемое поведение может быть другим.

В одном случае DTO должен содержать пароль, отправленный пользователем, а в другом - нет.

Что мне делать?

  • Конечная точка двух API с двумя разными DTO (с паролем и без него)?Но мы не соблюдаем соглашение, в котором говорится, что одна конечная точка для создания данного ресурса
  • Та же самая конечная точка, но полученный DTO будет содержать дискриминант, чтобы знать, хотим ли мы обрабатывать пароль или нет?Если нет, поле пароля должно быть пустым?
  • Что-то еще?

Я не уверен, как это сделать правильно.

Спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2019

Лучшей стратегией для этой ситуации является передача одного атрибута в заголовке запроса.С помощью этой информации вы можете создать 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(){
   ...
}
0 голосов
/ 18 марта 2019

Я думаю, что лучшим способом было бы сделать одну конечную точку с необязательным параметром.Что-то вроде:

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

...