Правильный RESTful ответ на POST и PUT на вложенных ресурсах - PullRequest
8 голосов
/ 10 декабря 2010

Я создаю успокаивающий API и пытаюсь сделать это правильно с первого раза.

Я определил некоторые вложенные ресурсы (комментарии в сообщении в блоге), и этот выбор отражает тот факт, что комментарии вложены в документ публикации в блоге в монго.

Мне не интереснов обслуживании отдельных комментариев вне контекста, поэтому я отложил реализацию GET для вложенных ресурсов.Однако имеет смысл реализовать POSTing для коллекции комментариев и PUTting для комментария uri.

Конкретные вопросы:

1) Имеет ли смысл отвечать на POST с 201 изаголовок Location установлен для родительского ресурса?Если нет, то как мне сообщить родительское местоположение, чтобы сообщить выбор навигации на клиенте?

2) Аналогичный вопрос для PUT, как мне лучше всего сообщить клиенту, что он должен обратиться к родительскому ресурсу, чтобы найти егоОбновить?(желательно, чтобы клиент не делал предположений о моей схеме URI).Является ли заголовок Location разумным на 200?

1 Ответ

12 голосов
/ 10 декабря 2010

Хотя я никогда не делал это сам, я слышал о людях, использующих заголовок Content-Location для этой цели.Content-Location используется для идентификации местоположения ресурса, который представлен возвращенным объектом.

В случае ваших PUT и POST вы, возможно, не захотите возвращать весь пост в блоге, поэтому я не уверен, насколько правильно возвращать заголовок Content-Location, даже если вы не возвращаетепредставление в ответе.

Сказав это, я не могу думать о каких-либо негативных последствиях, поэтому я предлагаю следующее:

PUT /Blog/343/Comment/23
=>
200 OK
Content-Location: /Blog/343


POST /Blog/343/Comments
=>
201 Created
Location: /Blog/343/Comment/24
Content-Location:  /Blog/343
...