У меня есть служба REST для управления пользователями.
HTTP GET ("/ users") - получить всех пользователей
HTTP GET ("/ users / {id}") - получить данные для конкретного пользователя
При изменении чего-либо о пользователе я не уверен, как структурировать пути для PUT / PATCH.
Вариант 1:
HTTP PUT ("/ users") и передача пользовательских данных (идентификатор, имя, фамилия) в теле запроса
HTTP PATCH ("/ users") и передача идентификатора пользователя и PASSWORD в теле запроса
Вариант 2:
HTTP PUT ("/ users / {id}") и передача пользовательских данных (id, имя, фамилия) в теле запроса
HTTP PATCH ("/ users / {id}") и передача ИД пользователя и ПАРОЛЯ в теле запроса
Вариант 3:
HTTP PUT ("/ users / {id}") и передача пользовательских данных (id, имя, фамилия) в теле запроса
HTTP PATCH ("/ users / {id} / password") и передача ID пользователя и ПАРОЛЯ в теле запроса
@ RequestMapping (value = "/ users")
открытый интерфейс UserController {
@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}» для изменения сведений о пользователе имеет смысл, потому что я меняю для конкретного пользователя, но, поскольку я могу прочитать идентификатор из тела запроса, переменная пути здесь избыточна.
Это та же путаница при смене пароля. Поскольку у меня есть только одна конечная точка Patch в разделе "/ users", мне все равно следует использовать "/ users / {id} / password" или, возможно, мне следует удалить часть "/ password"?