Кратко

  • Редакция 13 задаёт последовательность where, sort-by, locale, direction, offset или cursor, limit, отдельно ограничивая вложенные коллекции через sublist-limit.
  • Валидный курсор подтверждает позицию продолжения в сохранённом контексте. Он не подтверждает полный порядок, единую версию NACM, общий момент всех источников или полноту вложенных списков.

Сбой целостности не обязательно выглядит как неправильная страница. Первая страница может быть правильной, и вторая тоже, хотя их объединение никогда не существовало в системе. Между запросами маршрут меняет метрику, интерфейс исчезает, правило доступа меняет видимую совокупность, а один из объединённых источников обновляется раньше другого. Ошибка начинается тогда, когда потребитель приписывает этим ответам общий момент.

draft-ietf-netconf-list-pagination-13 тщательно описывает сам вопрос. Сначала сервер применяет where, затем sort-by; locale задаёт контекст сортировки. После этого действуют direction и один из взаимоисключающих способов позиционирования — offset или cursor; последним применяется limit. sublist-limit ограничивает не целевую коллекцию, а списки и leaf-list внутри возвращённых объектов.

Редакция 13 опубликована 6 июля 2026 года. IETF Datatracker показывает её как активный Internet-Draft рабочей группы NETCONF для Standards Track, со статусом WG In WG Last Call, меткой Revised I-D Needed - Issue raised by WGLC и статусом IESG I-D Exists. Текущая панель проверки YANG суммирует три ошибки; видимые сообщения pyang и yanglint указывают на одну область экранированного переноса строки. Это состояние документа и инструментов, а не доказательство дефекта реализации, эксплуатации или реальных данных.

Сохраняется формулировка запроса

Последовательность курсоров начинается с cursor=first. При инициализации фиксируются where, sort-by и locale. Ссылки next и previous несут исходный контекст, а далее можно менять только limit и sublist-limit. Клиент не может незаметно заменить фильтр на середине и представить результат как одну выборку.

Однако спецификация не задаёт идентификатор снимка, единое время чтения, номер транзакции, вектор ревизий или барьер между источниками. Тот же вопрос через секунду может быть честно выполнен над уже изменившейся совокупностью.

Offset пропускает число элементов, поэтому вставка или удаление перед границей меняет его логический смысл. Непрозрачный курсор представляет ключ или индекс нижележащей системы и оставляет серверу интерпретацию позиции. Это полезнее простого счётчика, но не блокирует изменения остальных объектов.

Сопутствующий проект RESTCONF прямо говорит, что сервер не хранит состояние следующей или предыдущей страницы и курсора. Ссылка — повторно исполняемая инструкция продолжения, а не билет к зарезервированному результату. Отсутствие состояния помогает масштабированию, но не создаёт доказательство снимка.

Поле сортировки не гарантирует полного порядка

Без sort-by действует порядок списка YANG. При наличии параметра элементы без выбранного значения идут после элементов со значением. locale допустима только вместе с сортировкой; если клиент её не указал, сервер выбирает и возвращает её как метаданные YANG.

Фиксация локали устраняет скрытое значение по умолчанию. Но тег BCP 47 не указывает версию Unicode, библиотеку сравнения, нормализацию и правило разрешения равенства. Два источника могут принять одну локаль, но по-разному расположить регистр, диакритику или эквивалентные формы.

В проекте нет вторичной сортировки. Если основные значения равны, реальный порядок зависит от внутреннего признака вне запроса. Граница страницы внутри такой группы может измениться после перезапуска, смены узла или обновления индекса, хотя основное поле всё ещё отсортировано правильно. Для доказательства нужен фактический ключ разрешения равенства или явное признание, что порядок частичный.

Объявленная возможность не равна наблюдаемому выполнению

Списки config false бывают большими и динамичными. Через модель RFC 9196 сервер может объявить узел constrained, перечислить дочерние indexed и указать cursor-supported. Для ограниченного списка фильтр и сортировка опираются на индексированные узлы, а выражение не спускается через подсписки.

Это позволяет клиенту выбрать выполнимый запрос. Но декларация не доказывает, что индекс применялся именно сейчас, был свежим или охватывал все источники. Возможности RFC 9196 могут зависеть от оборудования, лицензии и состояния исполнения. Каждая страница должна быть связана с идентичностью наблюдаемого набора возможностей.

content-id YANG Library из RFC 8525 идентифицирует модули и схемы. Он определяет структурный договор, по которому трактуется ответ, но не версию маршрутов, интерфейсов или счётчиков. Идентичность схемы не является временем данных.

Авторизация меняет видимую совокупность

RFC 8341 позволяет NACM ограничивать операции и содержимое для конкретного субъекта. Поэтому where применяется к разрешённому представлению, а не к абстрактному полному набору. Если между страницами меняется группа, правило или право на объект, меняется и совокупность.

Опубликованная статья BTW о RFC 9865 и SCIM рассматривает отдельную границу: наличие курсора не должно сохранять отозванный доступ. Здесь вопрос иной. Даже при новой правильной авторизации каждого запроса страницы под разными представлениями не обязательно образуют одну согласованную коллекцию. Для каждой страницы нужны субъект, версия политики и эффективное представление.

Операционные данные не ждут читателя

RFC 8342 различает intended и operational datastores. Операционное представление сочетает применённую конфигурацию и состояние системы, иногда из нескольких источников. Маршруты сходятся, счётчики растут, интерфейсы меняются во время чтения.

Если первая страница заканчивается ключом m, объект до него может сменить значение на z и появиться снова. Объект после него может стать a и выпасть совсем. Курсор уменьшает некоторые недостатки offset, но не замораживает прочие ключи и не синхронизирует федеративные хранилища.

Если система даёт общий снимок или вектор ревизий, его следует привязать ко всем страницам. Если нет, необходимо хранить времена по страницам и источникам, проверять повторы, пробелы и обратное движение границы, а результат описывать как проход за временной интервал. Это может быть полезный результат, но не мгновенно полная картина.

Полная верхняя страница не означает полных потомков

limit ограничивает целевой список, а sublist-limit — вложенные коллекции. remaining может быть положительным числом или unknown. Поэтому все устройства на верхнем уровне могут быть получены, но интерфейсы или маршруты внутри каждого — лишь частично.

Каждый усечённый подсписок создаёт отдельную ветвь доказательств: родитель, контекст, курсорная цепочка, хэш ответа и остаток либо неизвестность. Завершение верхней страницы не свидетельствует о полноте её содержимого.

Доказательство страницы и доказательство сборки

Для страницы следует сохранять субъект и политику NACM, datastore, идентичности YANG Library и возможностей, все параметры, хэши запроса и ответа, происхождение курсора, ключи и значения сортировки, remaining, время сервера, источники и их ревизии.

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

У курсора точная и полезная роль. Он знает позицию, предложенную сервером в сохранённом контексте. Общий момент должны доказывать другие средства.

Первичные источники

Закрытый набор включает текущий текст и архив, статус и историю Datatracker, различия редакций, два сопутствующих проекта, три старых обзора только как исторический контекст и основные RFC: https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-13; https://www.ietf.org/archive/id/draft-ietf-netconf-list-pagination-13.txt; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination/; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination/history/; https://author-tools.ietf.org/iddiff?url1=draft-ietf-netconf-list-pagination-12&url2=draft-ietf-netconf-list-pagination-13; https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-nc-12; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination-nc/; https://datatracker.ietf.org/doc/html/draft-ietf-netconf-list-pagination-rc-11; https://datatracker.ietf.org/doc/draft-ietf-netconf-list-pagination-rc/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-07-opsdir-early-linkova-2025-05-10/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-07-yangdoctors-early-lhotka-2025-04-28/; https://datatracker.ietf.org/doc/review-ietf-netconf-list-pagination-03-yangdoctors-lc-lhotka-2024-05-01/; https://www.rfc-editor.org/rfc/rfc6241.html; https://www.rfc-editor.org/rfc/rfc6242.html; https://www.rfc-editor.org/rfc/rfc5646.html; https://www.rfc-editor.org/rfc/rfc7950.html; https://www.rfc-editor.org/rfc/rfc7951.html; https://www.rfc-editor.org/rfc/rfc7952.html; https://www.rfc-editor.org/rfc/rfc8040.html; https://www.rfc-editor.org/rfc/rfc8341.html; https://www.rfc-editor.org/rfc/rfc8342.html; https://www.rfc-editor.org/rfc/rfc8407.html; https://www.rfc-editor.org/rfc/rfc8525.html; https://www.rfc-editor.org/rfc/rfc9196.html; https://www.rfc-editor.org/rfc/rfc9911.html.