Законно ли POST / PUT / PATCH список и лист-лист в RESTCONF? - PullRequest
1 голос
/ 16 мая 2019

Это дополнительный вопрос к этой записи.Из ответа @ 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?

Спасибо,

...