Я разрабатываю веб-службу RESTful и пытаюсь правильно использовать гипермедиа для установления отношений между ресурсами. Для некоторых ресурсов клиент должен иметь возможность назначить связь с другим ресурсом, однако мне кажется, что требуется, чтобы клиент генерировал гиперссылку и POST/PUT/PATCH/что бы эта гиперссылка в ресурс имела некоторые недостатки (большая сложность для клиента, проблемы с безопасностью и балансировкой нагрузки и т. д.). Я думаю, что если клиент отправит простой идентификатор и будет генерировать URL-адрес сервера, будет лучше.RESTful обновления гиперссылок ресурсов
Вот некоторые полностью надуманные ресурсы для API для проката пианино, чтобы продемонстрировать мое мышление.
GET http://company.com:9999/customers/42
{
"id" : 42,
"name" : "George P. Burdell",
"phone" : "555-555-5555",
"piano" : { "href" : "http://company.com:9999/pianos/101"}
}
GET http://company.com:9999/pianos/101
{
"id" : 101,
"make" : "Steinway",
"model" : "Model D"
}
Предположим, что клиент хочет арендовать другое фортепиано.
Клиент посылает частичное обновление, такие как:
PATCH http://company.com:9999/customers/42
{ "piano" : 202}
Сервер будет генерировать правильный URL для нового фортепиано ресурса и обновлять соответственно:
GET http://company.com:9999/customers/42
{
"id" : ...,
"name" : ...,
"phone" : ...,
"piano" : { "href" : "http://company.com:9999/pianos/202"}
}
Edit: Как Я вижу, клиенты, непосредственно обновляющие гиперссылки, могут быть проблематичными. Является ли это ОТЛИЧНО хорошим решением, или есть лучший? Это даже не проблема? Кроме того, реальные примеры клиентов, обновляющих гиперссылки ресурсов, были бы замечательными - я их не нашел.
Мне нравится идея, она чистая и элегантная и работает до тех пор, как все лица находится в пределах тот же веб-сервис REST ... как и все API (не только RESTful), надлежащая документация является обязательной ... о чем я не говорю: что именно ваш вопрос/цель? – Yahia
Спасибо, хорошая точка. Клиенты, непосредственно обновляющие гиперссылки, кажутся проблематичными, и я ищу чистое решение или кто-то, кто объяснит мне, почему это действительно не проблема. Когда я начал вводить вопрос, решение выше пришло ко мне, я решил бросить его для комментариев. – HolySamosa