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 nowszej
HTTP 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.
Porada
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.
Model programowania w języku Python w wersji 1 wymaga zdefiniowania powiązań w osobnym pliku function.json w folderze funkcji. 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.
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 funkcję języka C#, która wyszukuje name parametr w ciągu zapytania lub w treści żądania HTTP. Zwróć uwagę, że wartość zwracana jest używana dla powiązania wyjściowego, ale atrybut wartości zwracanej nie jest wymagany.
cs
[FunctionName("HttpTriggerCSharp")]
publicstaticasync Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]
HttpRequest req, ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
string name = req.Query["name"];
string requestBody = String.Empty;
using (StreamReader streamReader = new StreamReader(req.Body))
{
requestBody = await streamReader.ReadToEndAsync();
}
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
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/jsonzawartości .
Java
@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 displayif (id.isEmpty()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client// Generate documentfinal 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 Stringelement i używa go do skompilowania dokumentu JSON zwróconego do klienta z typem application/jsonzawartości .
Java
@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 bodyif (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client// Generate documentfinal 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 idi opcjonalny parametr name ze ścieżki trasy i używa ich do skompilowania dokumentu JSON zwróconego do klienta z typem application/jsonzawartości .
Java
@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 displayif (id == null) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client// Generate documentfinal 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:
W tym przykładzie odczytuje treść żądania POST. Treść żądania zostanie automatycznie zserializowany do obiektu i zostanie zwrócona do klienta z typem ToDoItemapplication/jsonzawartości . Parametr ToDoItem jest serializowany przez środowisko uruchomieniowe usługi Functions, ponieważ jest przypisany do body właściwości HttpMessageResponse.Builder klasy.
Java
@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 bodyif (!request.getBody().isPresent()) {
return request.createResponseBuilder(HttpStatus.BAD_REQUEST)
.body("Document not found.")
.build();
}
else {
// return JSON from to the client// Generate documentfinal ToDoItem body = request.getBody().get();
return request.createResponseBuilder(HttpStatus.OK)
.header("Content-Type", "application/json")
.body(body)
.build();
}
}
W poniższym przykładzie pokazano powiązanie wyzwalacza w pliku function.json i funkcję Języka JavaScript, która używa powiązania. Funkcja szuka parametru name w ciągu zapytania lub treści żądania HTTP.
module.exports = asyncfunction(context, req) {
context.log('Node.js HTTP trigger function processed a request. RequestUri=%s', req.originalUrl);
if (req.query.name || (req.body && req.body.name)) {
context.res = {
// status defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
};
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.
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.
Python
import time
import azure.functions as func
from azurefunctions.extensions.http.fastapi import Request, StreamingResponse
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
defgenerate_sensor_data():"""Generate real-time sensor data."""for i in range(10):
# Simulate temperature and humidity readings
temperature = 20 + i
humidity = 50 + i
yieldf"data: {{'temperature': {temperature}, 'humidity': {humidity}}}\n\n"
time.sleep(1)
@app.route(route="stream", methods=[func.HttpMethod.GET])asyncdefstream_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.
Python
import azure.functions as func
import logging
app = func.FunctionApp()
@app.function_name(name="HttpTrigger1")@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)deftest_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
)
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 logging
import azure.functions as func
defmain(req: func.HttpRequest) -> func.HttpResponse:
logging.info('Python HTTP trigger function processed a request.')
name = req.params.get('name')
ifnot name:
try:
req_body = req.get_json()
except ValueError:
passelse:
name = req_body.get('name')
if name:
return func.HttpResponse(f"Hello {name}!")
else:
return func.HttpResponse(
"Please pass a name on the query string or in the request body",
status_code=400
)
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#.
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.
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.
Typ elementu webhook
Obsługiwane tylko w przypadku środowiska uruchomieniowego w wersji 1.x.
Konfiguruje wyzwalacz HTTP, aby działał jako odbiornik elementu webhook dla określonego dostawcy. Aby uzyskać obsługiwane wartości, zobacz Typ elementu webhook.
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 .
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 powiązania ustawione w pliku function.json .
właściwość function.json
opis
type
Wymagane — musi być ustawiona na httpTriggerwartość .
direction
Wymagane — musi być ustawiona na inwartość .
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.
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 httpTriggerwartość .
direction
Wymagane — musi być ustawiona na inwartość .
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.
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 httpTriggerwartość .
direction
Wymagane — musi być ustawiona na inwartość .
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.
webHookType
Konfiguruje wyzwalacz HTTP, aby działał jako odbiornik elementu webhook dla określonego dostawcy. Aby uzyskać obsługiwane wartości, zobacz Typ elementu webhook.
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:
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.
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 HttpRequestzawartości przy użyciu ASP.NET Core integracji:
C#
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.Functions.Worker;
using FromBodyAttribute = Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute;
namespaceAspNetIntegration
{
publicclassBodyBindingHttpTrigger
{
[Function(nameof(BodyBindingHttpTrigger))]
public IActionResult Run([HttpTrigger(AuthorizationLevel.Anonymous, "post")] HttpRequest req,
[FromBody] Person person)
{
returnnew OkObjectResult(person);
}
}
publicrecordPerson(string Name, int Age);
}
Typ danych wejściowych wyzwalacza jest zadeklarowany jako HttpRequest typ niestandardowy lub niestandardowy. Jeśli wybierzesz opcję HttpRequest, uzyskasz pełny dostęp do obiektu żądania. W przypadku typu niestandardowego środowisko uruchomieniowe próbuje przeanalizować treść żądania JSON w celu ustawienia właściwości obiektu.
Dostosowywanie punktu końcowego HTTP
Domyślnie podczas tworzenia funkcji wyzwalacza HTTP funkcja jest adresowalna przy użyciu trasy formularza:
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.
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.
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.
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.
Środowisko uruchomieniowe usługi Functions udostępnia treść żądania z context obiektu. W poniższym przykładzie pokazano, jak odczytywać parametry trasy z pliku context.bindingData.
JavaScript
module.exports = asyncfunction (context, req) {
var category = context.bindingData.category;
var id = context.bindingData.id;
var message = `Category: ${category}, ID: ${id}`;
context.res = {
body: message;
}
}
Na przykład poniższy kod definiuje route właściwość wyzwalacza HTTP z dwoma parametrami category i id:
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 .
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 .
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.
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.
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.
C#
using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
publicstatic IActionResult Run(HttpRequest req, ILogger log)
{
ClaimsPrincipal identities = req.HttpContext.User;
// ...returnnew OkObjectResult();
}
Alternatywnie można po prostu dołączyć element ClaimsPrincipal jako dodatkowy parametr w podpisie funkcji:
C#
using System.Net;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using Newtonsoft.Json.Linq;
publicstaticvoidRun(JObject input, ClaimsPrincipal principal, ILogger log)
{
// ...return;
}
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 .
Autoryzacja jest domyślnie ustawiona na function 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 anonymouswartość , żą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:
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.
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 githubwartość . 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 jak https://<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/jpegstring 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.
Dołącz do serii meetup, aby tworzyć skalowalne rozwiązania sztucznej inteligencji oparte na rzeczywistych przypadkach użycia z innymi deweloperami i ekspertami.