n8nを使って業務自動化を進めていると、様々なWebサービスとの連携が必要になりますよね。
特に最近増えているのが、柔軟なデータ取得が可能なGraphQL APIです。
しかし、REST APIとは少し勝手が違うため、「n8nのHTTP Requestノードでどう設定すればいいの?」と戸惑った経験はありませんか。
この記事では、そんなあなたのために、n8nのHTTP Requestノードを使ってGraphQL APIを叩くための具体的な設定方法を、基本から応用まで徹底的に解説します。
この記事を読み終える頃には、あなたはGraphQL APIを自在に操り、n8nによる自動化の可能性をさらに広げられるようになっているはずです。
(この記事は2025年11月時点の情報に基づいています。)
n8nでGraphQLを扱うための基礎知識
まず、n8nでGraphQL APIを扱う前に、REST APIとの違いと、HTTP Requestノードにおける基本的な考え方をおさらいしておきましょう。この基本を理解するだけで、設定時のつまずきを大幅に減らすことができます。
GraphQLとREST APIの根本的な違い
GraphQLとREST APIは、どちらもAPIの設計思想ですが、いくつかの重要な違いがあります。
- エンドポイントの数: REST APIが機能ごと(例: /users, /posts)に複数のエンドポイントを持つのに対し、GraphQLは通常、単一のエンドポイント(例: /graphql)を持ちます。すべてのリクエストはこの単一のエンドポイントに送られます。
- データ取得の柔軟性: REST APIでは、サーバー側で定義されたデータ構造がそのまま返ってきます。そのため、不要なデータまで取得してしまったり、逆に複数のAPIを叩かないと欲しい情報が揃わなかったりします。一方、GraphQLはクライアント側が必要なデータだけをリクエストできるのが最大の特徴です。これにより、効率的なデータ通信が実現できます。
- HTTPメソッド: REST APIでは、データの取得(GET)、作成(POST)、更新(PUT/PATCH)、削除(DELETE)といった操作をHTTPメソッドで使い分けます。しかし、GraphQLでは、データの取得(Query)もデータの変更(Mutation)も、すべてPOSTメソッドで行うのが一般的です。
この「単一エンドポイント」と「常にPOSTメソッド」という2点が、n8nでGraphQLを扱う上で非常に重要なポイントとなります。
n8nにおけるGraphQLリクエストの基本形
上記の特性から、n8nのHTTP RequestノードでGraphQL APIを叩く際の基本設定は以下のようになります。
- Method: 必ず
POSTを選択します。 - URL: 連携したいサービスのGraphQLエンドポイントURL(例:
https://api.example.com/graphql)を指定します。 - Body Content Type:
JSONを選択します。 - Body: ここに、実行したいGraphQLのクエリをJSON形式で記述します。
REST APIに慣れていると、データを取得するだけなのにPOSTメソッドを使うことに違和感を覚えるかもしれませんが、これがGraphQLの標準的な作法です。操作内容はすべてリクエストの「Body」で表現する、と覚えておきましょう。
【実践】HTTP RequestノードでGraphQLクエリを送信する
それでは、実際にHTTP Requestノードを設定して、GraphQLのクエリを送信してみましょう。ここでは、架空のブログサービスのAPIから記事タイトルの一覧を取得する、というシナリオで解説します。
ステップ1: HTTP Requestノードの基本設定
まず、ワークフローにHTTP Requestノードを追加し、基本的な設定を行います。
- Authentication: APIが認証を必要としない場合は
Noneで構いません。認証が必要な場合は、後述する「Header Auth」などを使用します。(今回はまずNoneで進めます) - Method:
POSTを選択します。 - URL: GraphQLエンドポイントのURLを入力します。
- Options > Body Content Type:
JSONを選択します。
この時点では、まだリクエストの中身が空なので、次に進んでクエリを記述します。
ステップ2: BodyにGraphQLクエリを記述する
ここが最も重要な部分です。HTTP Requestノードの「Body」フィールドに、送信したいクエリをJSON形式で記述します。GraphQLのクエリは、query というキーを持つJSONオブジェクトとして送信するのが一般的です。
例えば、「すべての記事のタイトルを取得する」というクエリは以下のようになります。
{ "query": "query { posts { nodes { title } } }"
}これをそのまま「Body」フィールドに貼り付けます。n8nのExpression Editorを使えば、複数行のクエリも整形しながら入力できるので便利です。
ポイント: GraphQLクエリ自体はただの文字列です。そのため、JSONの値として正しく認識されるように、全体をダブルクォーテーションで囲む必要はありません。上記の例のように、JSONオブジェクトの中に直接クエリを記述します。
ステップ3: ワークフローを実行し結果を確認する
設定が完了したら、ノードの「Execute Node」ボタンを押してワークフローを実行してみましょう。成功すれば、OutputエリアにAPIからのレスポンスが表示されます。
GraphQLのレスポンスは通常、data というキーの下に結果が格納されています。以下のようなJSONデータが返ってくるはずです。
{ "data": { "posts": { "nodes": [ { "title": "最初の記事タイトル" }, { "title": "次の記事タイトル" } ] } }
}このように、n8nは返ってきたJSONを自動的にパースしてくれるため、後続のノード(例: SetノードやSpreadsheetノード)で {{ $json.data.posts.nodes }} のようにExpressionを使えば、取得したデータを簡単に加工・利用できます。これがn8nとAPI連携の醍醐味です。
【応用編】変数を使った動的なクエリとミューテーション
静的なクエリを送信できるようになったら、次はn8nの真骨頂である「動的なリクエスト」に挑戦しましょう。前のノードの結果を使ってクエリを組み立てたり、データの取得だけでなく登録・更新(Mutation)を行ったりする方法を解説します。
n8nのExpressionでクエリを動的に生成する
例えば、「Google Sheetsから読み込んだIDの記事を取得する」といったワークフローを考えます。この場合、HTTP Requestノードのクエリ部分を動的に生成する必要があります。
これには、GraphQLの「Variables」という機能を使うのが最もスマートで安全な方法です。リクエストボディに query と variables の2つのキーを持たせます。
- query: クエリ定義部分で、どの変数を受け取るかを
query($variableName: Type!)のように宣言します。 - variables: 実際に渡す値をJSONオブジェクトで指定します。この値の部分にn8nのExpressionを埋め込みます。
例えば、前のノードで postId という値が渡ってくるとします。その場合、Bodyフィールドは以下のようになります。
{ "query": "query($id: ID!) { post(id: $id) { id title content } }", "variables": { "id": "{{ $json.postId }}" }
}この方法のメリットは、クエリのテンプレートを固定にしたまま、渡す値だけを安全に変更できる点です。クエリ文字列を直接結合する方法よりも、インジェクション攻撃のリスクを減らし、クエリの可読性を高めることができます。
Mutationでデータを登録・更新する
GraphQLでは、データの作成や更新といった変更操作を「Mutation」と呼びます。n8nからの実行方法も、Queryとほとんど同じです。
例えば、「新しいブログ記事を投稿する」というMutationを考えます。タイトルと本文を前のノードから受け取って投稿するシナリオです。この場合もVariablesを使うのがおすすめです。
Bodyフィールドの設定例:
{ "query": "mutation($title: String!, $content: String!) { createPost(input: {title: $title, content: $content}) { post { id slug } } }", "variables": { "title": "{{ $json.newTitle }}", "content": "{{ $json.newContent }}" }
}query の部分が mutation に変わっている点に注目してください。基本的な構造はQueryの時と同じです。これにより、例えば「Google Formに投稿された内容をWordPressに自動投稿する」といった高度な自動化ワークフローもn8nで実現可能になります。
認証(Header Auth)の設定方法
実世界の多くのGraphQL APIは、認証を必要とします。最も一般的なのが、リクエストヘッダーにAPIキーやトークンを含める方式です。
n8nでは、これを簡単かつ安全に設定できます。
- HTTP Requestノードの Authentication で
Header Authを選択します。 - Name にヘッダー名(例:
Authorization)を入力します。 - Value にヘッダーの値(例:
Bearer YOUR_SECRET_TOKEN)を入力します。
独自の視点: ここで、APIトークンのような機密情報をValueに直接書き込むのはセキュリティ上好ましくありません。代わりに、n8nの Credentials 機能を使うことを強く推奨します。CredentialsにAPIトークンを登録し、Expressionを使って {{ $credential.apiToken }} のように参照することで、ワークフロー内に直接トークンを記述することなく、安全に認証情報を管理できます。
トラブルシューティングとベストプラクティス
最後に、GraphQL API連携でよく遭遇するエラーとその対処法、そしてより安定したワークフローを構築するためのベストプラクティスを紹介します。
よくあるエラーと対処法
- 400 Bad Request: 最もよく見るエラーの一つです。原因のほとんどはリクエストボディの記述ミスです。
- GraphQLのクエリ構文が間違っている(閉じ括弧の不足など)。
- BodyフィールドのJSON形式が崩れている。
- Variablesで指定した型と、クエリ定義の型が一致していない。
まずは、GraphiQLやPostmanのようなAPIテストツールでクエリが正しく動作するかを確認しましょう。
- 401/403 Unauthorized: 認証エラーです。
- Header Authのトークンが間違っている、または有効期限が切れている。
- Credentialsから参照している情報が古い。
APIキーやトークンが正しいか、有効期限は問題ないかを確認してください。
- 200 OKなのにデータが取れない: レスポンスコードは200でも、GraphQLレベルでエラーが発生している場合があります。レスポンスボディの中に
errorsというキーがないか確認してください。ここを見れば、サーバー側で何が問題だったのか(例: 指定したIDのデータが存在しない)を知る手がかりが得られます。
GraphQL連携のベストプラクティス
- 事前にAPIツールでテストする: n8nで設定する前に、GraphiQL、Altair、PostmanなどのGUIツールを使ってクエリやミューテーションをテストしましょう。問題の切り分けが格段に楽になります。
- Credentialsを活用する: APIキーやトークンは必ずn8nのCredentials機能で管理し、ワークフローの再利用性とセキュリティを高めましょう。
- Variablesを積極的に使う: 動的な値を扱う際は、文字列結合でクエリを組み立てるのではなく、GraphQLのVariables機能を使いましょう。安全でメンテナンス性の高いワークフローになります。
- Error Workflowを設定する: HTTP Requestノードには「Continue On Fail」という設定があります。これを有効にし、エラーが発生した場合の処理(例: Slackやメールで通知する)を後続のノードで定義しておくことで、自動化処理が予期せず停止するのを防ぎ、安定した運用が可能になります。
まとめ
この記事では、n8nのHTTP Requestノードを使ってGraphQL APIを操作するための具体的な方法を解説しました。重要なポイントをもう一度おさらいしましょう。
- GraphQLのリクエストは、メソッドをPOST、Body Content TypeをJSONに設定する。
- 実行したい操作(QueryやMutation)は、BodyにJSON形式で記述する。
- 動的な値は、文字列結合ではなくGraphQLのVariables機能とn8nのExpressionを組み合わせて安全に扱う。
- APIキーなどの認証情報は、n8nのCredentials機能でセキュアに管理する。
GraphQLを使いこなせるようになると、これまで以上に柔軟で効率的なデータ連携が可能になり、n8nによる自動化のレベルが飛躍的に向上します。n8nの基本的な使い方や、さらに高度な活用法に興味がある方は、ぜひ「n8n完全ガイド記事」も合わせてご覧ください。あなたの自動化レベルを一段階引き上げるヒントが満載です。
この記事を読んで、n8nのパワフルな連携機能を試してみたくなった方も多いのではないでしょうか。n8nはクラウド版なら無料で始められるプランも用意されています。まずは公式サイトからサインアップして、あなたの最初の自動化ワークフローを作成してみましょう。
