Я разрабатываю веб-сервис RESTful и пытаюсь правильно использовать гипермедиа для установления отношений между ресурсами.Для некоторых ресурсов клиент должен иметь возможность назначить связь с другим ресурсом, однако мне кажется, что требование клиента генерировать гиперссылку и POST / PUT / PATCH / независимо от того, что эта гиперссылка в ресурс имеет некоторые недостатки (более сложная)для клиента, вопросы безопасности и балансировки нагрузки и т. д.).Я думаю, что было бы лучше, если бы клиент отправлял простой идентификатор, а сервер генерировал URL.
Вот несколько полностью изобретенных ресурсов для 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"}
}
Редактировать: На мой взгляд, клиенты, непосредственно обновляющие гиперссылки, могут быть проблематичными.Это действительно хорошее решение, или есть лучшее?Это вообще не проблема?Кроме того, примеры из реальной жизни клиентов, которые каким-либо образом обновляют гиперссылки на ресурсы - я не нашел.