Puoi definire un passaggio del flusso di lavoro che esegue una chiamata HTTP e assegnare la risposta della chiamata a una variabile. Ad esempio, puoi richiamare un Google Cloud servizio come le funzioni Cloud Run o Cloud Run tramite una richiesta HTTP.
L'invocazione di un servizio tramite una richiesta HTTP non deve essere confusa con l'utilizzo dei connettori di Workflows per eseguire operazioni API. Google Cloud I connettori semplificano la chiamata ai servizi perché gestiscono la formattazione delle richieste per te e forniscono metodi e argomenti in modo che tu non debba conoscere i dettagli di un'API Google Cloud .
Richiamare un endpoint HTTP
Questo tipo di passaggio ti consente di effettuare una richiesta HTTP. Sono supportate sia le richieste HTTP che HTTPS. I metodi di richiesta HTTP più comuni hanno una scorciatoia di chiamata (ad esempio http.get e http.post), ma puoi effettuare qualsiasi tipo di richiesta HTTP impostando il campo call
su http.request
e specificando il tipo di richiesta utilizzando il campo method
.
YAML
- STEP_NAME: call: HTTP_REQUEST args: url: URL_VALUE method: REQUEST_METHOD private_service_name: "REGISTERED_SERVICE" headers: HEADER_KEY:HEADER_VALUE ... body: BODY_KEY:BODY_VALUE ... query: QUERY_KEY:QUERY_VALUE ... auth: type: AUTH_TYPE scope: AUTH_SCOPE scopes: AUTH_SCOPE audience: AUDIENCE timeout: TIMEOUT_IN_SECONDS result: RESULT_VALUE
JSON
[ { "STEP_NAME": { "call": "HTTP_REQUEST", "args": { "url": "URL_VALUE", "method": "REQUEST_METHOD", "private_service_name": "REGISTERED_SERVICE", "headers": {"HEADER_KEY":"HEADER_VALUE", ... }, "body": {"BODY_KEY":"BODY_VALUE", ... }, "query": {"QUERY_KEY":"QUERY_VALUE", ... }, "auth": { "type":"AUTH_TYPE", "scope":"AUTH_SCOPE", "scopes":"AUTH_SCOPE", "audience":"AUDIENCE" }, "timeout": "TIMEOUT_IN_SECONDS" }, "result": "RESULT_VALUE" } } ]
Sostituisci quanto segue:
HTTP_REQUEST
: obbligatorio. Utilizza una delle seguenti opzioni per le richieste HTTP:http.delete
http.get
http.patch
http.post
http.put
http.request
URL_VALUE
: obbligatorio. URL a cui viene inviata la richiesta.REQUEST_METHOD
: obbligatorio se utilizzi il tipo di chiamatahttp.request
. Il tipo di metodo di richiesta HTTP da utilizzare. Ad esempio:GET
POST
PATCH
DELETE
REGISTERED_SERVICE
: facoltativo. Un nome del servizio Service Directory registrato nel formatoprojects/PROJECT_ID/locations/LOCATION/namespaces/NAMESPACE_NAME/services/SERVICE_NAME
. Per ulteriori informazioni, vedi Richiamare un endpoint privato utilizzando il registro dei servizi di Service Directory.HEADER_KEY
:HEADER_VALUE
: facoltativo. Campi di intestazione per fornire input all'API.Se utilizzi un'intestazione
Content-Type
per specificare il tipo di media del corpo della richiesta, sono supportati solo i seguenti tipi:application/json
oapplication/type+json
: deve essere una mappaapplication/x-www-form-urlencoded
: deve essere una stringa non codificatatext/type
: deve essere una stringa
Se viene specificata un'intestazione
Content-Type
, il corpo viene codificato come prescritto. Ad esempio, potrebbe essere JSON o codificato nell'URL.Se utilizzi un'intestazione
User-Agent
per identificare lo user agent richiedente, si applica quanto segue:- Il valore predefinito è
GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
- Se viene specificato un valore,
GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
viene aggiunto a quel valoreAd esempio, se
User-Agent: "MY_USER_AGENT_VALUE"
è specificato, l'intestazione della richiesta HTTP sarà la seguente (con uno spazio tra il valore specificato e il valore predefinito aggiunto):MY_USER_AGENT_VALUE GoogleCloudWorkflows; (+https://cloud.google.com/workflows/docs)
BODY_KEY
:BODY_VALUE
: facoltativo. Campi del corpo per fornire input all'API.Se non viene specificata un'intestazione
Content-Type
e se è presente un corpo della richiesta, si applica quanto segue:- Se il valore del corpo è in byte, l'intestazione è impostata su
Content-Type: application/octet-stream
. - In caso contrario, il corpo è codificato in JSON e l'intestazione è impostata su
Content-Type: application/json; charset=utf-8
.
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" }, ] } ] }
- Se il valore del corpo è in byte, l'intestazione è impostata su
QUERY_KEY
:QUERY_VALUE
: facoltativo. Campi di query per fornire input all'API.AUTH_TYPE
: facoltativo. Obbligatorio se l'API chiamata richiede l'autenticazione. UtilizzaOIDC
oOAuth2
. Per maggiori informazioni, vedi Effettuare richieste autenticate da un flusso di lavoro.AUTH_SCOPE
: facoltativo. Limita l'accesso di un'applicazione all'account di un utente. Utilizza il tastoscope
oscopes
.La chiave
scope
supporta una stringa o un elenco di stringhe. Ad esempio:"https://www.googleapis.com/auth/cloud-platform"
o
["https://www.googleapis.com/auth/cloud-platform", "scope2", "scope3"]
La chiave
scopes
, oltre a supportare una stringa o un elenco di stringhe, supporta stringhe separate da spazi e virgole. Ad esempio:"https://www.googleapis.com/auth/cloud-platform scope2 scope3"
o
"https://www.googleapis.com/auth/cloud-platform,scope2,scope3"
Per ulteriori informazioni, vedi Ambiti OAuth 2.0 per le API di Google.
AUDIENCE
: facoltativo. Specifica il pubblico per il token OIDC. Per impostazione predefinita, è impostato sullo stesso valore diurl
; tuttavia, deve essere impostato sull'URL principale del servizio. Ad esempio:https://region-project.cloudfunctions.net/hello_world
.
TIMEOUT_IN_SECONDS
: facoltativo. Tempo in secondi consentito per l'esecuzione di una richiesta prima di generare un'eccezione. Il valore massimo è 1800 secondi.RESULT_VALUE
: facoltativo. Nome della variabile in cui viene memorizzato il risultato di un passaggio di chiamata HTTP.
Accedere ai dati della risposta HTTP salvati in una variabile
Se l'intestazione Content-Type
per la risposta specifica un
tipo di media application/json
, la risposta JSON memorizzata in una
variabile viene convertita automaticamente in una mappa a cui è possibile accedere.
Se necessario, modifica l'API chiamata per specificare un tipo di media application/json
per l'intestazione della risposta Content-Type
. In caso contrario, puoi utilizzare le funzioni
json.decode
e text.encode
per
convertire il corpo della risposta in una mappa. Ad esempio:
json.decode(text.encode(RESPONSE_FROM_API))
Workflows includono un parser integrato per accedere a questi dati. Per accedere ai campi della risposta HTTP, utilizza la seguente sintassi:
${VARIABLE_NAME.body|code|headers.PATH_TO_FIELD}
Sostituisci quanto segue:
VARIABLE_NAME
: il nome della variabile del flusso di lavoro in cui hai salvato una risposta JSON.body
: utilizza il campobody
per accedere al corpo della risposta HTTP.code
: utilizza il campocode
per accedere al codice di risposta HTTP.headers
: utilizza il campoheaders
per accedere alle intestazioni delle risposte HTTP per nome.PATH_TO_FIELD
: il percorso del campo nella risposta JSON a cui vuoi accedere. Potrebbe trattarsi del nome del campo o, se il campo è nidificato all'interno di un oggetto, potrebbe assumere la forma diobject1.object2.field
.
Ad esempio, se un'API restituisce {"age":50}
e un flusso di lavoro memorizza la risposta
in una variabile denominata age_response
, l'esempio seguente restituisce il valore del
campo age
; in questo caso, 50
:
age_response.body.age
Esempi
Questi esempi mostrano la sintassi.
Assegna la risposta di una chiamata API
A meno che non inserisci un termine di ricerca personalizzato, questo esempio utilizza la tua posizione di Google Cloudper creare un termine di ricerca, che viene trasmesso all'API Wikipedia. Viene restituito un elenco di articoli correlati di Wikipedia.
YAML
JSON
Invia una richiesta HTTP POST esterna
Questo esempio invia una richiesta POST a un endpoint HTTP esterno.
YAML
JSON
Invia una richiesta HTTP GET esterna con intestazioni
Questo esempio effettua una richiesta HTTP GET con un'intestazione personalizzata. Puoi anche fornire definizioni di intestazioni personalizzate quando effettui altri tipi di richieste HTTP.
YAML
JSON
Utilizza OIDC per l'autenticazione quando effettui una richiesta a Cloud Run Functions
Questo esempio effettua una richiesta HTTP utilizzando OIDC aggiungendo una sezione auth
alla sezione args
della definizione del flusso di lavoro, dopo aver specificato l'URL.
YAML
JSON
Rilevare e gestire gli errori delle richieste HTTP
Questo esempio implementa un gestore di eccezioni personalizzato basato sul codice di stato HTTP restituito dalla richiesta GET. Il flusso di lavoro rileva una potenziale eccezione e restituisce un messaggio di errore predefinito. Se un'eccezione non viene riconosciuta, l'esecuzione del flusso di lavoro non riesce e genera l'eccezione restituita dalla richiesta GET. Per altri tag di errore, vedi Errori del workflow.
YAML
JSON
Passaggi successivi
- Tutorial sull'utilizzo di Workflows con Cloud Run e Cloud Run Functions
- Richiamare un endpoint privato utilizzando il registro dei servizi di Service Directory
- Richiamare un endpoint privato on-prem, Compute Engine, GKE o altro abilitando IAP
- Riferimento alla sintassi di Workflows