2015-04-29 2 views
1

Я не могу найти образцы на пути использования патча JSON для обновления коллекции. Фактически, я хочу использовать метод PATCH в ресурсе REST коллекции для обновления связанной коллекции, не отправляя снова всю коллекцию. Интересно, может ли JSON Patch соответствовать описанию операций: в основном добавлять элементы или удалять элементы. Элементы сложны, что означает, что они не являются примитивными элементами.Как обновить коллекцию с помощью json-патча

Ниже приведены дополнительные сведения. Давайте возьмем образец ресурса contacts:

GET /contacts 
[ 
    { 
    "id": "1", 
    "lastName": "Last name 1", 
    "firstName": "First name 1" 
    }, 
    { 
    "id": "2", 
    "lastName": "Last name 2", 
    "firstName": "First name 2" 
    }, 
    { 
    "id": "3", 
    "lastName": "Last name 3", 
    "firstName": "First name 3" 
    }, 
    (...) 
] 

Вот PATCH запрос, который я хотел бы использовать, но я не уверен, что это JSON Patch совместимый:

PATCH /contacts 
[ 
    { 
    "op": "add", "value": { 
     "firstName": "my first name", 
     "lastName": "my last name" 
    } 
    }, 
    { 
    "op": "remove", "path": "id=='1'" 
    } 
] 

Моя главная проблема в том, как для идентификации элемента для удаления в соответствии с его полем id. Есть ли для этого выделенное выражение? Я подумал о чем-то вроде: id=='1'.

Последний вопрос: есть ли контент для ответа, предназначенный для JSON Patch?

Большое спасибо за помощь за помощь! Thierry

ответ

3

Вы должны иметь возможность просто использовать путь к ресурсу, который нужно удалить.

PATCH /contacts 
[ 
    { 
    "op": "add", "value": { 
     "firstName": "my first name", 
     "lastName": "my last name" 
    } 
    }, 
    { 
    "op": "remove", "path": "/contacts/1" 
    } 
] 

Глядя вокруг, кажется, есть некоторое замешательство по этому поводу, но «The„удалить standard says“операция удаляет значение в целевом местоположении» с примером:

{ "op": "remove", "path": "https://stackoverflow.com/a/b/c" } 
+0

Любые намеки о патче ответ? –

+0

В стандарте не сказано. Предполагается, что это атомная транзакция, поэтому технически информация не должна возвращаться, поскольку клиент может предположить, что все изменилось или ничего не изменилось. Обычно вы хотите, по крайней мере, включать сообщения об ошибках для каждого op, если произошли ошибки. – mahemoff

+0

Фактически, я вижу две вещи, которые могут быть возвращены в ответе ;-): идентификатор созданного элемента (в случае автогенерации pk) и ошибки проверки. У нас есть бэкэнд noSQL за API, поэтому у нас нет транзакций ... –