Законно ли использовать список POST/PUT/PATCH и листовой список в RESTCONF?

Это дополнительный вопрос к этому пост. Из ответа @predi я знаю, что законно GET URL-адрес, целевым ресурсом которого является список или лист-список, и DELETE не может использовать такой URL-адрес. То есть, учитывая следующие определения YANG:

list machine {
    key "name";
        leaf "name" {
        type string;
    }
} 

Запрос GET /restconf/data/test/machine является законным. Запрос DELETE /restconf/data/test/machine является незаконным.

Я хочу подтвердить, могут ли другие методы, такие как POST, PUT или PATCH, использовать список или листовой список в качестве целевого ресурса URL в запросах. Например, допустимы ли следующие запросы в RESTCONF?

POST   /restconf/data/test/machine
PUT    /restconf/data/test/machine
PATCH  /restconf/data/test/machine

В настоящее время я считаю запросы POST и PUT незаконными и не уверен в запросе PATCH.

Вот мои причины:

Из 3.5:

Контейнеры, листы, элементы листового списка, элементы списка, узлы anydata и узлы anyxml являются ресурсами данных.

Таким образом, листовой список или список не являются ресурсом данных. Только запись листового списка или запись списка является ресурсом данных.

Из 4.4:

Метод POST отправляется клиентом для создания ресурса данных или вызова рабочего ресурса. Сервер использует тип целевого ресурса, чтобы определить, как обрабатывать запрос.

  +-----------+------------------------------------------------+
  | Type      | Description                                    |
  +-----------+------------------------------------------------+
  | Datastore | Create a top-level configuration data resource |
  | Data      | Create a configuration data child resource     |
  | Operation | Invoke an RPC operation                        |
  +-----------+------------------------------------------------+

                 Resource Types That Support POST

Таким образом, указанный тип целевого ресурса — DATA, ресурс данных.

Из 4.5:

Метод PUT отправляется клиентом для создания или замены целевого ресурса данных.

Я не нашел подобных описаний в разделе PATCH. В разделе PATCH говорится только о target resource, а не target data resource или data resource.

Но в секциях PUT и PATCH есть и двусмысленные слова:

Если целевой ресурс представляет листовой список YANG, то метод PUT НЕ ДОЛЖЕН изменять значение экземпляра листового списка.

Если целевой ресурс представляет листовой список YANG, то метод PATCH НЕ ДОЛЖЕН изменять значение экземпляра листового списка.

Кажется, что целевой ресурс может представлять лист-список, но позже он говорит: «НЕ ДОЛЖЕН изменять значение экземпляра листа-списка». Если в качестве целевого ресурса используется листовой список, PUT или PATCH не должны изменять экземпляр листового списка?

Учитывая это:

leaf-list names {
    type string;
}

и экземпляры в кодировке JSON:

names: ["a", "b", "c"]

Существует три экземпляра листового списка: a, b и c. При использовании:

PUT .../names

тогда вы можете только создать или заменить весь лист-лист, как вы можете MUST NOT change the value of the leaf-list instance?

Спасибо,


person password636    schedule 16.05.2019    source источник
comment
Чтобы получить ответ на этот вопрос, лучше всего направить его в список рассылки NETCONF/RESTCONF. . Авторы документа всегда отвечают, если нужны разъяснения.   -  person predi    schedule 31.05.2019