HTTP-Anfrage stellen

Sie können einen Workflowschritt definieren, der einen HTTP-Aufruf durchführt, und die Antwort des Aufrufs einer Variablen zuweisen. Beispielsweise können Sie über eine HTTP-Anfrage einen Google Cloud-Dienst wie Cloud Functions oder Cloud Run aufrufen.

HTTP-Endpunkt aufrufen

Mit diesem Schritt können Sie eine HTTP-Anfrage stellen. Sowohl HTTP- als auch HTTPS-Anfragen werden unterstützt. Die gängigsten Methoden für HTTP-Anfragen haben eine Aufrufverknüpfung wie http.get und http.post. Sie können aber eine beliebige Methode verwenden, um Typ der HTTP-Anfrage. Dazu setzen Sie das Feld call auf http.request und geben den Anfragetyp im Feld method an.

YAML

  - STEP_NAME:
      call: HTTP_REQUEST
      args:
          url: URL_VALUE
          method: REQUEST_METHOD
          headers:
              HEADER_KEY:HEADER_VALUE
              ...
          body:
              BODY_KEY:BODY_VALUE
              ...
          query:
              QUERY_KEY:QUERY_VALUE
              ...
          auth:
              type: AUTH_TYPE
              scope: SCOPE
              audience: AUDIENCE
          timeout: TIMEOUT_IN_SECONDS
      result: RESULT_VALUE
    

JSON

  [
    {
      "STEP_NAME": {
        "call": "HTTP_REQUEST",
        "args": {
          "url": "URL_VALUE",
          "method": "REQUEST_METHOD",
          "headers": {"HEADER_KEY":"HEADER_VALUE",
          ...
          },
          "body": {"BODY_KEY":"BODY_VALUE",
          ...
          },
          "query": {"QUERY_KEY":"QUERY_VALUE",
          ...
          },
          "auth": {
            "type":"AUTH_TYPE",
            "scope":"SCOPE",
            "audience":"AUDIENCE"
          },
          "timeout": "TIMEOUT_IN_SECONDS"
        },
        "result": "RESULT_VALUE"
      }
    }
  ]
    

Dabei gilt:

  • HTTP_REQUEST: erforderlich. Verwenden Sie eine der folgenden Optionen für HTTP-Anfragen:
    • http.delete
    • http.get
    • http.patch
    • http.post
    • http.put
    • http.request
  • URL_VALUE: erforderlich. URL, an die die Anfrage gesendet wird.
  • REQUEST_METHOD: erforderlich, wenn Sie den Aufruftyp http.request verwenden. Der zu verwendende HTTP-Anfragetyp. Beispiel:
    • GET
    • POST
    • PATCH
    • DELETE
  • HEADER_KEY:HEADER_VALUE: optional. Header-Felder für die Bereitstellung der API

    Wenn Sie den Medientyp des Anfragetexts mit einem Content-Type-Header angeben, werden nur die folgenden Typen unterstützt:

    • application/json oder application/type+json – muss eine Karte sein
    • application/x-www-form-urlencoded – muss ein nicht codierter String sein
    • text/type — muss ein String sein.

    Wenn Sie einen User-Agent-Header verwenden, um den anfragenden User-Agent zu identifizieren, gilt Folgendes:

    • Der Standardwert ist GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs).
    • Wenn ein Wert angegeben ist, wird GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs) an diesen Wert angehängt.

      Wenn User-Agent: "MY_USER_AGENT_VALUE" beispielsweise angegeben ist, lautet der HTTP-Anfrageheader so (mit einem Leerzeichen zwischen dem angegebenen Wert und dem angehängten Standardwert):

      MY_USER_AGENT_VALUE GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
  • BODY_KEY:BODY_VALUE: optional. Textfelder zur Bereitstellung einer Eingabe für die API Die Struktur kann einer JSON-Nutzlast entsprechen. Beispiel:

    YAML

          body:
            requests:
            - image:
                source:
                  gcsImageUri: ${gsUri}
              features:
              - type: LABEL_DETECTION
              - type: SAFE_SEARCH_DETECTION
              - type: IMAGE_PROPERTIES
        result: imageAnalysisResponse
        

    JSON

    {
      "requests":[
        {
          "image": {
            "source": {
                "gcsUri": "img.png"
            }
          },
          "features": [
            { "type":"LABEL_DETECTION" },
            { "type":"SAFE_SEARCH_DETECTION" },
            { "type":"IMAGE_PROPERTIES" },
          ]
        }
      ]
    }
          
  • QUERY_KEY:QUERY_VALUE: optional. Abfragefelder zur Bereitstellung einer Eingabe für die API
  • AUTH_TYPE: Optional. Erforderlich, wenn die aufgerufene API eine Authentifizierung erfordert. Verwenden Sie entweder OIDC oder OAuth2. Weitere Informationen finden Sie unter Authentifizierte Anfragen stellen.
    • SCOPE: Optional. Begrenzt den Zugriff einer Anwendung auf das Konto eines Nutzers. Kann ein String oder eine Liste von Strings sein.

      Beispiel:

      "https://www.googleapis.com/auth/cloud-platform"

      oder

      ["https://www.googleapis.com/auth/cloud-platform", "scope2", "scope3"]

      Siehe OAuth 2.0-Bereiche für Google APIs.

    • AUDIENCE: Optional. Gibt die Zielgruppe für das OIDC-Token an. Standardmäßig wird er auf den gleichen Wert wie url festgelegt. Sie sollte jedoch auf die Stamm-URL Ihres Dienstes festgelegt werden. Beispiel: https://region-project.cloudfunctions.net/hello_world.
  • TIMEOUT_IN_SECONDS: Optional. Die Dauer in Sekunden, die eine Anfrage ausgeführt werden darf, bevor eine Ausnahme ausgelöst wird. Das Maximum beträgt 1.800 Sekunden.
  • RESULT_VALUE: Optional. Variablenname, in dem das Ergebnis eines HTTP-Aufrufschritts gespeichert ist.

Auf in einer Variable gespeicherte HTTP-Antwortdaten zugreifen

Wenn eine Antwort vom Typ application/json in einer Variablen gespeichert wird, wird die JSON-Antwort in eine Zuordnung konvertiert, auf die Sie als Antworttext zugreifen. Workflows enthalten einen integrierten Parser für den Zugriff auf diese Daten. Verwenden Sie die folgende Syntax, um über die HTTP-Antwort auf die Felder zuzugreifen:

${VARIABLE_NAME.body|code.PATH_TO_FIELD}

Dabei gilt:

  • VARIABLE_NAME: Der Name der Workflowvariable, in der Sie eine JSON-Antwort gespeichert haben.
  • body: Verwenden Sie das Feld body, um auf den Text der HTTP-Antwort zuzugreifen.
  • code: Verwenden Sie das Feld code, um auf den HTTP-Antwortcode zuzugreifen.
  • PATH_TO_FIELD: Pfad zum Feld in der JSON-Antwort, auf die Sie zugreifen möchten. Kann einfach der Name des Felds sein. Wenn das Feld in einem Objekt verschachtelt ist, kann es die Form object1.object2.field haben.

Wenn eine API beispielsweise {"age":50} zurückgibt und ein Workflow diese Antwort in einer Variablen mit dem Namen age_response speichert, gibt das folgende Beispiel den Wert des Felds age zurück: In diesem Fall gilt 50:

age_response.body.age

Beispiele

Diese Beispiele veranschaulichen die Syntax.

Antwort von einem API-Aufruf zuweisen

Mit diesem Beispiel wird eine Beispiel-API aufgerufen. Der zurückgegebene Wochentag wird an die Wikipedia API übergeben. Es werden relevante Artikel auf Wikipedia zum aktuellen Wochentag zurückgegeben.

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]}"
    }
  }
]

Externe HTTP-POST-Anfrage stellen

In diesem Beispiel wird eine POST-Anfrage an einen externen HTTP-Endpunkt gesendet.

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}"
    }
  }
]

Externe HTTP GET-Anfrage mit Headern senden

In diesem Beispiel wird eine HTTP GET-Anfrage mit einem benutzerdefinierten Header gesendet. Sie können auch benutzerdefinierte Headerdefinitionen festlegen, wenn Sie andere Arten von HTTP-Anfragen stellen.

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}"
    }
  }
]

OIDC zur Authentifizierung bei einer Anfrage an Cloud Functions verwenden

In diesem Beispiel wird eine HTTP-Anfrage mit OIDC durch Hinzufügen einerauth zumargs Abschnitt der Workflow-Definition, nachdem Sie die URL angegeben haben.

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}"
    }
  }
]

Nächste Schritte