Scrivere funzioni HTTP
In Cloud Functions, utilizzi le funzioni HTTP per richiamare una funzione tramite una richiesta HTTP(S). Per consentire la semantica HTTP, le firme delle funzioni HTTP accettano argomenti specifici per HTTP.
Implementazione
L'esempio seguente mostra un file di origine della funzione HTTP di base per ogni runtime. Consulta Struttura della directory di origine per informazioni su dove trovare il codice sorgente.
Node.js
const functions = require('@google-cloud/functions-framework');
// Register an HTTP function with the Functions Framework
functions.http('myHttpFunction', (req, res) => {
// Your code here
// Send an HTTP response
res.send('OK');
});
In Node.js, registri una funzione di gestore HTTP con il Framework di funzioni per Node.js. La tua funzione di gestore HTTP deve essere un Funzione middleware Express che accetta la richiesta e response e invia un Risposta HTTP.
Cloud Functions analizza automaticamente il corpo della richiesta in base al
dell'intestazione Content-Type
della richiesta utilizzando
body-parser
per poter accedere agli oggetti req.body
e req.rawBody
nel tuo gestore HTTP.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è myHttpFunction
.
Python
import functions_framework
# Register an HTTP function with the Functions Framework
@functions_framework.http
def my_http_function(request):
# Your code here
# Return an HTTP response
return 'OK'
In Python, registri una funzione di gestore HTTP con il Framework delle funzioni per Python. La tua funzione di gestore HTTP deve accettare un Richiesta di flask oggetto come argomento e restituisce un valore che Flask può convertire in un oggetto di risposta HTTP.
La
punto di accesso alla funzione
è il nome della funzione gestore registrata nel framework di Functions.
In questo esempio, il punto di ingresso è my_http_function
.
Vai
package myhttpfunction
import (
"fmt"
"net/http"
"github.com/GoogleCloudPlatform/functions-framework-go/functions"
)
func init() {
// Register an HTTP function with the Functions Framework
functions.HTTP("MyHTTPFunction", myHTTPFunction)
}
// Function myHTTPFunction is an HTTP handler
func myHTTPFunction(w http.ResponseWriter, r *http.Request) {
// Your code here
// Send an HTTP response
fmt.Fprintln(w, "OK")
}
In Go, registri una funzione di gestore HTTP con il
Framework delle funzioni per Go
nella funzione init()
. La tua funzione di gestore HTTP deve utilizzare lo standard
http.HandlerFunc
a riga di comando per inviare una risposta HTTP.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è MyHTTPFunction
.
La tua funzione di gestore HTTP deve implementare lo standard
http.HandlerFunc
a riga di comando. Accetta un'interfaccia http.ResponseWriter utilizzata dalla tua funzione per
creare una risposta alla richiesta e un puntatore a uno struct http.Request contenente i dettagli del
richiesta HTTP in entrata.
Java
package myhttpfunction;
import com.google.cloud.functions.HttpFunction;
import com.google.cloud.functions.HttpRequest;
import com.google.cloud.functions.HttpResponse;
// Define a class that implements the HttpFunction interface
public class MyHttpFunction implements HttpFunction {
// Implement the service() method to handle HTTP requests
@Override
public void service(HttpRequest request, HttpResponse response) throws Exception {
// Your code here
// Send an HTTP response
response.getWriter().write("OK");
}
}
In Java, utilizzi
API Java del framework Functions
per implementare una classe di gestore HTTP
HttpFunction
a riga di comando. Il metodo service()
deve inviare una risposta HTTP.
La
punto di accesso alla funzione
è il nome completo della classe di gestore HTTP, che include il pacchetto
. In questo esempio, il punto di ingresso è myhttpfunction.MyHttpFunction
.
Il tuo metodo service
riceve un HttpRequest
che descrive la richiesta HTTP in entrata e HttpResponse
che la funzione compila con un messaggio di risposta.
C#
using Google.Cloud.Functions.Framework;
using Microsoft.AspNetCore.Http;
using System.Threading.Tasks;
namespace MyProject
{
// Define a class that implements the IHttpFunction interface
public class MyHttpFunction : IHttpFunction
{
// Implement the HandleAsync() method to handle HTTP requests
public async Task HandleAsync(HttpContext context)
{
// Your code here
// Send an HTTP response
await context.Response.WriteAsync("OK");
}
}
}
Nei runtime .NET, utilizzi
Framework di funzioni per .NET
per implementare una classe di gestore HTTP
IHttpFunction
a riga di comando. Il metodo HandleAsync()
accetta un ASP.NET standard
HttpContext
come argomento e deve inviare una risposta HTTP.
La
punto di accesso alla funzione
è il nome completo della classe di gestore HTTP, compreso lo spazio dei nomi.
In questo esempio, il punto di ingresso è MyProject.MyHttpFunction
.
Ruby
require "functions_framework"
# Register an HTTP function with the Functions Framework
FunctionsFramework.http "my_http_function" do |request|
# Your code here
# Return an HTTP response
"OK"
end
In Ruby, registri una funzione di gestore HTTP con il Framework di funzioni per Ruby. La tua funzione di gestore HTTP deve accettare un Richiesta rack oggetto come argomento e restituisce un valore che può essere utilizzato come risposta HTTP.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è my_http_function
.
PHP
<?php
use Google\CloudFunctions\FunctionsFramework;
use Psr\Http\Message\ServerRequestInterface;
// Register an HTTP function with the Functions Framework
FunctionsFramework::http('myHttpFunction', 'myHttpHandler');
// Define your HTTP handler
function myHttpHandler(ServerRequestInterface $request): string
{
// Your code here
// Return an HTTP response
return 'OK';
}
In PHP, registri una funzione di gestore HTTP con il
Framework di funzioni per PHP.
La tua funzione di gestore HTTP deve accettare un argomento che implementa PSR-7
ServerRequestInterface
e deve restituire una risposta HTTP come stringa o come oggetto
che implementa PSR-7
ResponseInterface
a riga di comando.
La
punto di accesso alla funzione
è il nome con cui il gestore viene registrato nel framework di Functions.
In questo esempio, il punto di ingresso è myHttpFunction
.
Richieste e risposte HTTP
Le funzioni HTTP accettano i metodi di richiesta HTTP elencati nella pagina Trigger HTTP. Il tuo gestore HTTP può esaminare il metodo di richiesta ed eseguire diverse azioni in base .
La funzione deve inviare una risposta HTTP. Se la funzione crea uno sfondo
(come thread, future, oggetti Promise
JavaScript, callback,
o processi di sistema), devi terminare o risolvere in altro modo queste attività prima
tramite l'invio di una risposta HTTP. Tutte le attività non sono state terminate prima che la risposta HTTP venga
inviate potrebbero non essere completate e potrebbero causare un comportamento indefinito.
Per ulteriori informazioni, consulta Trigger HTTP informazioni sulle funzioni HTTP e sulle opzioni associate.
Gestione di CORS
Condivisione delle risorse tra origini (CORS) è un modo per consentire alle applicazioni in esecuzione su un dominio di accedere alle risorse di un altro dominio. Ad esempio, potresti dover consentire al tuo dominio di effettuare richieste il dominio Cloud Functions per accedere alla tua funzione.
Se CORS non è configurato correttamente, potrebbero essere visualizzati errori come i seguenti:
XMLHttpRequest cannot load https://YOUR_FUNCTION_URL. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'https://YOUR_DOMAIN' is therefore not allowed access.
Per consentire le richieste multiorigine alla funzione, imposta il metodo
Access-Control-Allow-Origin
l'intestazione in modo appropriato nella risposta HTTP. Per
richieste multiorigine preflight,
devi rispondere alla richiesta OPTIONS
preflight con un codice di risposta 204
e intestazioni aggiuntive.
Node.js
Python
Vai
Java
C#
Ruby
PHP
Limitazioni CORS
Per le richieste multiorigine con preflight, vengono inviate richieste OPTIONS
preflight
senza intestazione Authorization
, quindi verranno rifiutate su tutte le richieste HTTP
che richiedono l'autenticazione. Poiché le richieste preflight non vanno a buon fine,
anche le richieste principali non andranno a buon fine. Per aggirare questa limitazione, utilizza una delle seguenti opzioni:
le seguenti opzioni:
- Consenti chiamate non autenticate della tua funzione.
- Ospita la tua app web e Cloud Functions nello stesso dominio per evitare CORS. Puoi farlo integrando Firebase Hosting con Cloud Functions.
Passaggi successivi
- Scopri di più sui trigger HTTP.
- Scopri come eseguire il deployment di una funzione Cloud Functions.
- Consulta il tutorial sulle funzioni HTTP per esempio di scrittura, deployment e chiamata di una funzione HTTP.