GraphQL-végpontok meghívása

A Data API Builder (DAB) GraphQL-végpontjai lehetővé teszik az adatok pontos lekérdezését és módosítását. Minden lekérdezés pontosan meghatározza, hogy milyen mezőkre van szüksége, és támogatja a szűrési, rendezési és lapozási eredmények argumentumait.

Alapértelmezés szerint a DAB a GraphQL-végpontját a következő helyen tárolja:

https://{base_url}/graphql

A konfigurációval közzétett entitások automatikusan bekerülnek a GraphQL-sémába. Ha például vannak books és authors entitások, mindkettő gyökérmezőként jelenik meg a sémában.

Megjegyzés:

A séma és az automatikus kiegészítési mezők megismeréséhez használjon bármilyen modern GraphQL-ügyfelet vagy IDE-t (például az Apollót, az Álmatlanságot vagy a Visual Studio Code GraphQL-bővítményt).

A Data API Builderben támogatott kulcsszavak

Fogalom GraphQL Alkalmazás célja
Projection Elemek Adja meg, hogy mely mezőket adja vissza
Filtering szűrő Sorok korlátozása feltétel szerint
Rendezés orderBy Rendezési sorrend meghatározása
Oldalméret első Az elemek korlátozása oldalanként
Folytatás után Folytatás az utolsó oldalról

Alapszintű struktúra

Minden GraphQL-lekérdezés egy entitást jelképező gyökérmezővel kezdődik. Minden GraphQL-kérés a POST használatával a /graphql végpontra irányul, és a lekérdezést tartalmazó JSON-törzset küld.

{
  books {
    items {
      id
      title
      year
      pages
    }
  }
}

A válasz egy olyan JSON-objektum, amelynek alakzata megegyezik a kijelölési csoportéval. A lapozás és a hiba részletei csak akkor jelennek meg, ha alkalmazhatók.

Megjegyzés:

Alapértelmezés szerint a DAB lekérdezésenként legfeljebb 100 elemet ad vissza, kivéve, ha másként van konfigurálva (runtime.pagination.default-page-size).

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "{ books { items { id title year pages } } }"
}

Siker:

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
        { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
      ]
    }
  }
}

Siker az oldalkezeléssel:

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "year": 1965, "pages": 412 },
        { "id": 2, "title": "Foundation", "year": 1951, "pages": 255 }
      ],
      "hasNextPage": true,
      "endCursor": "eyJpZCI6Mn0="
    }
  }
}

Hiba:

{
  "errors": [
    {
      "message": "Could not find item with the given key.",
      "locations": [{ "line": 1, "column": 3 }],
      "path": ["book_by_pk"]
    }
  ]
}

Lekérdezéstípusok

Mindegyik entitás két szabványos gyökér lekérdezést támogat:

Lekérdezés Leírás
entity_by_pk Egy rekordot ad vissza az elsődleges kulcsa alapján
entities A szűrőknek megfelelő rekordok listáját adja vissza

Példa egy rekord visszaadására:

{
  book_by_pk(id: 1010) {
    title
    year
  }
}

Több értéket visszaadó példa:

{
  books {
    items {
      id
      title
    }
  }
}

Eredmények szűrése

filter Az argumentum használatával korlátozhatja, hogy mely rekordokat adja vissza a rendszer.

{
  books(filter: { title: { contains: "Foundation" } }) {
    items { id title }
  }
}

Ez a lekérdezés az összes olyan könyvet visszaadja, amelynek a címe "Foundation" (Alapozás) címet tartalmazza.

A szűrők kombinálhatják a logikai operátorokkal való összehasonlítást:

{
  authors(filter: {
    or: [
      { first_name: { eq: "Isaac" } }
      { last_name: { eq: "Asimov" } }
    ]
  }) {
    items { first_name last_name }
  }
}

Tekintse meg a támogatott operátorok szűrőargumentum-hivatkozását, például eq: , neq, ltlteés isNull.

Találatok rendezése

Az orderBy argumentum határozza meg a rekordok rendezésének módját.

{
  books(orderBy: { year: DESC, title: ASC }) {
    items { id title year }
  }
}

Ez visszaadja a year szerint csökkenő sorrendben, majd a title alapján rendezett könyveket.

További információkért lásd a orderBy argumentum dokumentációját.

Eredmények korlátozása

Az first argumentum korlátozza, hogy egy kérelem hány rekordot ad vissza.

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

Ez az első öt könyvet adja vissza, alapértelmezés szerint az elsődleges kulcs szerint rendezve. A konfigurált maximális oldalméretet is kérheti first: -1 .

További információ az első argumentumhivatkozásban.

Folyamatos eredmények

A következő lap beolvasásához használja az after argumentumot az előző lekérdezés kurzorával.

{
  books(first: 5, after: "eyJpZCI6NX0=") {
    items { id title }
  }
}

A after token jelzi, hogy hol végződött az előző oldal. További információt az argumentum utáni hivatkozásban talál.

Mezőválasztás (projekció)

A GraphQL-ben pontosan kiválaszthatja, hogy mely mezők jelenjenek meg a válaszban. Nincs ilyen SELECT * helyettesítő karakter. Csak azt kérje, amire szüksége van.

{
  books {
    items { id title price }
  }
}

Aliasokkal is átnevezheti a mezőket a válaszban:

{
  books {
    items {
      bookTitle: title
      cost: price
    }
  }
}

Részletekért lásd a mezővetítési referenciát .

Adatok módosítása

A GraphQL-mutációk lehetővé teszik rekordok létrehozását, frissítését és törlését az entitásengedélyek függvényében.

Mutáció Action
createEntity Új elem létrehozása
updateEntity Meglévő elem frissítése
deleteEntity Elem eltávolítása

Megjegyzés:

Az _by_pk utótag csak lekérdezésekre vonatkozik (például book_by_pk). A mutációnevek nem tartalmazzák ezt az utótagot – használja a updateBook és a deleteBook kifejezéseket, ne pedig a updateBook_by_pk vagy deleteBook_by_pk kifejezéseket.

Fontos

A GraphQL-mutációkhoz aktív adatbázis-kapcsolatkészlet szükséges. Ha a kapcsolati sztring beállítja Pooling=False vagy MultipleActiveResultSets=False, a mutációk a hibával Implicit distributed transactions have not been enabled meghiúsulnak. Állítsa be Pooling=True és MultipleActiveResultSets=True (SQL Server) vagy az adatbázis-szolgáltató megfelelőjeként.

Jótanács

A GraphQL-ben közzétett tárolt eljárások esetében a DAB előtagja az entitás nevét a következővel executejelöli: . Például egy GetBookById nevű tárolt eljárás entitás a sémában executeGetBookById lesz. További információ: tárolt eljárások.

Új rekord létrehozása

create Új elem hozzáadásához használjon mutációt.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { createBook(item: { id: 2000, title: \"Leviathan Wakes\", year: 2011, pages: 577 }) { id title year pages } }"
}

Egy létező rekord frissítése

update Egy meglévő elem adott mezőinek módosításához használjon mutációt.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { updateBook(id: 2000, item: { title: \"Leviathan Wakes\", year: 2011, pages: 577 }) { id title year pages } }"
}

Rekord törlése

delete Egy elem elsődleges kulcs szerinti eltávolításához használjon mutációt.

POST https://localhost:5001/graphql
Content-Type: application/json

{
  "query": "mutation { deleteBook(id: 2000) { id title } }"
}