DataGraph での GraphQL クエリおよび変異の作成

この簡単なチュートリアルでは、Anypoint DataGraph で GraphQL クエリを作成するための重要な概念を紹介します。

Anypoint DataGraph クエリエディタを使用して、次の操作を実行する方法を説明します。

  1. クエリ操作を検出して追加する

  2. クエリに入力パラメータを追加する

  3. クエリに使用できる項目を検出する

  4. ネストされた種別を追加する

  5. クエリの別名を追加する

  6. 変異を作成し、クエリ種別を理解する

クエリ操作を検出して追加する

GraphQL では、クエリメソッドは必要なデータを取得するためのエントリポイントとして機能します。Anypoint DataGraph クエリエディタのスキーマエクスプローラを使用して、API スキーマで使用できるクエリメソッドを検出することから始めます。

たとえば、​「DataGraph クイックスタートガイド」​で使用されている Catalyst Order API スキーマには、​ordersCustomerByCustomerId​ と ​ordersByOrderId​ の 2 つのクエリメソッドが関連付けられています。

スキーマエクスプローラにリストされている 2 つのクエリメソッド

ordersByOrderId​ の場合: このクエリメソッドは、オブジェクト種別 ​OrderResponse​ に関するデータを返し、​orderID​ の引数を文字列形式で必要とします。

ordersByOrderId (orderId:String!):OrderResponse

GraphQL で、クエリメソッドを追加してクエリを開始します。

{
  ordersByOrderId(orderId:String!)
}

入力パラメータを追加する

感嘆符 (​!​) で示されているように、クエリメソッド ​orderID​ の入力パラメータは null 不可能な項目です。この項目には、null 値ではない文字列データ型が必要です。

この場合、クエリに注文 ID を追加する必要があります。

{
  ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3")
}

項目を追加する

項目は、クエリ応答で返される種別のデータセットを表し、クエリを作成するときに必要な項目を選択できます。たとえば、前述のように ​ordersByOrderID​ クエリメソッドは ​OrderResponse​ オブジェクト種別を返し、次の項目を返します。

スキーマエクスプローラにリストされている使用可能な項目

クエリを作成するときに、これらの項目のいずれかを追加または削除できます。次のクエリは、使用可能な項目の一部を使用しています。

{
  ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3") {
    customerId
    status
    subtotal
    taxPrice
    total
    trackingNumber
  }
}

OrderResponse​ はレベル-1 種別です。つまり、前の例のようにクエリメソッドを使用して直接アクセスできます。

ネストされた種別の項目を追加する

billingAddress​ などの OrderResponse オブジェクト種別によって返される項目の多くは、それ自体が、クエリ結果の価値を高めることができる追加データが含まれるオブジェクト種別です。これらの追加種別は、ネストされた種別と呼ばれます。

billingAddress​ オブジェクト種別は ​PostalAddress​ オブジェクト種別を返し、それ自体がいくつかの追加項目を返します。​billingAddress​ を照会するには、​PostalAddress​ から返す項目を指定する必要があります。次に例を示します。

{
  ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3") {
    billingAddress {
      state
      city
      postalCode
    }
  }
}

結果として、最終的なクエリは次のようになります。

{
  ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3") {
    customerId
    status
    subtotal
    taxPrice
    total
    trackingNumber
    billingAddress {
      state
      city
      postalCode
    }
  }
}

このクエリの場合、Anypoint DataGraph は次を返します。

{
  "data": {
    "ordersByOrderId": {
      "customerId": "1964401a-a8b3-40c1-b86e-d8b9f75b5842",
      "status": "Draft",
      "subtotal": "100.21",
      "taxPrice": "15.22",
      "total": "125.43",
      "trackingNumber": "",
      "billingAddress": {
        "state": "CA",
        "city": "San Francisco",
        "postalCode": "94210"
      }
    }
  }
}

クエリの別名を追加する

別名を使用して、クエリ応答の個々のキーの名前を変更できます。

たとえば、クエリ応答のみで、合計項目の名前を ​totalPrice​、状況項目の名前を ​orderStatus​ に変更できます。

{
  ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3") {
    billingAddress {
      state
      city
      postalCode
    }
    totalPrice : total
    orderStatus : status
  }
}

異なる入力パラメータを使用して 2 つ以上のクエリ操作で同じ項目を取得する場合は、クエリ操作に別名を指定できます。

{
  Order1: ordersByOrderId(orderId: "51c0ba3a-7e64-11e7-bb31-be2e44b06b3") {
    billingAddress {
      state
      city
      postalCode
    }
    totalPrice : total
    orderStatus : status
  }

  Order2: ordersByOrderId(orderId: "87c0ba4a-de28-12o7-pd11-eew12094b0w4) {
    billingAddress {
      state
      city
      postalCode
    }
    totalPrice : total
    orderStatus : status
  }
}

これは、同じ項目が異なる値を取得する場合のエラーを回避するのに役立ちます。

変異を作成する

変異​は、データオブジェクトを追加、更新、および削除するために使用する操作です。GraphQL では、変異操作は REST API 仕様で定義した POST、PUT、PATCH、DELETE HTTP メソッドを表します。

スキーマを簡略化するため、変異への入力は、変異操作によって作成されたオブジェクトの属性を表す​入力種別​によって処理されます。入力種別は、変異を実行するときに統合スキーマの情報を変更するために使用する POST、PUT、および DELETE 要求オブジェクトです。

たとえば、次の例に示すスキーマでは、6 個の変異操作が関連付けられています。

スキーマエクスプローラにリストされている 6 個の変異操作

createCustomer​ の場合: この変異は ​CustomerInput​ オブジェクトを入力として取り、​Customer​ 種別の新しいオブジェクトを作成します。

そのためこの場合、入力種別 ​CustomerInput​ には次の項目があります。

スキーマエクスプローラにリストされている CustomerInput の項目

住所項目には、​AddressInput​ 入力種別からのデータがあります。

スキーマエクスプローラにリストされている AddressInput の項目

変異操作を実行するときに、入力種別の各項目に値を指定します。

mutation {
  createCustomer(input: {
    firstName: "Lydia",
    lastName: "Millet",
    address: {
      city: "Tucson",
      state: "Arizona",
      street: "Speedway",
      postalCode: "1234"
    }
  })
  {
    id
  }
}

この変異は新しい顧客を作成するため、DataGraph は次を返します。

{
  "data": {
    "createCustomer": {
      "id": 42
    }
  }
}

CustomerInput​ 入力種別には ​id​ 項目がないため、変異ではその項目が変異への入力に含まれません。ただし、​Customer​ 種別には ​id​ 項目が含まれ、その値は入力で指定された値に基づいて生成されます。