Законно ли ПОЛУЧИТЬ все экземпляры списка в RESTCONF?

Учитывая следующие определения 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.)

  1. Пользователи могут свободно указывать значения ключей для списков ключей. (if any) о "если ключевые значения указаны." Если они указывают, то значения ключей ДОЛЖНЫ следовать правилам о значениях ключей. Если они не указаны, вам не нужно следовать правилам о значениях ключей. Взять, к примеру, мои определения YANG, оба эти запроса верны:

    GET /restconf/data/test/machine    // get all list instances
    GET /restconf/data/test/machine=a  // get the list instance keyed "a"
    
  2. Пользователи должны указывать значения ключей для списков ключей. (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)? Экземпляр листового списка и экземпляр списка являются ресурсом данных, они по своей концепции эквивалентны.

Спасибо,

1 ответ

Решение

Правильное толкование равно 1. "Если есть" относится к ключевым значениям, а не к ключевым утверждениям YANG. Это нормально для RESTCONF GET, чтобы выбрать более одного экземпляра списка, но только в кодировке JSON (правильно сформированный XML не допускает множественных корневых элементов). Это также единственный способ получить экземпляры списка без конфигурации (состояния) без ключа.

Если через GET будет разрешено получать только одну запись в списке, соответствующая секция RFC будет явно указывать это с помощью MUST - если вы посмотрите на формулировку для DELETE в разделе 4.7, p3, такой текст существует, но есть нет эквивалента для GET.

Также можно получить несколько экземпляров листового списка. Это может быть единственным способом получения некоторых таких экземпляров, поскольку (в YANG 1.1) допускаются повторяющиеся значения для неконфигурационных листовых списков. Отсутствующее "если есть", скорее всего, является редакционным упущением.

Обратите внимание, что текст в 3.5.3 только объясняет, как формируются URI, но ничего не говорит о том, как операции RESTCONF используют эти URI.

Другие вопросы по тегам