Я разрабатываю REST API и ищу рекомендуемые передовые методы обновления графов объектов. Мой вопрос лучше всего пояснить на примере, поэтому предположим, что у меня есть ресурс GET следующим образом:
URI: /people/123
Этот URI возвращает такой граф объекта:
{
"name":"Johnny",
"country":{"id":100,"name":"Canada"},
"likes":[
{"id":5,"name":"Fruit"},
{"id":100,"name":"Sports"}
]
}
При разрешении потребителя API чтобы обновить этот ресурс, как вы ожидаете, что объект будет обновлен через PUT или PATCH? Обновить свойство «имя» довольно просто, но я не уверен в «стране» или «лайках», поскольку потребитель может только изменить отношение к другим объектам, а не создавать новые.
Вот один из способов запросить обновление:
{
"name":"Bob",
"countryId":200
"likeIds":[3,10,22]
}
Это обновление изменит ресурс на следующее:
{
"name":"Bob",
"country":{"id":200,"name":"United States of America"},
"likes":[
{"id":3,"name":"Cars"},
{"id":10,"name":"Planes"},
{"id":22,"name":"Real Estate"}
]
}
Этот дизайн явно и четко просит потребителя обновить только «ID» «Персона», но Я обеспокоен тем, что граф объектов для PUT/PATCH выглядит иначе, чем GET, что затрудняет изучение и запоминание API. Таким образом, другой вариант — запросить PUT/PATCH следующим образом:
{
"name":"Bob",
"country":{"id":100},
"likes":[
{"id":3},
{"id":10},
{"id":22}
]
}
Это приведет к тому же изменению, что и предыдущее обновление, и не изменит граф объекта. Однако потребителю API не ясно, что можно обновлять только «идентификаторы».
Какой подход рекомендуется использовать в этом сценарии?