Подтвердить что ты не робот

REST API Design для обновления диаграммы объектов

Я разрабатываю 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 не дает понять, что могут обновляться только "идентификаторы".

В этом случае рекомендуется использовать этот подход?

4b9b3361

Ответ 1

По-моему, вы должны оставаться с той же структурой для запросов GET и PUT. Зачем? Поскольку довольно распространено отображение данных JSON/XML в объекты и большинство (если не всех) программ, которые действительно работают с отображением, лучше всего, если схема JSON всегда одна и та же.

Таким образом, ваш веб-сервис должен принять следующий код JSON:

{
    "name":"Joe",
    "country":{"id":200,"name":"United States of America"},
    "likes":[
        {"id":5,"name":"Fruit"}
    ]
}

Однако он не должен учитывать имя страны и может фокусироваться только на идентификаторе страны.