С учетом следующих определений YANG в модуле test
:
list machine {
key "name";
leaf "name" {
type string;
}
}
и в дереве данных:
"machine" : [
{ "name": "a" },
{ "name": "b" },
{ "name": "c" }
]
Я хочу знать, соответствует ли следующий запрос RESTCONF?
GET /restconf/data/test/machine
Ожидается, что этот запрос вернет все экземпляры списка.
У меня есть этот вопрос, потому что у меня нет четкого понимания слов от RESTCONF. В RESTCONF 3.5.3 ,
Если узел данных в выражении пути является узлом списка YANG, тогда
значения ключа для списка (, если есть * ) ДОЛЖНЫ быть закодированы в соответствии с
следующие правила:
o Листовые значения ключа для ресурса данных, представляющего список YANG
ДОЛЖЕН быть закодирован с использованием одного сегмента пути [RFC3986].
o Если есть только одно значение листа ключа, сегмент пути
построен с использованием имени списка, за которым следует символ "=",
сопровождаемый единственным листом ключевого значения.
(if any)
означает, какое из следующих двух значений? (оператор key
не обязателен для неконфигурации list
. Так что есть keyed lists
и non-keyed lists
.)
Пользователи могут свободно указывать значения ключей для списков ключей. (if any)
означает «если указаны ключевые значения». Если они указывают, то значения ключей ДОЛЖНЫ следовать правилам о значениях ключей. Если они не указаны, вам не нужно следовать правилам о значениях ключей. Взять, к примеру, мои определения YANG, оба эти запроса верны:
GET /restconf/data/test/machine // get all list instances
GET /restconf/data/test/machine=a // get the list instance keyed "a"
Пользователи должны указывать значения ключей для списков ключей. (if any)
означает "если список введен с клавиатуры или нет". В этом понимании будет:
GET /restconf/data/test/machine // wrong request, can't get all list instanecs
GET /restconf/data/test/machine=a // ok, get the list instance keyed "a"
Второе понимание взято из похожих слов в том же разделе для лист-листов:
Если узел данных в выражении пути является узлом листового списка YANG, то
значение листового списка ДОЛЖНО быть закодировано в соответствии со следующими правилами:
o Идентификатор листового списка ДОЛЖЕН быть закодирован с использованием одного пути
сегмент [RFC3986].
o Сегмент пути создается по имени списка
сопровождаемый символом "=", сопровождаемым значением листового списка
(например, /restconf/data/top-leaflist=fred).
Слова для листовых списков не имеют (if any)
, поэтому вы не можете использовать URL-адрес, например /restconf/data/top-leaflist
. Вы должны использовать =fred
, чтобы указать экземпляр списка. Итак, если экземпляры листового списка не могут быть извлечены целиком, почему экземпляры списка могут быть извлечены целиком (в понимании 1)? Экземпляр листового списка и экземпляр списка являются ресурсом данных, они по своей концепции эквивалентны.
Спасибо