RESTful создание синглтон ресурса - PullRequest
0 голосов
/ 01 июня 2018

В большинстве примеров API RESTful предполагается, что вы имеете дело с коллекциями вещей, например

POST /books/ - создайте книгу

GET /books/ - получите список книг

GET /books/1/ - получить конкретную книгу

Однако, есть некоторые обстоятельства, когда вы можете захотеть создать одноэлементный ресурс.Например, новый пользователь может захотеть создать профиль, относящийся к себе, аутентифицированному пользователю.

POST /profile

PUT /profile

Существует ли какое-либо соглашение о том, каксоздать такие синглтон ресурсы?то есть используя POST против PUT.С точки зрения того, использовать ли POST или PUT, имеет ли значение, если ресурс может быть изменен после создания?Требует ли требование идемпотентности PUT, что должна быть возможность обновления ресурса после его первого создания?

1 Ответ

0 голосов
/ 07 июля 2019

Помните, что в REST «одноэлементный» ресурс не означает, что в системе есть только один экземпляр ресурса, он просто означает получение одного объекта, а не списка объектов.

Ресурс может быть одноэлементным или коллекционным.Например, «клиенты» - это ресурс сбора, а «клиент» - это одноэлементный ресурс (в банковской сфере).Мы можем идентифицировать ресурс сбора «клиенты», используя URN «/ клиенты».Мы можем идентифицировать один «клиентский» ресурс, используя URN «/customers/ndomcustomerIdcaststially.

(Thoughtworks, Rest API Design: Моделирование ресурсов )

Стандартная практика для клиента - POST - /profiles /, получение URL вновь созданного профиля (вероятно, /profiles/<id>) в заголовке Location: ответа.

В качестве альтернативы клиент может PUT до /profiles/<some client-specified-ID>, получив 403 Forbidden, если идентификатор уже занят другим пользователем.(Возможно, 405 Method Not Allowed, если профиль другого пользователя будет GET -able.)

Что касается чтения, то не принято моделировать понятие «мой профиль»,с неизвестным идентификатором, в RESTful API.Если вам это действительно нужно, вероятно, RESTful, что нужно сделать, это объявить (идентифицированный) URL в ссылке из корневого ресурса с пользовательским отношением ссылки.

...