共用方式為


如何呼叫 GraphQL 端點

資料 API 產生器 (DAB) 中的 GraphQL 端點可讓您精確查詢和修改資料。 每個查詢都會準確宣告您需要的欄位,並支援篩選、排序和分頁結果的引數。

根據預設,DAB 會將其 GraphQL 端點託管在:

https://{base_url}/graphql

透過設定公開的實體會自動包含在GraphQL結構描述中。 例如,如果您有 booksauthors 實體,則兩者都會在結構描述中顯示為根欄位。

備註

使用任何現代 GraphQL 用戶端或 IDE (例如 Apollo、Insomnia 或 VS Code GraphQL) 來探索結構描述和自動完成欄位。

Data API 產生器支援的關鍵字

概念 GraphQL 目標
Projection 項目 選擇要傳回的欄位
篩選 篩選 依條件限制資料列
排序 orderBy 定義排序順序
頁面大小 first 限制每頁的項目
繼續 從最後一頁繼續

基本結構

每個 GraphQL 查詢都以代表實體的根欄位開頭。

{
  books {
    items {
      id
      title
      price
    }
  }
}

結果是與選取集具有相同形狀的 JSON 物件:

{
  "data": {
    "books": {
      "items": [
        { "id": 1, "title": "Dune", "price": 20 },
        { "id": 2, "title": "Foundation", "price": 18 }
      ]
    }
  }
}

備註

根據預設,除非另有設定,否則每個查詢 DAB 最多會傳回 100 個項目 (runtime.pagination.default-page-size)。

查詢類型

每個實體都支援兩個標準根查詢:

Query 說明
entity_by_pk 根據主鍵傳回一筆記錄
entities 傳回符合篩選條件的記錄清單

傳回一筆記錄的範例:

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

範例回傳多個結果

{
  books {
    items {
      id
      title
    }
  }
}

篩選結果

使用 filter 引數來限制傳回哪些記錄。

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

此查詢會傳回標題包含「基礎」的所有書籍。

篩選器可以將比較與邏輯運算子結合:

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

請參閱 filter 引數參考,以取得支援的運算子,例如 eqneqltlte、 和 isNull

排序結果

orderBy引數定義記錄的排序方式。

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

這會傳回依year遞減排序的書籍,然後再依title排序。

如需詳細資訊,請參閱 orderBy 引數參考

限制結果

first 數會限制單一要求中傳回的記錄數目。

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

這會傳回前五本書,依預設依主索引鍵排序。 您也可以使用 first: -1 來要求設定的頁面大小上限限制。

第一個引數參考中了解更多信息。

持續的結果

若要擷取下一頁,使用者應使用 after 引數與先前查詢的游標。

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

after 標記表示前一頁的結尾位置。 如需詳細資訊,請參閱 引數參考之後

欄位選擇(投影)

在 GraphQL 中,您可以準確選擇回應中顯示的欄位。 沒有像 SELECT * 這樣的萬用字元。 只請求您需要的內容。

{
  books {
    items { id title price }
  }
}

您也可以使用別名來重新命名回應中的欄位:

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

如需詳細資訊,請參閱 欄位投影參考