---
schema_version: "1"
id: dec9e620a9aa462e0225f5c3c83ed86411550b048fc5ce9781583994b2d4ad48
title: API スキーマの要素の理解
collection: mulesoft
version: current
locale: ja-jp
portal_url: https://docs.salesforce.com/mulesoft/current/ja-jp/datagraph/schemas.md
canonical_url: https://docs.mulesoft.com/jp/datagraph/schemas
source_site: docs.mulesoft.com
content_type: documentation
content_hash: fb4a9b333979cec7e4678dd17fcd67bb9175ad08754eb9b8f68c4d743260c43f
description: MuleSoft Documentation Site
latest: true
---
# API スキーマの要素の理解

Anypoint DataGraph は、クライアントが使用できるようにするために選択したすべてのデータを統合スキーマに整理します。統合スキーマは、追加するすべての API のすべてのスキーマの単一コレクションで、常に最新です。

統合スキーマに新しい API を追加すると、Anypoint DataGraph は API の RAML または OAS 仕様から API スキーマを生成します。各 API スキーマは、その API が追加されたときに作成されるため、統合スキーマは常に最新です。また、すべての API スキーマは組織内に個別に保存されるため、他のスキーマの整合性に影響を与えることなく、個別に編集できます。

Anypoint DataGraph が生成する API スキーマには、API 仕様で定義した GET リソースとエンティティのコレクション、およびそれらの間のリレーションが含まれます。統合スキーマに新しい API スキーマを追加するときはいつでも、統合スキーマに含まれる種別と項目を設定できます。

種別に適用できるさまざまな設定について学習する前に、次のトピックを参照し、API 仕様に応じて API スキーマに存在する可能性があるさまざまな種別を理解してください。

## [](#オブジェクト種別と項目)オブジェクト種別と項目

スキーマで最も一般的な種別であるオブジェクト種別は、GET 応答の一部として返される API 仕様のエンティティを表します。オブジェクト種別にはわかりやすい名前が付けられ、オブジェクトのプロパティを示す項目が含まれています。

たとえば、RAML 仕様では、仕様の各種別要素はオブジェクト種別、列挙種別、結合種別のいずれかになります。また、各種別要素のプロパティは、API スキーマ内のそれらのオブジェクト種別の項目です。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">RAML API 仕様</th>
<th class="tableblock halign-left valign-top">API スキーマ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">#%RAML 1.0
title: Order API

types:
  Order:
    type: object
    properties:
      orderId:
      date:
      status:


  Product:
    type: object
    properties:
      productId:
      name:
      brand:

/orders/​{id}​:
  get:
    displayName: Get Order by ID</code></pre>
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">ordersById(id): Order
--------------------
--------------------
Order
--------------------
orderId: ID!
date: String
status: String
--------------------
--------------------
Product
--------------------
productId: ID!
name: String
brand: String</code></pre>
</div>
</div></div></td>
</tr>
</tbody>
</table>

`Order`​ と ​`Product`​ は両方とも異なるオブジェクト種別であり、それぞれに異なる項目があり、次のように表すことができます。

```none
type Order {
  orderId: ID!
  date: String!
  status: String!
}
```

```none
type Product {
  productId: ID!
  name:String!
  brand: String!
}
```

### [](#項目のデータ型)項目のデータ型

各項目は、クエリの応答で返される型のデータセットを表します。デフォルトでは、5 個のスカラー型があります。

- `Int`​:  
    符号付き 32 ビット整数。
- `Float`​:  
    符号付き倍精度浮動小数点値。
- `String`​:  
    UTF-8 文字シーケンス。
- `Boolean`​:  
    `true`​ または ​`false`​。
- `ID`​:  
    ID スカラー型は一意の識別子を表し、オブジェクトの再取得やクエリメソッドのキーとしてよく使用されます。ID 型は、文字列と同じ方法でシリアル化されます。ただし、ID としての定義は人間が読める形式ではないことを意味します。

### [](#null-不可能な項目)null 不可能な項目

`!`​ 記号で表された値を含む項目は null 不可能です。つまり、項目は null 値で応答できません。たとえば、​`Product`​ 種別では、ID を null にすることはできません。

```none
type Product {
  productId: ID!
  name:String
  brand: String
}
```

また、​`Order`​ 種別では、どの値も null にすることはできません。

```none
type Order {
  orderId: ID!
  name: String!
  price: String!
  brand: Int!
}
```

## [](#クエリ種別とクエリメソッド)クエリ種別とクエリメソッド

クエリ種別は、要求を行うときの API スキーマへのエントリポイントです。クエリ種別には、API 仕様で定義した GET エンドポイントを表すクエリメソッドが含まれます。

たとえば、​`/orders/{id}`​ で GET エンドポイントを定義する RAML 仕様では、スキーマのクエリメソッドは ​`ordersById(id)`​ です。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">RAML API 仕様</th>
<th class="tableblock halign-left valign-top">API スキーマ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">#%RAML 1.0
title: Order API

/orders/​{id}​:
  get:
    displayName: Get Order by ID</code></pre>
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">ordersById(id): Order</code></pre>
</div>
</div></div></td>
</tr>
</tbody>
</table>

## [](#level-1-and-nested-types)レベル-1 種別とネストされた種別

スキーマ内の種別は、種別とクエリメソッド間のリレーションに依存するカテゴリに属しています。

- レベル-1 種別  
    これらの種別にはクエリメソッドが関連付けられているため、直接アクセスできます。
    
    たとえば、前の API 仕様では、​`order/{id}`​ エンドポイントに GET が関連付けられているため、​`Order`​ はレベル-1 オブジェクト種別です。
    
    このオブジェクト種別には、クエリメソッドを直接使用してアクセスできます。
    
    ```none
    ordersById (orderId: “123”) {
      orderId
      date
    }
    ```
- ネストされた種別  
    これらの種別にはクエリメソッドが関連付けられていないため、レベル-1 種別のクエリメソッドを介してのみアクセスできます。
    
    たとえば、前の API 仕様では、​`Product`​ はクエリメソッドが関連付けられていないオブジェクト種別です。​`Product`​ 種別の項目を照会するには、そのレベル-1 種別 ​`Order`​ に関連付けられているメソッドを照会する必要があります。
    
    ```none
    ordersById(id: "123") {
         orderId
         product {
             name
             price
         }
    }
    ```

この構造に従うと、クエリメソッドはレベル 0 種別とみなされます。

## [](#列挙種別)列挙種別

列挙種別は、特定の値のセットのみを返すことができる種別です。API 仕様で列挙種別を宣言して、項目が常に有限の値のセットを返すようにすることができます。

たとえば、オブジェクト種別 ​`Processing`​、​`Completed`​、​`Canceled`​ のいずれかを返す必要がある ​`OrderStatus`​ 種別を定義する RAML 仕様があるとします。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">RAML API 仕様</th>
<th class="tableblock halign-left valign-top">API スキーマ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">#%RAML 1.0
title: Order API

types:
  OrderStatus:
    type: string
    description: Current status of the order
    enum: [Processing, Completed, Canceled]</code></pre>
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">enum OrderStatus {
  Processing
  Completed
  Canceled
}</code></pre>
</div>
</div></div></td>
</tr>
</tbody>
</table>

## [](#結合種別)結合種別

結合種別は、他のオブジェクト種別を使用してデータのインスタンスを説明します。結合種別は 1 つ以上の特定のオブジェクト種別で構成されます。

たとえば、RAML 仕様では、​`Notebook`​ や ​`Phone`​ などの他の種別を使用して ​`Product`​ 種別を定義できます。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">RAML API 仕様</th>
<th class="tableblock halign-left valign-top">API スキーマ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">#%RAML 1.0
title: Order API

types:

  Product:
    type: Phone | Notebook

  Notebook:
    type: object
    properties:
      manufacturer:
        type: string
      numberOfUSBPorts:
        type: number
      kind: string

  Phone:
    type: object
    properties:
      manufacturer:
        type: string
      numberOfSIMCards:
        type: number
      kind: string</code></pre>
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">Product
--------------------
Notebook
Phone
--------------------
--------------------
Notebook
--------------------
manufacturer: String
numberOfUSBPorts: int
--------------------
--------------------
Phone
--------------------
manufacturer: String
numberOfSIMCards: int</code></pre>
</div>
</div></div></td>
</tr>
</tbody>
</table>

## [](#変異および入力種別)変異および入力種別

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

たとえば、この RAML 仕様は ​`/createOrder/{OrderInput}`​ で POST エンドポイントを定義し、スキーマの変異メソッドは ​`createOrder(input:OrderInput)`​ です。

<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 50%;">
<col style="width: 50%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">RAML API 仕様</th>
<th class="tableblock halign-left valign-top">API スキーマ</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">#%RAML 1.0
title: Order API

/createOrder/​{OrderInput}​:
  post:
    displayName: Create Order by OrderInput</code></pre>
</div>
</div></div></td>
<td class="tableblock halign-left valign-top"><div class="content"><div class="listingblock">
<div class="content">
<pre class="highlightjs highlight"><code class="language-none hljs">createOrder(input:OrderInput): Order</code></pre>
</div>
</div></div></td>
</tr>
</tbody>
</table>

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

たとえば、​`/createOrder/{OrderInput}:`​ 変異を使用して ​`OrderInput`​ 入力種別に送信できます。

createOrder (input: “123”) {
  orderId
  customerEmail
  cutomerID
  orderDate
  product
  status
  totalAmount
}

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

- [DataGraph での GraphQL クエリおよび変異の作成](https://docs.mulesoft.com/jp/datagraph/write-queries-tutorial)
- [Anypoint DataGraph クイックスタートガイド](https://docs.mulesoft.com/jp/datagraph/datagraph-qsg)