Я разрабатываю 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"}
]
}
Этот проект явно и явно просит потребителя только обновить "идентификаторы" "Лица", но я обеспокоен тем, что граф объектов для PUT/PATCH выглядит иначе, чем GET, что затрудняет изучение API и запомни. Таким образом, еще один вариант - запросить PUT/PATCH следующим образом:
{
"name":"Bob",
"country":{"id":100},
"likes":[
{"id":3},
{"id":10},
{"id":22}
]
}
Это приведет к такому же изменению, что и предыдущее обновление, и не изменит график объекта. Однако пользователь API не дает понять, что могут обновляться только "идентификаторы".
В этом случае рекомендуется использовать этот подход?