Flex Gateway新着情報
Governance新着情報
Monitoring API Managerこの簡単なチュートリアルでは、Anypoint DataGraph で GraphQL クエリを作成するための重要な概念を紹介します。
Anypoint DataGraph クエリエディターを使用して、次の操作を実行する方法を説明します。
クエリ操作を検出して追加する
クエリに入力パラメーターを追加する
クエリに使用できる項目を検出する
ネストされた種別を追加する
クエリの別名を追加する
変異を作成し、クエリ種別を理解する
GraphQL では、クエリメソッドは必要なデータを取得するためのエントリポイントとして機能します。Anypoint DataGraph クエリエディターのスキーマエクスプローラーを使用して、API スキーマで使用できるクエリメソッドを検出することから始めます。
たとえば、「DataGraph クイックスタートガイド」で使用されている Catalyst Order API スキーマには、ordersCustomerByCustomerId と ordersByOrderId の 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 個の変異操作が関連付けられています。
createCustomer の場合: この変異は CustomerInput オブジェクトを入力として取り、Customer 種別の新しいオブジェクトを作成します。
そのためこの場合、入力種別 CustomerInput には次の項目があります。
住所項目には、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 項目が含まれ、その値は入力で指定された値に基づいて生成されます。