Ограничение размера страницы с помощью first GraphQL

Ограничение размера страницы предотвращает подавляющие клиенты или серверы при запросе больших наборов данных. В GraphQL построитель API данных (DAB) использует first аргумент для управления количеством записей, возвращаемых в одном ответе. DAB применяет внутреннее разбиение на страницы на основе курсоров, но first можно использовать независимо для простого размера результата.

Замечание

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

Перейдите к версии REST этого документа.

Обзор

Понятие Description
Размер страницы по умолчанию runtime.pagination.default-page-size (по умолчанию — 100)
Максимальный размер страницы runtime.pagination.max-page-size (по умолчанию — 100000)
Переопределение клиента first
Максимальное количество запросов Передача -1 запроса настроенного максимального размера страницы

Если first опущен, размер страницы по умолчанию применяется автоматически.

Шаблон использования

query {
  books(first: N) {
    items { id title }
  }
}

Example

Ограничить результаты пятью книгами.

query {
  books(first: 5) {
    items {
      id
      title
    }
  }
}

Концептуальный SQL

SELECT TOP (5)
  id,
  sku_title AS title
FROM dbo.books
ORDER BY id ASC;

Пример ответа

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune" },
        { "id": 2, "title": "Foundation" },
        { "id": 3, "title": "Hyperion" },
        { "id": 4, "title": "I, Robot" },
        { "id": 5, "title": "The Martian" }
      ]
    }
  }
}

Правила проверки

Ввод Result
Упущенный Использует default-page-size
Максимальное число положительного целого числа ≤ Принято
-1 Развернуто в max-page-size
0 Ошибка (недопустимая)
< -1 Ошибка
> max-page-size Ошибка

Пример сообщения об ошибке

Invalid number of items requested, first argument must be either -1 or a positive number within the max page size limit of 100000. Actual value: 0

Пример конфигурации

{
  "runtime": {
    "pagination": {
      "default-page-size": 100,
      "max-page-size": 100000
    }
  },
  "entities": {
    "Book": {
      "source": {
        "type": "table",
        "object": "dbo.books"
      },
      "mappings": {
        "sku_title": "title",
        "sku_price": "price"
      },
      "relationships": {
        "book_category": {
          "cardinality": "one",
          "target.entity": "Category",
          "source.fields": [ "category_id" ],
          "target.fields": [ "id" ]
        }
      }
    },
    "Category": {
      "source": {
        "type": "table",
        "object": "dbo.categories"
      },
      "relationships": {
        "category_books": {
          "cardinality": "many",
          "target.entity": "Book",
          "source.fields": [ "id" ],
          "target.fields": [ "category_id" ]
        }
      }
    }
  }
}

См. также

Понятие REST GraphQL Цель
Projection $select items Выбор возвращаемых полей
Filtering $filter фильтр Ограничение строк по условию
Сортировка $orderby orderBy Определение порядка сортировки
Размер страницы $first first Ограничение количества элементов на страницу
Продолжение $after после Продолжить с последней страницы с помощью курсора

Замечание

Ключевые слова REST начинаются с $следующих соглашений OData.