資料 API 產生器 (DAB) 中的 GraphQL 端點可讓您精確查詢和修改資料。 每個查詢都會準確宣告您需要的欄位,並支援篩選、排序和分頁結果的引數。
根據預設,DAB 會將其 GraphQL 端點託管在:
https://{base_url}/graphql
透過設定公開的實體會自動包含在GraphQL結構描述中。
例如,如果您有 books 和 authors 實體,則兩者都會在結構描述中顯示為根欄位。
備註
使用任何現代 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 引數參考,以取得支援的運算子,例如 eq、 neq、 ltlte、 和 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
}
}
}
如需詳細資訊,請參閱 欄位投影參考 。