コンテンツにスキップ

http responseノード

http responseノード

概要

http responseノードは、http inノードで受け付けたHTTPリクエストに対して、レスポンスを返すためのノードです。

http inノードを使用して外部からリクエストを受け取った場合、通常はフローの最後にhttp responseノードを接続し、呼び出し元に処理結果を返します。

例えば、Webhookを受け付けた後に「受付しました」と返したり、Webフォームの送信後に完了メッセージを返したり、APIの処理結果をJSON形式で返したりする場合に使用します。

http responseノード設定画面

具体的な活用例(Webhookの受付結果を返す)

外部システムからWebhookを受け取り、処理結果をレスポンスとして返す例です。

フローのイメージ図

http responseノードのフローイメージ

① http inノードでリクエストを受け付ける

まず、http inノードで外部システムからのリクエストを受け付けます。

例:

  • メソッド:POST
  • URL:/webhook/alert

このURLに外部システムからリクエストが送信されると、フローが実行されます。

② レスポンス内容を設定する

http responseノードで返す内容は、前段のノードで msg.payload や msg.statusCode に設定します。 例えば、functionノードでは以下のように設定します。

msg.statusCode = 200;
msg.payload = {
    result: "success",
    message: "受付しました"
};
return msg;

changeノードを使う場合は、「値の代入」で msg.statusCode と msg.payload にそれぞれ値を設定します。

③ http responseノードで応答を返す

http responseノードへ渡すことで、呼び出し元にHTTPレスポンスを返します。

このように、http responseノードは、http inノードで受け付けたリクエストに対して、処理結果を返す役割を持ちます。

設定項目一覧

必須 項目名 説明
名前 フローエディター上で表示されるノード名を任意で指定できます。
ステータスコード 返却するHTTPステータスコードを指定します。指定した場合は msg.statusCode より優先されます。空欄の場合は msg.statusCode、それも未指定の場合は 200 が使用されます。
ヘッダ レスポンスに付与するHTTPヘッダーを設定します。「追加」ボタンで複数設定できます。

ステータスコードについて

ステータスコードでは、呼び出し元に返すHTTPステータスコードを指定できます。

ノードの設定画面で固定のステータスコードを指定することもできますし、ノードの設定を空欄にしたうえで、前段のノードで msg.statusCode を設定して動的に変更することもできます。 ノードの設定画面とmsg.statusCodeの両方を設定した場合は、ノードの設定画面の値が使用されます。

設定例:

msg.statusCode = 200;
msg.payload = "受付しました";
return msg;

この場合、HTTPステータスコード 200 でレスポンスを返します。

代表的なステータスコードは以下です。

ステータスコード 意味 主な利用例
200 OK 正常に処理できた場合
201 Created データ作成が完了した場合
302 Found 別のURLへリダイレクトさせる場合
400 Bad Request 入力内容やリクエスト形式に問題がある場合
401 Unauthorized 認証が必要、または認証に失敗した場合
403 Forbidden 権限がない場合
404 Not Found 対象が見つからない場合
500 Internal Server Error サーバー側の処理でエラーが発生した場合

レスポンス本文について

レスポンス本文として返す内容は、msg.payload に設定します。

文字列を返す例

msg.statusCode = 200;
msg.payload = "受付しました";
return msg;

この場合、呼び出し元には文字列として「受付しました」が返されます。 ヘッダーを指定しない場合、文字列は Content-Type: text/html として返されます。プレーンテキストとして返したい場合は、ヘッダーに Content-Type: text/plain を指定してください。

JSON形式で返す例

msg.statusCode = 200;
msg.payload = {
    result: "success",
    message: "処理が完了しました"
};
return msg;

msg.payload にオブジェクトを設定した場合、Content-Type: application/json のJSON形式のレスポンスとして返されます。

ヘッダについて

http responseノードでは、レスポンスヘッダーを設定できます。 ヘッダーは、レスポンスの形式やリダイレクト先などを指定する場合に使用します。

ヘッダー名 設定例 用途
Content-Type application/json JSON形式で返す場合
Content-Type text/plain テキスト形式で返す場合
Content-Type text/html HTML形式で返す場合
Location /complete リダイレクト先を指定する場合(ステータスコードを 302 などにする必要があります)

ノード設定画面で指定したヘッダーのほか、前段のノードで msg.headers を設定してヘッダーを渡すこともできます。 同じヘッダーがノード設定側と msg.headers 側の両方にある場合は、ノード設定側の値が優先されます。

リダイレクトさせる場合

Location ヘッダーを指定するだけでは、ステータスコードが 200 のままのためリダイレクトされません。 リダイレクトさせる場合は、ステータスコードを 302(または 301)に設定してください。

前段のノードで msg.cookies を設定すると、レスポンスにCookieを含めることができます。 Cookieを扱う場合は、値の取り扱いやセキュリティ設定に注意してください。

通常のWebhook受付やAPIレスポンスでは、Cookieを使用しないケースも多いため、必要な場合のみ設定してください。

利用例

例1:正常受付を返す

Webhookやフォーム送信を受け付けた後、正常に受付したことを返す例です。

例1:正常受付を返す

msg.statusCode = 200;
msg.payload = {
    result: "success",
    message: "受付しました"
};
return msg;

この状態でhttp responseノードへ渡すと、呼び出し元へ正常受付のレスポンスを返せます。

例2:入力エラーを返す

必要な項目が不足している場合などに、エラーを返す例です。

例2:入力エラーを返す

msg.statusCode = 400;
msg.payload = {
    result: "error",
    message: "必須項目が不足しています"
};
return msg;

呼び出し元はステータスコードとレスポンス本文をもとに、入力内容に問題があったことを判断できます。

例3:HTMLを返す

簡単な完了画面をHTMLで返す例です。

例3:HTMLを返す

msg.statusCode = 200;
msg.headers = {
    "Content-Type": "text/html"
};
msg.payload = "<html><body><h1>送信が完了しました</h1></body></html>";
return msg;

この状態でhttp responseノードへ渡すと、ブラウザ上にHTMLとして表示できます。

例4:処理エラーを返す

フロー内の処理でエラーが発生した場合に、呼び出し元へエラーを返す例です。

例4:処理エラーを返す

msg.statusCode = 500;
msg.payload = {
    result: "error",
    message: "処理中にエラーが発生しました"
};
return msg;

catchノードと組み合わせると、フロー内でエラーが発生したときにこのレスポンスを返せます。 外部システムと連携する場合は、成功時だけでなく、エラー時のレスポンスも設計しておくと、呼び出し元が結果を判断しやすくなります。

注意点

http inノードと組み合わせて使用する

http responseノードは、http inノードで受け付けたリクエストに対してレスポンスを返すためのノードです。 そのため、基本的にはhttp inノードと組み合わせて使用します。

http inノード → 処理ノード → http responseノード

msg.res が必要

http responseノードがレスポンスを返すには、http inノードから渡された msg.res が必要です。 injectノードなどhttp inノード以外から始まるフローや、途中で msg.res が失われた場合、http responseノードはレスポンスを返せず、デバッグタブに「応答がありません」という警告が表示されます。

http responseノードを忘れない

http inノードで受け付けたリクエストに対してhttp responseノードで応答を返さない場合、呼び出し元が応答待ちになり、タイムアウトになります。 http inノードを使用する場合は、基本的にフローの最後にhttp responseノードを配置してください。

1つのリクエストに対して複数回レスポンスを返さない

1つのHTTPリクエストに対して、レスポンスは1回だけ返せます。 同じメッセージが複数のhttp responseノードへ流れた場合、最初の1回だけがレスポンスとして返され、2回目以降は「Cannot set headers after they are sent to the client」というエラーになります。 複数の分岐先にそれぞれhttp responseノードを配置する場合は、同じメッセージが複数のhttp responseノードへ流れないように注意してください。

ステータスコードを適切に設定する

すべてのレスポンスを 200 で返してしまうと、呼び出し元が成功・失敗を判断しづらくなります。 正常時、入力エラー時、認証エラー時、処理エラー時など、結果に応じて適切なステータスコードを返してください。

レスポンス形式に注意する

JSONを返すのか、テキストを返すのか、HTMLを返すのかによって、msg.payload や Content-Type の設定が変わります。 呼び出し元が期待している形式に合わせて、レスポンス本文とヘッダーを設定してください。

機密情報をレスポンスに含めない

APIキー、パスワード、トークン、個人情報などを誤ってレスポンス本文に含めないよう注意してください。 特に、エラー発生時に内部情報をそのまま返すと、不要な情報が外部へ公開される可能性があります。

関連ノード

  • http inノード:外部からHTTPリクエストを受け付ける場合に使用します。
  • RS http inノード:アクセス制限が可能なロボシュタイン専用のhttp inノードです。http responseノードと組み合わせて使用できます。
  • changeノード:レスポンス本文やステータスコードを設定する場合に使用します。
  • functionノード:条件に応じてレスポンス内容を作成する場合に使用します。
  • switchノード:受信内容や処理結果に応じてレスポンスを分岐する場合に使用します。
  • templateノード:HTMLやテキストのレスポンス本文を作成する場合に使用します。
  • debugノード:レスポンス前の msg.payload や msg.statusCode を確認する場合に使用します。
  • catchノード:処理中のエラーを検知し、エラーレスポンスへつなげる場合に使用します。

まとめ

http responseノードは、http inノードで受け付けたHTTPリクエストに対して、レスポンスを返すためのノードです。

レスポンス本文は msg.payload、HTTPステータスコードはノード設定のステータスコードまたは msg.statusCode、レスポンスヘッダーはノード設定または msg.headers をもとに返します。

http inノードを使用するフローでは、基本的にhttp responseノードを最後に配置し、呼び出し元へ適切な処理結果を返すようにしてください。

特に、msg.res が必要であること、レスポンスを返し忘れないこと、1つのリクエストに対して複数回レスポンスを返さないことに注意してください。