Dela via


Begränsa sidstorleken med first i GraphQL

Om du begränsar sidstorleken kan du inte överbelasta klienter eller servrar när du kör frågor mot stora datauppsättningar. I GraphQL använder first Data API Builder (DAB) argumentet för att styra hur många poster som returneras i ett enda svar. DAB tillämpar markörbaserad sidnumrering internt, men first kan användas separat för att helt enkelt begränsa resultatstorleken.

Anmärkning

first begränsar antalet returnerade poster men hanterar inte själva fortsättningen. För flera sidor använder du after.

Gå till REST-versionen av det här dokumentet.

Översikt

Begrepp Description
Standardstorlek för sidor runtime.pagination.default-page-size (standardvärdet är 100)
Maximal sidstorlek runtime.pagination.max-page-size (standardvärdet är 100000)
Åsidosättning av klient first
Begär max Skicka -1 för att begära den konfigurerade maximala sidstorleken

Om first utelämnas tillämpas standardstorleken på sidan automatiskt.

Användningsmönster

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

Example

Begränsa resultatet till fem böcker.

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

Konceptuell SQL

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

Exempelsvar

{
  "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" }
      ]
    }
  }
}

Valideringsregler

Indata Result
Utelämnad Använder default-page-size
Maximalt positivt heltal ≤ Accepted
-1 Expanderad till max-page-size
0 Fel (ogiltigt)
< -1 Error
> max-page-size Error

Exempel på felmeddelande

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

Exempelkonfiguration

{
  "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" ]
        }
      }
    }
  }
}

Se även

Begrepp REST GraphQL Avsikt
Projection $select items Välj vilka fält som ska returneras
Filtering $filter filtrera Begränsa rader efter villkor
Sortering $orderby orderBy Definiera sorteringsordningen
Sidstorlek $first first Begränsa antalet objekt per sida
Fortsättning $after efter Fortsätt från den sista sidan med hjälp av en markör

Anmärkning

REST-nyckelord börjar med $, enligt OData-konventioner.