---
schema_version: "1"
id: e9f428cd31172ea3ec0e2debd836f92468abbb77e454dd8470cc7bcf179066a0
title: DataGraph での GraphQL クエリおよび変異の作成
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/datagraph/write-queries-tutorial.md
canonical_url: https://docs.mulesoft.com/jp/datagraph/write-queries-tutorial
source_site: docs.mulesoft.com
content_type: documentation
content_hash: e46f434441425b9347d7a18cb97930d8d3b1b4adf959b12627330d431ea8c984
description: MuleSoft Documentation Site
latest: true
---
# DataGraph での GraphQL クエリおよび変異の作成

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

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

1. クエリ操作を検出して追加する
2. クエリに入力パラメーターを追加する
3. クエリに使用できる項目を検出する
4. ネストされた種別を追加する
5. クエリの別名を追加する
6. 変異を作成し、クエリ種別を理解する

## [](#クエリ操作を検出して追加する)クエリ操作を検出して追加する

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

たとえば、​[「DataGraph クイックスタートガイド」](https://docs.mulesoft.com/jp/datagraph/datagraph-qsg)​で使用されている Catalyst Order API スキーマには、​`ordersCustomerByCustomerId`​ と ​`ordersByOrderId`​ の 2 つのクエリメソッドが関連付けられています。

![スキーマエクスプローラーにリストされている 2 つのクエリメソッド](/mulesoft/current/ja-jp/datagraph/_images/schema-explorer-query-method.png)

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

`ordersByOrderId (orderId:String!):OrderResponse`​

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

```copy
{
  ordersByOrderId(orderId:String!)
}
```

## [](#入力パラメーターを追加する)入力パラメーターを追加する

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

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

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

## [](#項目を追加する)項目を追加する

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

![スキーマエクスプローラーにリストされている使用可能な項目](/mulesoft/current/ja-jp/datagraph/_images/schema-explorer-fields.png)

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

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

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

## [](#ネストされた種別の項目を追加する)ネストされた種別の項目を追加する

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

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

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

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

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

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

```none
{
  "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`​ に変更できます。

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

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

```copy
{
  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 個の変異操作](/mulesoft/current/ja-jp/datagraph/_images/schema-explorer-mutation-method.png)

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

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

![スキーマエクスプローラーにリストされている CustomerInput の項目](/mulesoft/current/ja-jp/datagraph/_images/schema-explorer-mutation-fields.png)

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

![スキーマエクスプローラーにリストされている AddressInput の項目](/mulesoft/current/ja-jp/datagraph/_images/schema-explorer-mutation-fields2.png)

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

```copy
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`​ 項目が含まれ、その値は入力で指定された値に基づいて生成されます。

## [](#関連リソース)関連リソース

- [GraphQL クエリのドキュメント](https://graphql.org/learn/queries/)
- [Anypoint DataGraph の用語](https://docs.mulesoft.com/jp/datagraph/datagraph-terms)
- [API スキーマの要素の理解](https://docs.mulesoft.com/jp/datagraph/schemas)
- [クエリおよび変異の実行](https://docs.mulesoft.com/jp/datagraph/query-unified-schema)