HTTP リクエストを行う

HTTP 呼び出しを行い、そのレスポンスを変数に割り当てるワークフロー ステップを定義できます。たとえば、HTTP リクエストを介して Cloud Functions や Cloud Run などの Google Cloud サービスを呼び出すことができます。

HTTP エンドポイントの呼び出し

HTTP リクエストは、このタイプのステップを使用して行えます。リクエストは、HTTP と HTTPS の両方がサポートされています。最も一般的な HTTP リクエスト メソッドには、呼び出しショートカット(http.gethttp.post など)がありますが、call フィールドを http.request に設定し、method フィールドでリクエストのタイプを指定することであらゆるタイプの HTTP リクエストを作成できます。

YAML

  - STEP_NAME:
      call: {http.delete|http.get|http.patch|http.post|http.put|http.request}
      args:
          url: URL_VALUE
          [method: REQUEST_METHOD]
          [headers:
              KEY1:VALUE1
              ...]
          [body:
              KEY2:VALUE2
              ...]
          [query:
              KEY3:VALUE3
              ...]
          [auth:
              type:{OIDC|OAuth2}]
          [timeout: VALUE_IN_SECONDS]
      [result: RESPONSE_VALUE]
    

JSON

  [
    {
      "STEP_NAME": {
        "call": "{http.delete|http.get|http.patch|http.post|http.put|http.request}",
        "args": {
          "url": "URL_VALUE",
          ["method": "REQUEST_METHOD",]
          ["headers": {"KEY1":"VALUE1",
          ...
          },]
          ["body": {"KEY2":"VALUE2",
          ...
          },]
          ["query": {"KEY3":"VALUE3",
          ...
          },]
          ["auth": {"type":"{OIDC|OAuth2}"},]
          ["timeout": "VALUE_IN_SECONDS"]
        },
        ["result": "RESPONSE_VALUE"]
      }
    }
  ]
    
  • callー必須。HTTP リクエストには、次のいずれかを使用します。
    • http.delete
    • http.get
    • http.patch
    • http.post
    • http.put
    • http.request
  • urlー必須。リクエストの送信先 URL。
  • method - 呼び出しタイプが http.request の場合は必須です。 使用する HTTP リクエスト メソッドのタイプ。次に例を示します。
    • GET
    • POST
    • PATCH
    • DELETE
  • headers - 省略可。API への入力を与えるフィールド。

    Content-Type ヘッダーを使用してリクエスト本文のメディアタイプを指定する場合、次のタイプのみがサポートされます。

    • application/json または application/type+json - マッピングにする必要があります。
    • application/x-www-form-urlencoded - エンコードされていない文字列にする必要があります
    • text/type - 文字列にする必要があります

    User-Agent ヘッダーを使用してリクエストしているユーザー エージェントを識別する場合は、次が適用されます。

    • デフォルト値は GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs) です。
    • 値が指定されている場合、GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs) はその値に追加されます。

      たとえば、User-Agent: "MY_USER_AGENT_VALUE" が指定されている場合、HTTP リクエスト ヘッダーは次のようになります(指定された値と追加されたデフォルト値の間にスペースがあります)。

      MY_USER_AGENT_VALUE GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
  • body - 省略可。API への入力を与えるフィールド。
  • query - 省略可。API への入力を与えるフィールド。
  • auth - 省略可。呼び出される API で認証が必要な場合は必須。詳細については、認証済みリクエストの実行をご覧ください。
  • timeout - 省略可。例外がスローされるまでにリクエストを実行できる時間(秒)。最大値は 1,800 秒です。
  • result - 省略可。HTTP 呼び出しステップの結果が保存される変数名。

変数に保存された HTTP レスポンス データにアクセスする

application/json 型のレスポンスが変数に保存されると、JSON レスポンスはレスポンスの本文としてアクセスするマップに変換されます。ワークフローには、このデータにアクセスするパーサーが組み込まれています。HTTP レスポンスのフィールドにアクセスするには、次の構文を使用します。

${VARIABLE_NAME.body|code.PATH_TO_FIELD}
  • VARIABLE_NAME: JSON レスポンスを保存したワークフロー変数の名前。
  • body: HTTP レスポンスの本文には、body フィールドを使用してアクセスします。
  • code: HTTP レスポンス コードには、code フィールドを使用してアクセスします。
  • PATH_TO_FIELD: アクセスする JSON レスポンス内のフィールドへのパス。このフィールドの名前を単純にすることも、フィールドがオブジェクト内にネストされている場合は object1.object2.field の形式にすることもできます。

たとえば、API が {"age":50} を返し、ワークフローがそのレスポンスを age_response という変数に格納する場合、次の例では age フィールドの値が返されます。この場合は、50 です。

age_response.body.age

ここでは、構文の例を示します。

API 呼び出しのレスポンスを割り当てる

このワークフローでは、サンプル API を呼び出します。 返された曜日は、Wikipedia API に渡されます。今日の曜日に関する Wikipedia の関連記事が返されます。

YAML

- getCurrentTime:
    call: http.get
    args:
      url: https://us-central1-workflowsample.cloudfunctions.net/datetime
    result: currentTime
- readWikipedia:
    call: http.get
    args:
      url: https://en.wikipedia.org/w/api.php
      query:
        action: opensearch
        search: ${currentTime.body.dayOfTheWeek}
    result: wikiResult
- returnResult:
    return: ${wikiResult.body[1]}

JSON

[
  {
    "getCurrentTime": {
      "call": "http.get",
      "args": {
        "url": "https://us-central1-workflowsample.cloudfunctions.net/datetime"
      },
      "result": "currentTime"
    }
  },
  {
    "readWikipedia": {
      "call": "http.get",
      "args": {
        "url": "https://en.wikipedia.org/w/api.php",
        "query": {
          "action": "opensearch",
          "search": "${currentTime.body.dayOfTheWeek}"
        }
      },
      "result": "wikiResult"
    }
  },
  {
    "returnResult": {
      "return": "${wikiResult.body[1]}"
    }
  }
]

外部 HTTP POST リクエストを行う

このサンプルは、外部 HTTP エンドポイントに POST リクエストを行います。

YAML

- get_message:
    call: http.post
    args:
      url: https://www.example.com/endpoint
      body:
        some_val: "Hello World"
        another_val: 123
    result: the_message
- return_value:
    return: ${the_message.body}

JSON

[
  {
    "get_message": {
      "call": "http.post",
      "args": {
        "url": "https://www.example.com/endpoint",
        "body": {
          "some_val": "Hello World",
          "another_val": 123
        }
      },
      "result": "the_message"
    }
  },
  {
    "return_value": {
      "return": "${the_message.body}"
    }
  }
]

ヘッダーを持つ外部 HTTP GET リクエストを行う

このサンプルでは、カスタム ヘッダーで HTTP GET リクエストを行います。カスタム ヘッダーの定義を指定することで、他の種類の HTTP リクエストを行うこともできます。

YAML

- get_message:
    call: http.get
    args:
      url: https://www.example.com/endpoint
      headers:
        Content-Type: "text/plain"
      query:
        some_val: "Hello World"
        another_val: 123
    result: the_message
- return_value:
    return: ${the_message.body}

JSON

[
  {
    "get_message": {
      "call": "http.get",
      "args": {
        "url": "https://www.example.com/endpoint",
        "headers": {
          "Content-Type": "text/plain"
        },
        "query": {
          "some_val": "Hello World",
          "another_val": 123
        }
      },
      "result": "the_message"
    }
  },
  {
    "return_value": {
      "return": "${the_message.body}"
    }
  }
]

Cloud Functions へリクエストする際に OIDC を使用して認証する

このサンプルでは、URL を指定した後、ワークフロー定義の args セクションに auth セクションを追加することで、OIDC を使用して HTTP リクエストを行います。

YAML

- call_my_function:
    call: http.post
    args:
      url: https://us-central1-myproject123.cloudfunctions.net/myfunc1
      auth:
        type: OIDC
      body:
        some_val: "Hello World"
        another_val: 123
    result: the_message
- return_value:
    return: ${the_message.body}

JSON

[
  {
    "call_my_function": {
      "call": "http.post",
      "args": {
        "url": "https://us-central1-myproject123.cloudfunctions.net/myfunc1",
        "auth": {
          "type": "OIDC"
        },
        "body": {
          "some_val": "Hello World",
          "another_val": 123
        }
      },
      "result": "the_message"
    }
  },
  {
    "return_value": {
      "return": "${the_message.body}"
    }
  }
]

次のステップ