Wyzwalacz HTTP usługi Azure Functions
Wyzwalacz HTTP umożliwia wywołanie funkcji z żądaniem HTTP. Wyzwalacz HTTP umożliwia tworzenie bezserwerowych interfejsów API i reagowanie na elementy webhook.
Domyślna wartość zwracana dla funkcji wyzwalanej przez protokół HTTP to:
HTTP 204 No Content
z pustą treścią w usłudze Functions w wersji 2.x lub nowszejHTTP 200 OK
z pustą treścią w usłudze Functions 1.x
Aby zmodyfikować odpowiedź HTTP, skonfiguruj powiązanie wyjściowe.
Aby uzyskać więcej informacji na temat powiązań HTTP, zobacz omówienie i odwołanie do powiązania wyjściowego.
Napiwek
Jeśli planujesz używać powiązań HTTP lub WebHook, zaplanuj uniknięcie wyczerpania portów HttpClient
, które mogą być spowodowane przez niewłaściwe utworzenie wystąpienia elementu . Aby uzyskać więcej informacji, zobacz Jak zarządzać połączeniami w usłudze Azure Functions.
Ważne
W tym artykule są używane karty do obsługi wielu wersji modelu programowania Node.js. Model w wersji 4 jest ogólnie dostępny i ma bardziej elastyczne i intuicyjne środowisko dla deweloperów języka JavaScript i Języka TypeScript. Aby uzyskać więcej informacji na temat sposobu działania modelu w wersji 4, zapoznaj się z przewodnikiem dewelopera dotyczącym usługi Azure Functions Node.js. Aby dowiedzieć się więcej o różnicach między wersjami 3 i v4, zapoznaj się z przewodnikiem migracji.
Usługa Azure Functions obsługuje dwa modele programowania dla języka Python. Sposób definiowania powiązań zależy od wybranego modelu programowania.
Model programowania w języku Python w wersji 2 umożliwia definiowanie powiązań przy użyciu dekoratorów bezpośrednio w kodzie funkcji języka Python. Aby uzyskać więcej informacji, zobacz przewodnik dla deweloperów języka Python.
Ten artykuł obsługuje oba modele programowania.
Przykład
Funkcję języka C# można utworzyć przy użyciu jednego z następujących trybów języka C#:
- Model izolowanego procesu roboczego: skompilowana funkcja języka C#, która jest uruchamiana w procesie roboczym izolowanym od środowiska uruchomieniowego. Proces izolowanego procesu roboczego jest wymagany do obsługi funkcji języka C# uruchomionych w wersjach LTS i innych niż LTS platformy .NET oraz programu .NET Framework. Rozszerzenia dla izolowanych funkcji procesu roboczego używają
Microsoft.Azure.Functions.Worker.Extensions.*
przestrzeni nazw. - Model przetwarzania: skompilowana funkcja języka C#, która działa w tym samym procesie co środowisko uruchomieniowe usługi Functions. W odmianie tego modelu funkcje można uruchamiać przy użyciu skryptów języka C#, które są obsługiwane głównie w przypadku edytowania portalu języka C#. Rozszerzenia dla funkcji przetwarzania używają
Microsoft.Azure.WebJobs.Extensions.*
przestrzeni nazw.
Ważne
Wsparcie zostanie zakończone dla modelu procesu 10 listopada 2026 r. Zdecydowanie zalecamy przeprowadzenie migracji aplikacji do izolowanego modelu procesu roboczego w celu uzyskania pełnej obsługi.
Kod w tym artykule jest domyślnie używany w języku .NET Core w wersji 2.x i nowszej. Aby uzyskać informacje na temat składni 1.x, zobacz szablony funkcji 1.x.
W poniższym przykładzie pokazano wyzwalacz HTTP, który zwraca odpowiedź "hello, world" jako IActionResult przy użyciu integracji ASP.NET Core w środowisku .NET Isolated:
[Function("HttpFunction")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}
W poniższym przykładzie pokazano wyzwalacz HTTP, który zwraca odpowiedź "hello world" jako obiekt HttpResponseData :
[Function(nameof(HttpFunction))]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestData req,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger(nameof(HttpFunction));
logger.LogInformation("message logged");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString("Welcome to .NET isolated worker !!");
return response;
}
Ta sekcja zawiera następujące przykłady:
- Odczyt parametru z ciągu zapytania
- Odczytywanie treści z żądania POST
- Odczytywanie parametru z trasy
- Odczytywanie treści POJO z żądania POST
W poniższych przykładach pokazano powiązanie wyzwalacza HTTP.
Odczyt parametru z ciągu zapytania
W tym przykładzie odczytuje parametr o nazwie id
, z ciągu zapytania i używa go do skompilowania dokumentu JSON zwróconego do klienta z typem application/json
zawartości .
@FunctionName("TriggerStringGet")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("GET parameters are: " + request.getQueryParameters());
// Get named parameter
String id = request.getQueryParameters().getOrDefault("id", "");
// Convert and display
if (id.isEmpty()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String name = "fake_name";
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
Odczytywanie treści z żądania POST
Ten przykład odczytuje treść żądania POST jako String
element i używa go do skompilowania dokumentu JSON zwróconego do klienta z typem application/json
zawartości .
@FunctionName("TriggerStringPost")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<String>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("Request body is: " + request.getBody().orElse(""));
// Check request body
if (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String body = request.getBody().get();
final String jsonDocument = "{\"id\":\"123456\", " +
"\"description\": \"" + body + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
Odczytywanie parametru z trasy
W tym przykładzie odczytuje obowiązkowy parametr o nazwie id
i opcjonalny parametr name
ze ścieżki trasy i używa ich do skompilowania dokumentu JSON zwróconego do klienta z typem application/json
zawartości .
@FunctionName("TriggerStringRoute")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.GET},
authLevel = AuthorizationLevel.ANONYMOUS,
route = "trigger/{id}/{name=EMPTY}") // name is optional and defaults to EMPTY
HttpRequestMessage<Optional<String>> request,
@BindingName("id") String id,
@BindingName("name") String name,
final ExecutionContext context) {
// Item list
context.getLogger().info("Route parameters are: " + id);
// Convert and display
if (id == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final String jsonDocument = "{\"id\":\"" + id + "\", " +
"\"description\": \"" + name + "\"}";
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(jsonDocument)
.build();
}
}
Odczytywanie treści POJO z żądania POST
Oto kod klasy ToDoItem
, do których odwołuje się ten przykład:
public class ToDoItem {
private String id;
private String description;
public ToDoItem(String id, String description) {
this.id = id;
this.description = description;
}
public String getId() {
return id;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return "ToDoItem={id=" + id + ",description=" + description + "}";
}
}
W tym przykładzie odczytuje treść żądania POST. Treść żądania zostanie automatycznie zserializowany do obiektu i zostanie zwrócona do klienta z typem ToDoItem
application/json
zawartości . Parametr ToDoItem
jest serializowany przez środowisko uruchomieniowe usługi Functions, ponieważ jest przypisany do body
właściwości HttpMessageResponse.Builder
klasy.
@FunctionName("TriggerPojoPost")
public HttpResponseMessage run(
@HttpTrigger(name = "req",
methods = {HttpMethod.POST},
authLevel = AuthorizationLevel.ANONYMOUS)
HttpRequestMessage<Optional<ToDoItem>> request,
final ExecutionContext context) {
// Item list
context.getLogger().info("Request body is: " + request.getBody().orElse(null));
// Check request body
if (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client
// Generate document
final ToDoItem body = request.getBody().get();
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(body)
.build();
}
}
W poniższym przykładzie przedstawiono funkcję TypeScript wyzwalacza HTTP. Funkcja szuka parametru name
w ciągu zapytania lub treści żądania HTTP.
import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text()) || 'world';
return { body: `Hello, ${name}!` };
}
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: httpTrigger1,
});
W poniższym przykładzie przedstawiono funkcję JavaScript wyzwalacza HTTP. Funkcja szuka parametru name
w ciągu zapytania lub treści żądania HTTP.
const { app } = require('@azure/functions');
app.http('httpTrigger1', {
methods: ['GET', 'POST'],
authLevel: 'anonymous',
handler: async (request, context) => {
context.log(`Http function processed request for url "${request.url}"`);
const name = request.query.get('name') || (await request.text()) || 'world';
return { body: `Hello, ${name}!` };
},
});
W poniższym przykładzie pokazano powiązanie wyzwalacza w pliku function.json i funkcji programu PowerShell. Funkcja szuka parametru name
w ciągu zapytania lub treści żądania HTTP.
{
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "Request",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
using namespace System.Net
# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)
# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."
# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
$name = $Request.Body.Name
}
$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."
if ($name) {
$body = "Hello, $name. This HTTP triggered function executed successfully."
}
# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $body
})
W tym przykładzie są używane strumienie HTTP do zwracania fragmentowanych danych odpowiedzi.
import time
import azure.functions as func
from azurefunctions.extensions.http.fastapi import Request, StreamingResponse
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
def generate_sensor_data():
"""Generate real-time sensor data."""
for i in range(10):
# Simulate temperature and humidity readings
temperature = 20 + i
humidity = 50 + i
yield f"data: {{'temperature': {temperature}, 'humidity': {humidity}}}\n\n"
time.sleep(1)
@app.route(route="stream", methods=[func.HttpMethod.GET])
async def stream_sensor_data(req: Request) -> StreamingResponse:
"""Endpoint to stream real-time sensor data."""
return StreamingResponse(generate_sensor_data(), media_type="text/event-stream")
Aby dowiedzieć się więcej, w tym jak włączyć strumienie HTTP w projekcie, zobacz Strumienie HTTP.
W tym przykładzie pokazano powiązanie wyzwalacza i funkcję języka Python, która używa powiązania. Funkcja szuka parametru name
w ciągu zapytania lub treści żądania HTTP.
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
def test_function(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
return func.HttpResponse(
"This HTTP triggered function executed successfully.",
status_code=200
)
Atrybuty
Zarówno model izolowanego procesu roboczego, jak i model procesu używają HttpTriggerAttribute
elementu do zdefiniowania powiązania wyzwalacza. Zamiast tego skrypt języka C# używa pliku konfiguracji function.json zgodnie z opisem w przewodniku obsługi skryptów języka C#.
W aplikacjach HttpTriggerAttribute
funkcji modelu izolowanego procesu roboczego obsługiwane są następujące parametry:
Parametry | opis |
---|---|
AuthLevel | Określa, jakie klucze, jeśli istnieją, muszą być obecne w żądaniu, aby wywołać funkcję. Aby uzyskać obsługiwane wartości, zobacz Poziom autoryzacji. |
Metody | Tablica metod HTTP, na które odpowiada funkcja. Jeśli nie zostanie określony, funkcja odpowiada na wszystkie metody HTTP. Zobacz Dostosowywanie punktu końcowego HTTP. |
Trasa | Definiuje szablon trasy, kontrolując, na które adresy URL żądań odpowiada funkcja. Wartość domyślna, jeśli żadna z nich nie jest podana, to <functionname> . Aby uzyskać więcej informacji, zobacz dostosowywanie punktu końcowego HTTP. |
Dekoratory
Dotyczy tylko modelu programowania w wersji 2 języka Python.
W przypadku funkcji języka Python w wersji 2 zdefiniowanych przy użyciu dekoratora następujące właściwości wyzwalacza są definiowane w dekoratorze route
, który dodaje powiązanie HttpTrigger i HttpOutput:
Właściwości | opis |
---|---|
route |
Trasa dla punktu końcowego HTTP. Jeśli nazwa funkcji języka Python jest obecna lub zdefiniowana przez użytkownika, zostanie ustawiona na nazwę funkcji . |
trigger_arg_name |
Nazwa argumentu httpRequest. Wartość domyślna to "req". |
binding_arg_name |
Nazwa argumentu httpResponse. Wartość domyślna to "$return". |
methods |
Krotka metod HTTP, na które odpowiada funkcja. |
auth_level |
Określa, jakie klucze, jeśli istnieją, muszą być obecne w żądaniu, aby wywołać funkcję. |
Aby zapoznać się z funkcjami języka Python zdefiniowanymi przy użyciu function.json, zobacz sekcję Konfiguracja .
Adnotacje
W bibliotece środowiska uruchomieniowego funkcji Języka Java użyj adnotacji HttpTrigger, która obsługuje następujące ustawienia:
Konfigurowanie
Dotyczy tylko modelu programowania języka Python w wersji 1.
W poniższej tabeli opisano właściwości, które można ustawić dla options
obiektu przekazanego app.http()
do metody .
Właściwości | opis |
---|---|
authLevel | Określa, jakie klucze, jeśli istnieją, muszą być obecne w żądaniu, aby wywołać funkcję. Aby uzyskać obsługiwane wartości, zobacz Poziom autoryzacji. |
Metody | Tablica metod HTTP, na które odpowiada funkcja. Jeśli nie zostanie określony, funkcja odpowiada na wszystkie metody HTTP. Zobacz Dostosowywanie punktu końcowego HTTP. |
trasa | Definiuje szablon trasy, kontrolując, na które adresy URL żądań odpowiada funkcja. Wartość domyślna, jeśli żadna z nich nie jest podana, to <functionname> . Aby uzyskać więcej informacji, zobacz dostosowywanie punktu końcowego HTTP. |
W poniższej tabeli opisano właściwości konfiguracji wyzwalacza ustawione w pliku function.json , które różnią się wersją środowiska uruchomieniowego.
W poniższej tabeli opisano właściwości konfiguracji powiązania ustawione w pliku function.json .
właściwość function.json | opis |
---|---|
type | Wymagane — musi być ustawiona na httpTrigger wartość . |
direction | Wymagane — musi być ustawiona na in wartość . |
name | Wymagane — nazwa zmiennej używana w kodzie funkcji dla treści żądania lub żądania. |
authLevel | Określa, jakie klucze, jeśli istnieją, muszą być obecne w żądaniu, aby wywołać funkcję. Aby uzyskać obsługiwane wartości, zobacz Poziom autoryzacji. |
Metody | Tablica metod HTTP, na które odpowiada funkcja. Jeśli nie zostanie określony, funkcja odpowiada na wszystkie metody HTTP. Zobacz Dostosowywanie punktu końcowego HTTP. |
trasa | Definiuje szablon trasy, kontrolując, na które adresy URL żądań odpowiada funkcja. Wartość domyślna, jeśli żadna z nich nie jest podana, to <functionname> . Aby uzyskać więcej informacji, zobacz dostosowywanie punktu końcowego HTTP. |
Użycie
W tej sekcji opisano sposób konfigurowania powiązania funkcji wyzwalacza HTTP.
Adnotacja HttpTrigger powinna być stosowana do parametru metody jednego z następujących typów:
- HttpRequestMessage<T>.
- Wszelkie natywne typy języka Java, takie jak int, String, byte[].
- Wartości dopuszczane wartości null przy użyciu opcji Opcjonalne.
- Dowolny zwykły typ obiektu Java (POJO).
Ładunek
Typ danych wejściowych wyzwalacza jest zadeklarowany jako jeden z następujących typów:
Type | Opis |
---|---|
HttpRequest | Użycie tego typu wymaga skonfigurowania aplikacji z integracją ASP.NET Core na platformie .NET Isolated. Zapewnia to pełny dostęp do obiektu żądania i ogólnego obiektu HttpContext. |
HttpRequestData | Projekcja obiektu żądania. |
Typ niestandardowy | Gdy treść żądania to JSON, środowisko uruchomieniowe próbuje przeanalizować je w celu ustawienia właściwości obiektu. |
Gdy parametr wyzwalacza ma typ HttpRequestData
lub HttpRequest
, typy niestandardowe mogą być również powiązane z innymi parametrami przy użyciu polecenia Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute
. Użycie tego atrybutu wymaga Microsoft.Azure.Functions.Worker.Extensions.Http
wersji 3.1.0 lub nowszej. Jest to inny typ niż podobny atrybut w pliku Microsoft.AspNetCore.Mvc
. W przypadku korzystania z integracji ASP.NET Core potrzebna jest w pełni kwalifikowana dokumentacja lub using
instrukcja. W tym przykładzie pokazano, jak za pomocą atrybutu pobrać tylko zawartość treści, a jednocześnie mieć dostęp do pełnej HttpRequest
zawartości przy użyciu ASP.NET Core integracji:
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
namespace AspNetIntegration
{
public class BodyBindingHttpTrigger
{
[Function(nameof(BodyBindingHttpTrigger))]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[FromBody] Person person)
{
return new OkObjectResult(person);
}
}
public record Person(string Name, int Age);
}
Dostosowywanie punktu końcowego HTTP
Domyślnie podczas tworzenia funkcji wyzwalacza HTTP funkcja jest adresowalna przy użyciu trasy formularza:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>
Tę trasę można dostosować przy użyciu właściwości opcjonalnej route
w powiązaniu wejściowym wyzwalacza HTTP. Możesz użyć dowolnego ograniczenia trasy internetowego interfejsu API z parametrami.
Poniższy kod funkcji akceptuje dwa parametry category
i id
w trasie i zapisuje odpowiedź przy użyciu obu parametrów.
[Function("HttpTrigger1")]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Function, "get", "post",
Route = "products/{category:alpha}/{id:int?}")] HttpRequestData req, string category, int? id,
FunctionContext executionContext)
{
var logger = executionContext.GetLogger("HttpTrigger1");
logger.LogInformation("C# HTTP trigger function processed a request.");
var message = String.Format($"Category: {category}, ID: {id}");
var response = req.CreateResponse(HttpStatusCode.OK);
response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
response.WriteString(message);
return response;
}
Parametry trasy są definiowane przy użyciu route
ustawienia HttpTrigger
adnotacji. Poniższy kod funkcji akceptuje dwa parametry category
i id
w trasie i zapisuje odpowiedź przy użyciu obu parametrów.
package com.function;
import java.util.*;
import com.microsoft.azure.functions.annotation.*;
import com.microsoft.azure.functions.*;
public class HttpTriggerJava {
public HttpResponseMessage<String> HttpTrigger(
@HttpTrigger(name = "req",
methods = {"get"},
authLevel = AuthorizationLevel.FUNCTION,
route = "products/{category:alpha}/{id:int}") HttpRequestMessage<String> request,
@BindingName("category") String category,
@BindingName("id") int id,
final ExecutionContext context) {
String message = String.format("Category %s, ID: %d", category, id);
return request.createResponseBuilder(HttpStatus.OK).body(message).build();
}
}
Na przykład poniższy kod Języka TypeScript definiuje route
właściwość wyzwalacza HTTP z dwoma parametrami category
i id
. Przykład odczytuje parametry z żądania i zwraca ich wartości w odpowiedzi.
import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
const category = request.params.category;
const id = request.params.id;
return { body: `Category: ${category}, ID: ${id}` };
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{category:alpha}/{id:int?}',
handler: httpTrigger1,
});
Na przykład poniższy kod JavaScript definiuje route
właściwość wyzwalacza HTTP z dwoma parametrami category
i id
. Przykład odczytuje parametry z żądania i zwraca ich wartości w odpowiedzi.
const { app } = require('@azure/functions');
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{category:alpha}/{id:int?}',
handler: async (request, context) => {
const category = request.params.category;
const id = request.params.id;
return { body: `Category: ${category}, ID: ${id}` };
},
});
Na przykład poniższy kod definiuje route
właściwość wyzwalacza HTTP z dwoma parametrami category
i id
:
Parametry trasy zadeklarowane w pliku function.json są dostępne jako właściwość $Request.Params
obiektu.
$Category = $Request.Params.category
$Id = $Request.Params.id
$Message = "Category:" + $Category + ", ID: " + $Id
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $Message
})
Kontekst wykonywania funkcji jest uwidaczniony za pośrednictwem parametru zadeklarowanego jako func.HttpRequest
. To wystąpienie umożliwia funkcji uzyskiwanie dostępu do parametrów trasy danych, wartości ciągu zapytania i metod, które umożliwiają zwracanie odpowiedzi HTTP.
Po zdefiniowaniu parametry trasy są dostępne dla funkcji przez wywołanie route_params
metody .
import logging
import azure.functions as func
def main(req: func.HttpRequest) -> func.HttpResponse:
category = req.route_params.get('category')
id = req.route_params.get('id')
message = f"Category: {category}, ID: {id}"
return func.HttpResponse(message)
Korzystając z tej konfiguracji, funkcja jest teraz adresowalna z następującą trasą zamiast oryginalnej trasy.
https://<APP_NAME>.azurewebsites.net/api/products/electronics/357
Ta konfiguracja umożliwia kodowi funkcji obsługę dwóch parametrów w adresie, kategorii i identyfikatorze. Aby uzyskać więcej informacji na temat sposobu tokenizacji parametrów trasy w adresie URL, zobacz Routing w ASP.NET Core.
Domyślnie wszystkie trasy funkcji mają prefiks api
. Możesz również dostosować lub usunąć prefiks przy użyciu extensions.http.routePrefix
właściwości w pliku host.json . Poniższy przykład usuwa api
prefiks trasy przy użyciu pustego ciągu prefiksu w pliku host.json .
{
"extensions": {
"http": {
"routePrefix": ""
}
}
}
Używanie parametrów trasy
Parametry trasy, które zdefiniowały wzorzec funkcji route
, są dostępne dla każdego powiązania. Jeśli na przykład masz trasę zdefiniowaną jako "route": "products/{id}"
powiązanie magazynu tabel, może użyć wartości {id}
parametru w konfiguracji powiązania.
Poniższa konfiguracja pokazuje, jak {id}
parametr jest przekazywany do powiązania rowKey
.
import { app, HttpRequest, HttpResponseInit, input, InvocationContext } from '@azure/functions';
const tableInput = input.table({
connection: 'MyStorageConnectionAppSetting',
partitionKey: 'products',
tableName: 'products',
rowKey: '{id}',
});
export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
return { jsonBody: context.extraInputs.get(tableInput) };
}
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{id}',
extraInputs: [tableInput],
handler: httpTrigger1,
});
const { app, input } = require('@azure/functions');
const tableInput = input.table({
connection: 'MyStorageConnectionAppSetting',
partitionKey: 'products',
tableName: 'products',
rowKey: '{id}',
});
app.http('httpTrigger1', {
methods: ['GET'],
authLevel: 'anonymous',
route: 'products/{id}',
extraInputs: [tableInput],
handler: async (request, context) => {
return { jsonBody: context.extraInputs.get(tableInput) };
},
});
{
"type": "table",
"direction": "in",
"name": "product",
"partitionKey": "products",
"tableName": "products",
"rowKey": "{id}"
}
Jeśli używasz parametrów trasy, element invoke_URL_template
zostanie automatycznie utworzony dla funkcji. Klienci mogą użyć szablonu adresu URL, aby zrozumieć parametry, które muszą przekazać w adresie URL podczas wywoływania funkcji przy użyciu jej adresu URL. Przejdź do jednej z funkcji wyzwalanych przez protokół HTTP w witrynie Azure Portal i wybierz pozycję Pobierz adres URL funkcji.
Dostęp do invoke_URL_template
obiektu można uzyskać programowo przy użyciu interfejsów API usługi Azure Resource Manager dla funkcji listy lub funkcji Get.
Strumienie HTTP
Teraz możesz przesyłać strumieniowo żądania do punktu końcowego HTTP i odpowiadać w aplikacjach funkcji Node.js w wersji 4. Aby uzyskać więcej informacji, zobacz Strumienie HTTP.
Strumienie HTTP
Obsługa strumieni HTTP w języku Python umożliwia akceptowanie i zwracanie danych z punktów końcowych HTTP przy użyciu interfejsów API żądań FastAPI i odpowiedzi włączonych w funkcjach. Te interfejsy API umożliwiają hostowi przetwarzanie danych w komunikatach HTTP jako fragmentów zamiast odczytywania całego komunikatu do pamięci. Aby uzyskać więcej informacji, zobacz Strumienie HTTP w języku Python
Ważne
Obsługa strumieni HTTP dla języka Python jest obecnie dostępna w wersji zapoznawczej i jest obsługiwana tylko dla modelu programowania w języku Python w wersji 2.
Praca z tożsamościami klientów
Jeśli aplikacja funkcji korzysta z uwierzytelniania/autoryzacji usługi App Service, możesz wyświetlić informacje o uwierzytelnionych klientach z kodu. Te informacje są dostępne jako nagłówki żądań wstrzykiwane przez platformę.
Te informacje można również odczytać z danych powiązania.
Uwaga
Dostęp do uwierzytelnionych informacji o kliencie jest obecnie dostępny tylko dla języków platformy .NET. Nie jest on również obsługiwany w wersji 1.x środowiska uruchomieniowego usługi Functions.
Informacje dotyczące uwierzytelnionych klientów są dostępne jako claimsPrincipal, który jest dostępny jako część kontekstu żądania, jak pokazano w poniższym przykładzie:
Uwierzytelniony użytkownik jest dostępny za pośrednictwem nagłówków HTTP.
Uwierzytelniony użytkownik jest dostępny za pośrednictwem nagłówków HTTP.
Poziom autoryzacji
Poziom autoryzacji to wartość ciągu wskazująca rodzaj klucza autoryzacji wymaganego do uzyskania dostępu do punktu końcowego funkcji. W przypadku funkcji wyzwalanej przez protokół HTTP poziom autoryzacji może być jedną z następujących wartości:
Wartość poziomu | opis |
---|---|
anonimowy | Klucz dostępu nie jest wymagany. |
funkcja | Klucz specyficzny dla funkcji jest wymagany do uzyskania dostępu do punktu końcowego. |
Admin | Klucz główny jest wymagany do uzyskania dostępu do punktu końcowego. |
Jeśli poziom nie jest jawnie ustawiony, autoryzacja jest domyślnie ustawiona na function
poziom .
Jeśli poziom nie jest jawnie ustawiony, domyślna autoryzacja zależy od wersji modelu Node.js:
Autoryzacja jest domyślnie ustawiona na anonymous
poziom .
Klucze dostępu funkcji
Usługa Functions umożliwia używanie kluczy dostępu, aby utrudnić dostęp do punktów końcowych funkcji. Jeśli poziom autoryzacji w funkcji wyzwalanej przez protokół HTTP jest ustawiony na anonymous
wartość , żądania muszą zawierać klucz dostępu w żądaniu. Aby uzyskać więcej informacji, zobacz Praca z kluczami dostępu w usłudze Azure Functions.
Autoryzacja klucza dostępu
Większość szablonów wyzwalaczy HTTP wymaga klucza dostępu w żądaniu. W związku z tym żądanie HTTP zwykle wygląda jak następujący adres URL:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>
Klucz można uwzględnić w zmiennej ciągu zapytania o nazwie code
, jak wspomniano wcześniej. Można go również uwzględnić w nagłówku x-functions-key
HTTP. Wartość klucza może być dowolnym kluczem funkcji zdefiniowanym dla funkcji lub dowolnym kluczem hosta.
Możesz zezwolić na żądania anonimowe, które nie wymagają kluczy. Można również wymagać użycia klucza głównego. Domyślny poziom autoryzacji można zmienić przy użyciu authLevel
właściwości w formacie JSON powiązania.
Uwaga
W przypadku lokalnego uruchamiania funkcji autoryzacja jest wyłączona niezależnie od określonego ustawienia poziomu autoryzacji. Po opublikowaniu authLevel
na platformie Azure ustawienie w wyzwalaczu jest wymuszane. Klucze są nadal wymagane w przypadku uruchamiania lokalnego w kontenerze.
Elementy webhook
Uwaga
Tryb elementu webhook jest dostępny tylko dla wersji 1.x środowiska uruchomieniowego usługi Functions. Ta zmiana została wprowadzona w celu zwiększenia wydajności wyzwalaczy HTTP w wersji 2.x i nowszej.
W wersji 1.x szablony elementów webhook zapewniają kolejną walidację ładunków elementów webhook. W wersji 2.x i nowszej podstawowy wyzwalacz HTTP nadal działa i jest zalecanym podejściem dla elementów webhook.
Typ elementu webhook
Właściwość webHookType
powiązania wskazuje typ elementu webhook obsługiwanego przez funkcję, co również określa obsługiwany ładunek. Typ elementu webhook może być jedną z następujących wartości:
Wartość typu | opis |
---|---|
genericJson |
Punkt końcowy elementu webhook ogólnego przeznaczenia bez logiki dla określonego dostawcy. To ustawienie ogranicza żądania tylko do żądań korzystających z protokołu HTTP POST i typu application/json zawartości. |
github |
Funkcja odpowiada na elementy webhook usługi GitHub. Nie używaj authLevel właściwości z elementami webhook usługi GitHub. |
slack |
Funkcja odpowiada na elementy webhook usługi Slack. Nie używaj authLevel właściwości z elementami webhook usługi Slack. |
Podczas ustawiania webHookType
właściwości nie należy również ustawiać methods
właściwości powiązania.
GitHub webhooks (Elementy webhook usługi GitHub)
Aby odpowiedzieć na elementy webhook usługi GitHub, najpierw utwórz funkcję za pomocą wyzwalacza HTTP i ustaw właściwość webHookType na github
wartość . Następnie skopiuj jego adres URL i klucz interfejsu API do strony Dodawanie elementu webhook repozytorium GitHub.
Elementy webhook usługi Slack
Element webhook usługi Slack generuje token zamiast umożliwiać jego określenie, dlatego należy skonfigurować klucz specyficzny dla funkcji przy użyciu tokenu z usługi Slack. Zobacz Klucze autoryzacji.
Elementy webhook i klucze
Autoryzacja elementu webhook jest obsługiwana przez składnik odbiornika elementu webhook, część wyzwalacza HTTP, a mechanizm różni się w zależności od typu elementu webhook. Każdy mechanizm opiera się na kluczu. Domyślnie używany jest klucz funkcji o nazwie "default". Aby użyć innego klucza, skonfiguruj dostawcę elementu webhook, aby wysłać nazwę klucza z żądaniem w jeden z następujących sposobów:
- Ciąg zapytania: dostawca przekazuje nazwę klucza w parametrze
clientid
ciągu zapytania, takim jakhttps://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>
. - Nagłówek żądania: dostawca przekazuje nazwę klucza w nagłówku
x-functions-clientid
.
Typy zawartości
Przekazywanie danych binarnych i danych formularza do funkcji innej niż C# wymaga użycia odpowiedniego nagłówka typu zawartości. Obsługiwane typy zawartości obejmują octet-stream
dane binarne i typy wieloczęściowe.
Znane problemy
W funkcjach innych niż C# żądania wysyłane z typem image/jpeg
string
zawartości powoduje przekazanie wartości do funkcji. W takich przypadkach można ręcznie przekonwertować string
wartość na tablicę bajtów, aby uzyskać dostęp do nieprzetworzonych danych binarnych.
Limity
Długość żądania HTTP jest ograniczona do 100 MB (104 857 600 bajtów), a długość adresu URL jest ograniczona do 4 KB (4096 bajtów). Te limity są określane przez httpRuntime
element pliku Web.config środowiska uruchomieniowego.
Jeśli funkcja używająca wyzwalacza HTTP nie zostanie ukończona w ciągu 230 sekund, usługa Azure Load Balancer upłynął limit czasu i zwróci błąd HTTP 502. Funkcja będzie nadal działać, ale nie będzie mogła zwrócić odpowiedzi HTTP. W przypadku długotrwałych funkcji zalecamy stosowanie wzorców asynchronicznych i zwracanie lokalizacji, w której można wysłać polecenie ping do stanu żądania. Aby uzyskać informacje o tym, jak długo można uruchomić funkcję, zobacz Skalowanie i hostowanie — plan zużycie.