JSON-Patch «удалить» с пустым путем. Каков официальный стандартный результат?

Каков стандартный результат следующего исправления JSON «удалить» с пустым путем ""?

[{ "op": "remove", "path": ""}]

Должен ли он очищать весь объект, что эквивалентно назначению {}? На http://jsonpatch.com/ сказано: Чтобы указать на корень документа, используйте пустая строка для указателя. Итак, я предполагаю, что «удаление» в корне удаляет весь объект, верно?

Я попробовал это с двумя разными библиотеками JSON Patch с двумя разными результатами:

Каков официально принятый, стандартный результат этого? Я проверил в RFC патч JSON (https://tools.ietf.org/html/rfc6902), но ничего не нашел.


person Kris    schedule 20.08.2017    source источник


Ответы (1)


RFC 6902 ссылается на это для дальнейшей обработки ошибок: https://tools.ietf.org/html/rfc5789#section-2.2

И мне кажется, что эта часть отвечает всем требованиям:

Resource not found:  Can be specified with a 404 (Not Found) status
  code when the client attempted to apply a patch document to a non-
  existent resource, but the patch document chosen cannot be applied
  to a non-existent resource.

Поскольку вы в принципе не определили ни одного ресурса - даже /, который более четко относился бы к корню/всему объекту.

Я предполагаю, что разница между двумя библиотеками связана с тем, что эти две обычно считаются идентичными:
/my/resource
/my/resource/

Но обычно путь, отличный от /, будет автоматически перенаправлен 301 на путь, который имеет /. Так что я бы лично пошел с ответом 404 для "path": ""

person Juha Untinen    schedule 24.09.2017
comment
Спасибо за указание на RFC5789. Я еще не заглядывал туда. Хотя кажется, что RFC5789 специально предназначен для случаев, когда JSON Patch используется с методом HTTP PATCH. - person Kris; 25.09.2017
comment
Пожалуйста, обратитесь к RFC 6901, чтобы понять рассматриваемое свойство пути. Пустой путь определяет ресурс: весь объект, а также путь / не эквивалентен корневому каталогу. {"": "me defined by '/' path!"} Удаление корня не определено в RFC, но чтобы сделать операцию «заменить» функциональной, «удаление» должно удалить весь объект и вернуть успех. - person crimaniak; 20.05.2018