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