Правильная реализация PUT и идентификаторы объектов в MongoDB

Я хотел бы использовать идентификаторы ObjectID MongoDB для идентификации ресурсов в вызовах RESTful. Однако мне трудно понять, как правильно структурировать вызовы PUT.

Насколько я понимаю, правильный путь вызова PUT должен включать идентификатор изменяемого ресурса. Если ресурс с таким идентификатором существует, он модифицируется; если он не существует, он создается. В последнем случае у меня возникли проблемы: клиент, выполняющий запрос PUT, не знает идентификатор, который сгенерирует MongoDB, и поэтому не может использовать идентификатор как часть запроса.

Я предполагаю, что это довольно распространенный сценарий при использовании автоматически сгенерированных ключей в качестве идентификаторов ресурсов, но я не смог найти объяснения, как правильно с этим бороться. Я могу отказаться от использования ObjectID и использовать какое-то другое значение в документе, но это не работает для некоторых видов коллекций. Как это делают другие?


person Jorge Aranda    schedule 10.05.2013    source источник


Ответы (2)


В RFC для HTTP/1.1 указано, что сервер может создайте новый ресурс, если URI определен для использования таким образом.

Поэтому, если вы создаете новые ресурсы, например. Отправляя POST в URI коллекций, вы можете вернуть ответ об ошибке для PUT с неизвестными идентификаторами.

person Thomas Fenzl    schedule 10.05.2013
comment
Оба ответа до сих пор по существу одинаковы, но я отмечаю этот как правильный из-за ссылки на RFC. Спасибо! - person Jorge Aranda; 11.05.2013

«если ресурс не существует, он создается» - ИМХО не обязательно. Это приятно, когда ресурс идентифицируется по имени, а не по идентификатору, как у amazon S3. Так что в вашем случае PUT предназначен только для модификации. Для создания необходимо использовать POST.

person Emii Khaos    schedule 10.05.2013