GraphQL

このページは機械翻訳により提供されています。翻訳内容と英語版に相違がある場合は、英語版が優先されます。

GraphQLは、API向けのデータクエリおよび操作言語です。 GraphQLコネクターを使用すると、GraphQL APIをサポートする任意のアプリケーションからレコードをクエリおよび変更できます。

GraphQLコネクターは、アプリケーションスキーマを動的にイントロスペクトして、使用可能なリソースと操作を判断します。 入力フィールドと出力フィールドを自動的に生成します。 これにより、コードを記述せずにWorkato UIでGraphQLクエリとミューテーションを構築できます。

カスタムGraphQLクエリまたはドキュメントが既にある場合は、カスタムアクションを使用できます。 GraphQLコネクターはクエリを解析し、フィールドをスキーマに照らして検証し、対応する入力フィールドと出力フィールドを自動生成します。

GraphQLの動画を視聴

GraphQLコネクターを使用するタイミング

次の場合にGraphQLコネクターを使用します:

  • 統合する予定のアプリケーションがGraphQLエンドポイントを提供している
  • そのアプリケーションで使用できるネイティブWorkatoコネクターがない
  • RESTエンドポイントを使用せずに、データを柔軟にクエリまたは変更したい

既知の制限

GraphQLコネクターには次の制限があります:

  • バイナリファイルまたは添付ファイルのアップロードはサポートされていません
  • GraphQLのsubscription操作タイプはサポートされていません

前提条件

GraphQLに接続する前に、次の前提条件を満たしてください:

コミュニティライブラリからGraphQLコネクターをダウンロード

次の手順を実行して、コミュニティライブラリからコネクターをインストールします:

1

レシピエディターを開き、コネクターを検索します。 または、コミュニティライブラリでコネクターを検索できます。

レシピエディターで検索レシピエディターでコミュニティコネクターを検索

2

インストールするコミュニティコネクターを選択します。

3

インストールをクリックして、コミュニティライブラリからコネクターをインストールします。

インストールをクリックインストールをクリック

4

Release connector(コネクターをリリース)を選択します。 または、ワークスペースにリリースする前にコネクターコードを確認して変更するには、コードを確認を選択します。

コネクターをリリースコネクターをリリース

5

コネクターに加えた変更を要約してから、リリースをクリックし、ワークスペースのコラボレーターがレシピでコネクターを使用できるようにします。

リリースの確認ダイアログリリースの確認ダイアログ

必要な認証情報を取得

各GraphQL APIは独自の認証要件を定義します。 アプリケーションのAPIドキュメントを確認して、サポートされている認証方法と、必要な認証情報を取得する方法を判断します。 一般的なオプションは次のとおりです:

認証方法使用するタイミング必要な認証情報
なしAPIが公開されており、認証を必要としない場合に適用できますなし
BasicAPIでユーザー名とパスワードが必要な場合に使用します。 Workatoはこれらの認証情報をHTTP Authorizationヘッダーにエンコードします
  • ユーザー名
  • パスワード
ヘッダーAPIでカスタムヘッダー内のキーまたはトークンが必要な場合に使用します
  • ヘッダー認可、例: Authorization: Bearer <token>
クエリパラメーター認証がURLベースのトークンまたはキーに依存する場合に使用します
  • クエリパラメーター認可、例: ?api_key=12345
OAuth 2.0(クライアント認証情報)サーバー間認証に使用します。 Workatoはクライアント認証情報を使用してアクセストークンをリクエストします
  • OAuth 2.0トークンURL
  • クライアントID
  • クライアントシークレット
  • OAuth 2.0スコープ
OAuth 2.0(認可コード付与)ログインリダイレクトを通じてエンドユーザー認可が必要な場合に使用します。 Workatoがリダイレクトとトークン交換を管理します
  • OAuth 2.0認可URL
  • OAuth 2.0トークンURL
  • クライアントID
  • クライアントシークレット
  • OAuth 2.0スコープ
OAuth 2.0(リソースオーナーパスワード)APIがユーザー名とパスワードから直接トークンを発行する場合に使用します
  • OAuth 2.0トークンURL
  • クライアントID
  • クライアントシークレット
  • ユーザー名
  • パスワード
  • OAuth 2.0スコープ

WorkatoをOAuthクライアントとして登録

OAuth 2.0コネクションでは、WorkatoをOAuthクライアントとして登録する必要があります。

WorkatoをOAuthクライアントとして登録するには、次の手順を実行します:

1

アプリケーションの開発者またはAPI設定ページに移動します。

2

新しいOAuthクライアントまたはアプリケーションを作成します。

3

リダイレクトURIを次のように設定します: https://www.workato.com/oauth/callback

4

アプリケーションからクライアントIDクライアントシークレット認可URLトークンURLをコピーします。

資格情報を検証

コネクションを確立する前に、curlやPostmanなどのツールを使用して認証情報をテストし、認証情報が有効であることを確認します。

次のことができる必要があります:

  • /graphqlエンドポイントを正常に呼び出す
  • 有効なJSONレスポンスを受信する
  • アクセストークンを取得する(OAuthコネクションの場合)

コネクション設定

WorkatoでGraphQLコネクションを作成するには、次の手順を実行します:

1

作成 > コネクションをクリックするか、Cを2回押します。

2

GraphQLコネクターを検索して選択します。

3

コネクション名を入力します。

4

場所ドロップダウンメニューを使用して既存のプロジェクトを選択するか、新しいプロジェクトを作成します。

5

コネクションタイプを選択します:

  • 直接コネクションにはCloudを選択します。
  • オンプレミスコネクションにはオンプレミスグループを選択します。
6

GraphQLエンドポイントURLを入力します。例: https://api.example.com/graphql。 パスが指定されていない場合、デフォルトで/graphqlが使用されます。

7

認証方法ドロップダウンメニューを使用して認証タイプを選択し、選択内容に必要な認証情報を入力します:

8

任意です。 詳細設定を展開してスキーマ制限を設定します:

  • スキーマ深度制限max_schema_depth)は、フィールドの最大ネストレベルを制御し、コネクターがオブジェクトフィールドを展開する深さのレベル数を制限します。
  • スキーマ再帰制限max_recursion_depth)は、同じタイプがパス内に出現できる回数を制御し、タイプが自身を参照する場合(循環参照)の無限ループを防ぎます。

スキーマが非常に大きい、または高度にネストされている場合を除き、これらの値はデフォルトのままにします。 詳細については、詳細設定セクションを参照してください。

9

任意です。 アプリケーションで必要な場合は、オプションヘッダーを展開して設定します。

10

接続をクリックして認証情報を検証し、コネクションを保存します。

GraphQLに接続GraphQLコネクションを設定

コネクションに成功すると、Workatoに確認メッセージが表示されます。 コネクションに失敗した場合は、エンドポイントURL、認証の詳細、および権限を確認します。


詳細設定

GraphQLコネクターには、スキーマ内で深くネストされたフィールドの展開方法を制御する2つの詳細オプションがあります:

  • スキーマ深度制限max_schema_depth): スキーマ内のフィールドの最大ネストレベルを制御します。 デフォルトは5です。
  • スキーマ再帰制限max_recursion_depth): 無限ループを防ぐため、同じタイプがパス内に出現できる回数を制限します。 デフォルトは5です。

スキーマ設定の調整

Workatoでは、ほとんどのユースケースに適しているデフォルト設定から始めて、その後で調整することをお勧めします。 スキーマ設定を調整するときは、次のプラクティスに従うことをお勧めします:

  • 値を高くするとフィールド数が指数関数的に増加する可能性があるため、制限を段階的に増やします
  • スキーマごとに動作が異なるため、使用するAPIでこれらの設定をテストします

次の状況でスキーマ設定を調整できます:

制限を増やす場合:

  • 深くネストされたデータ構造が必要である
  • スキーマに正当なネストレベルが多数ある
  • パフォーマンスの問題が発生していない
  • デフォルトの深度を超えるフィールドにアクセスする必要がある

制限を減らす場合:

  • スキーマ生成が遅すぎる
  • UIに表示されるフィールドが多すぎて、移動が困難である
  • タイムアウトエラーが発生する
  • 最上位または浅いデータ構造のみが必要である

スキーマ例

次の例では、深度制限と再帰制限がスキーマ展開をどのように制御するかを示します。

深度制限の例

深度制限は、コネクターが展開するネストのレベル数を制御します。 ネストされた各オブジェクトによって、深度が1レベル追加されます。

スキーマ例:

graphql
type User {
  id: Int
  name: String
  profile: Profile
}

type Profile {
  bio: String
  settings: Settings
}

type Settings {
  theme: String
  preferences: Preferences
}

type Preferences {
  language: String
  advanced: Advanced
}

type Advanced {
  debug: Boolean
}

max_schema_depth = 2の場合:

User (depth 0)
├─ id: Int                    ✓ Included
├─ name: String               ✓ Included
└─ profile: Profile (depth 1)
   ├─ bio: String             ✓ Included
   └─ settings: Settings (depth 2)
      ├─ theme: String        ✓ Included
      └─ preferences (depth 3) ✗ STOPPED - Exceeds depth limit

結果: 深度2レベルまでのフィールドのみが表示されます。


再帰制限の例

再帰制限は、同じ型が1つのパス内に出現できる回数を制御します。 これにより、型が自身を参照する場合や循環依存関係を作成する場合に、無限ループを防ぎます。

循環参照を含むスキーマ例:

graphql
type User {
  id: Int
  name: String
  friends: [User]  # Self-reference
  posts: [Post]
}

type Post {
  title: String
  author: User     # References back to User
}

max_recursion_depth = 2の場合:

User (count: 0)
├─ id: Int
├─ name: String
├─ friends: [User] (count: 1)
│  ├─ id: Int
│  ├─ name: String
│  ├─ friends: [User] (count: 2) ✗ STOPPED - User seen 2 times
│  └─ posts: [Post]
│     ├─ title: String
│     └─ author: User (count: 2) ✗ STOPPED - User seen 2 times
└─ posts: [Post]
   ├─ title: String
   └─ author: User (count: 1)
      ├─ id: Int
      ├─ name: String
      └─ friends: [User] (count: 2) ✗ STOPPED - User seen 2 times

結果: User型は、展開が停止する前に任意のパス内に最大2回出現できます。


組み合わせ制限の例

両方の制限が有効な場合、いずれかの制限に達するとコネクターは展開を停止します。

max_schema_depth = 3およびmax_recursion_depth = 1の場合:

Invoice (depth: 0, count: 0)
├─ id: Int                              ✓ Included
├─ number: String                       ✓ Included
├─ customer: Business (depth: 1, count: 0)
│  ├─ name: String                      ✓ Included
│  └─ invoices: [Invoice] (depth: 2, count: 1)
│     ├─ id: Int                        ✓ Included
│     ├─ number: String                 ✓ Included
│     └─ customer: Business (depth: 3, count: 1) ✗ STOPPED - Both limits hit
└─ items: [LineItem] (depth: 1)
   ├─ description: String               ✓ Included
   ├─ price: Decimal                    ✓ Included
   └─ product: Product (depth: 2)
      └─ name: String                   ✓ Included

結果: Invoiceの深度が3に達し、Businessが同じパス内で2回確認されると、展開が停止します。

Last updated: