Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Scrivere funzioni HTTP

In Cloud Functions, utilizzi le funzioni HTTP quando vuoi richiamare una funzione tramite una richiesta HTTP(S). Per consentire la semantica HTTP, le firme di funzione HTTP accettano argomenti specifici di HTTP.

Implementazione

L'esempio seguente mostra un file di origine della funzione HTTP di base per ogni runtime. Consulta la pagina 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 gestore HTTP con il Framework delle funzioni per Node.js. La funzione del gestore HTTP deve essere una funzione middleware Express che accetti gli argomenti di richiesta e risposta e invii una risposta HTTP.

Cloud Functions analizza automaticamente il corpo della richiesta in base all'intestazione Content-Type della richiesta utilizzando body-parser, in modo che tu possa accedere agli oggetti req.body e req.rawBody nel gestore HTTP.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato con il 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 gestore HTTP con il Functions Framework for Python. La funzione gestore HTTP deve accettare un oggetto Richiesta Flask come argomento e restituire un valore che Flask può convertire in un oggetto risposta HTTP.

Il punto di ingresso della funzione è il nome della funzione gestore registrata con il framework di Functions. In questo esempio, il punto di ingresso è my_http_function.

Go

package myhttpfunction

import (
    "io"
    "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
    io.WriteString(w, "OK")
}

In Go, registri una funzione gestore HTTP con il Functions Framework for Go nella funzione init(). La funzione gestore HTTP deve utilizzare l'interfaccia standard http.HandlerFunc per inviare una risposta HTTP.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato con il framework di Functions. In questo esempio, il punto di ingresso è MyHTTPFunction.

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 l'API Java di Framework delle funzioni per implementare una classe del gestore HTTP con l'interfaccia HttpFunction. Il metodo service() deve inviare una risposta HTTP.

Il punto di ingresso della funzione è il nome completo della classe del gestore HTTP, incluso il nome del pacchetto. In questo esempio, il punto di ingresso è myhttpfunction.MyHttpFunction.

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 il Framework delle funzioni per .NET per implementare una classe di gestore HTTP con l'interfaccia IHttpFunction. Il metodo HandleAsync() accetta un oggetto ASP.NET HttpContext standard come argomento e deve inviare una risposta HTTP.

Il punto di ingresso della funzione è il nome completo della classe del gestore HTTP, incluso 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 gestore HTTP con il Framework delle funzioni per Ruby. La funzione gestore del gestore HTTP deve accettare un oggetto Richiesta Rack come argomento e restituire un valore che può essere utilizzato come risposta HTTP.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato con il 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 gestore HTTP con il Framework delle funzioni per PHP. La funzione gestore HTTP deve accettare un argomento che implementa l'interfaccia PSR-7 ServerRequestInterface e deve restituire una risposta HTTP come stringa o un oggetto che implementa l'interfaccia PSR-7ResponseInterface.

Il punto di ingresso della funzione è il nome con cui il gestore è registrato con il framework di Functions. In questo esempio, il punto di ingresso è myHttpFunction.

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 basate sul metodo.

La funzione deve inviare una risposta HTTP. Se la funzione crea attività in background (ad esempio con thread, future, oggetti JavaScript Promise, callback o processi di sistema), devi terminare o risolvere queste attività prima di inviare una risposta HTTP. Le attività non terminate prima dell'invio della risposta HTTP potrebbero non essere completate e potrebbero causare un comportamento non definito.

Per ulteriori informazioni sulle funzioni HTTP e sulle opzioni associate, consulta Trigger HTTP.

Gestione di CORS

CORS (Cross-Origin Resource Sharing) è un modo per consentire alle applicazioni in esecuzione su un dominio di accedere alle risorse di un altro dominio. Ad esempio, potrebbe essere necessario consentire al dominio di effettuare richieste al dominio Cloud Functions per accedere alla 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 per la funzione, imposta l'intestazione Access-Control-Allow-Origin come appropriato nella tua risposta HTTP. Per le richieste multiorigine preflight, devi rispondere alla richiesta OPTIONS preflight con un codice di risposta 204 e intestazioni aggiuntive.

Limitazioni CORS

Per le richieste multiorigine preflight, le richieste OPTIONS preflight vengono inviate senza un'intestazione Authorization, quindi verranno rifiutate in tutte le funzioni HTTP che richiedono l'autenticazione. Dato che le richieste preflight non riescono, anche le richieste principali non andranno a buon fine. Per ovviare a questo limite, puoi usare una delle seguenti opzioni:

Passaggi successivi