HTTP tetikleyicisi Azure İşlevleri
HTTP tetikleyicisi, HTTP isteği olan bir işlevi çağırmanıza olanak tanır. Sunucusuz API'ler oluşturmak ve web kancalarına yanıt vermek için HTTP tetikleyicisi kullanabilirsiniz.
HTTP ile tetiklenen bir işlevin varsayılan dönüş değeri:
HTTP 204 No Content
İşlevler 2.x ve üzeri sürümlerde boş gövde ileHTTP 200 OK
İşlevler 1.x'te boş bir gövde ile
HTTP yanıtını değiştirmek için bir çıkış bağlaması yapılandırın.
HTTP bağlamaları hakkında daha fazla bilgi için genel bakış ve çıkış bağlama başvurusuna bakın.
İpucu
HTTP veya Web Kancası bağlamalarını kullanmayı planlıyorsanız, yanlış örnek oluşturmanın neden olabileceği bağlantı noktası tükenmesini önlemeyi planlayın HttpClient
. Daha fazla bilgi için bkz. Azure İşlevleri'da bağlantıları yönetme.
Önemli
Bu makalede, Node.js programlama modelinin birden çok sürümünü desteklemek için sekmeler kullanılır. Genel kullanıma sunulan v4 modeli, JavaScript ve TypeScript geliştiricileri için daha esnek ve sezgisel bir deneyime sahip olacak şekilde tasarlanmıştır. v4 modelinin nasıl çalıştığı hakkında daha fazla bilgi için Azure İşlevleri Node.js geliştirici kılavuzuna bakın. v3 ile v4 arasındaki farklar hakkında daha fazla bilgi edinmek için geçiş kılavuzuna bakın.
Azure İşlevleri, Python için iki programlama modelini destekler. Bağlamalarınızı tanımlama şekliniz seçtiğiniz programlama modeline bağlıdır.
Python v2 programlama modeli, doğrudan Python işlev kodunuzda dekoratörleri kullanarak bağlamaları tanımlamanıza olanak tanır. Daha fazla bilgi için bkz . Python geliştirici kılavuzu.
Bu makale her iki programlama modelini de destekler.
Örnek
C# işlevi aşağıdaki C# modlarından biri kullanılarak oluşturulabilir:
- Yalıtılmış çalışan modeli: Çalışma zamanından yalıtılmış bir çalışan işleminde çalışan derlenmiş C# işlevi. LTS ve .NET ve .NET Framework dışındaki sürümlerde çalışan C# işlevlerini desteklemek için yalıtılmış çalışan işlemi gereklidir. Yalıtılmış çalışan işlemi işlevleri için uzantılar ad alanlarını kullanır
Microsoft.Azure.Functions.Worker.Extensions.*
. - İşlem içi model: İşlevler çalışma zamanıyla aynı işlemde çalışan derlenmiş C# işlevi. Bu modelin bir varyasyonunda, İşlevler öncelikle C# portalı düzenleme için desteklenen C# betiği kullanılarak çalıştırılabilir. İşlem içi işlevlerin uzantıları ad alanlarını kullanır
Microsoft.Azure.WebJobs.Extensions.*
.
Önemli
İşlem içi model desteği 10 Kasım 2026'da sona erecektir. Tam destek için uygulamalarınızı yalıtılmış çalışan modeline geçirmenizi kesinlikle öneririz.
Bu makaledeki kod varsayılan olarak İşlevler sürüm 2.x ve sonraki sürümlerde kullanılan .NET Core söz dizimidir. 1.x söz dizimi hakkında bilgi için 1.x işlev şablonlarına bakın.
Aşağıdaki örnekte, .NET Yalıtılmış'da ASP.NET Core tümleştirmesini kullanarak IActionResult olarak "hello, world" yanıtı döndüren bir HTTP tetikleyicisi gösterilmektedir:
[Function("HttpFunction")]
public IActionResult Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}
Aşağıdaki örnekte, HttpResponseData nesnesi olarak "hello world" yanıtı döndüren bir HTTP tetikleyicisi gösterilmektedir :
[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;
}
Bu bölüm aşağıdaki örnekleri içerir:
- Sorgu dizesinden parametre okuma
- POST isteğinden gövde okuma
- Bir rotadan parametre okuma
- POST isteğinden POJO gövdesini okuma
Aşağıdaki örneklerde HTTP tetikleyici bağlaması gösterilmektedir.
Sorgu dizesinden parametre okuma
Bu örnekte sorgu dizesinden adlı id
bir parametre okunur ve istemciye döndürülen ve içerik türüne application/json
sahip bir JSON belgesi oluşturmak için kullanılır.
@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();
}
}
POST isteğinden gövde okuma
Bu örnek, bir POST isteğinin gövdesini olarak String
okur ve istemciye döndürülen ve içerik türüne application/json
sahip bir JSON belgesi oluşturmak için kullanır.
@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();
}
}
Bir rotadan parametre okuma
Bu örnek, adlı id
zorunlu bir parametreyi ve yol yolundan isteğe bağlı bir parametreyi name
okur ve bunları istemciye döndürülen ve içerik türüne application/json
sahip bir JSON belgesi oluşturmak için kullanır.
@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();
}
}
POST isteğinden POJO gövdesini okuma
Bu örnekte başvuruda bulunan sınıfın ToDoItem
kodu aşağıda verilmişti:
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 + "}";
}
}
Bu örnekte POST isteğinin gövdesi okunur. İstek gövdesi otomatik olarak bir ToDoItem
nesnede seri durumdan çıkarılır ve istemciye, içerik türüyle application/json
döndürülür. ToDoItem
parametresi, sınıfın özelliğine HttpMessageResponse.Builder
atandığı için body
İşlevler çalışma zamanı tarafından serileştirilir.
@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();
}
}
Aşağıdaki örnekte bir HTTP tetikleyicisi TypeScript işlevi gösterilmektedir. İşlev, sorgu dizesinde veya HTTP isteğinin gövdesinde bir name
parametre arar.
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,
});
Aşağıdaki örnekte bir HTTP tetikleyicisi JavaScript işlevi gösterilmektedir. İşlev, sorgu dizesinde veya HTTP isteğinin gövdesinde bir name
parametre arar.
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}!` };
},
});
Aşağıdaki örnekte, bir function.json dosyasında ve PowerShell işlevinde tetikleyici bağlaması gösterilmektedir. İşlev, sorgu dizesinde veya HTTP isteğinin gövdesinde bir name
parametre arar.
{
"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
})
Bu örnekte öbeklenmiş yanıt verilerini döndürmek için HTTP akışları kullanılır.
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")
Projenizde HTTP akışlarını etkinleştirme de dahil olmak üzere daha fazla bilgi edinmek için bkz . HTTP akışları.
Bu örnekte bir tetikleyici bağlaması ve bağlamayı kullanan bir Python işlevi gösterilmektedir. İşlev, sorgu dizesinde veya HTTP isteğinin gövdesinde bir name
parametre arar.
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
)
Özellikler
Hem yalıtılmış çalışan modeli hem de işlem içi model tetikleyici bağlamasını tanımlamak için öğesini HttpTriggerAttribute
kullanır. Bunun yerine C# betiği, C# betik kılavuzunda açıklandığı gibi bir function.json yapılandırma dosyası kullanır.
Yalıtılmış çalışan modeli işlev uygulamalarında, HttpTriggerAttribute
aşağıdaki parametreleri destekler:
Parametreler | Açıklama |
---|---|
AuthLevel | İşlevi çağırmak için istekte hangi anahtarların bulunması gerektiğini belirler. Desteklenen değerler için bkz . Yetkilendirme düzeyi. |
Yöntemler | İşlevin yanıt verdiği HTTP yöntemlerinin dizisi. Belirtilmezse, işlev tüm HTTP yöntemlerine yanıt verir. Bkz . HTTP uç noktasını özelleştirme. |
Rota | İşlevinizin yanıt verdiği istek URL'lerini denetleyen rota şablonunu tanımlar. Hiçbiri sağlanmadıysa varsayılan değer olur <functionname> . Daha fazla bilgi için bkz . HTTP uç noktasını özelleştirme. |
Dekoratörler
Yalnızca Python v2 programlama modeli için geçerlidir.
Dekoratör kullanılarak tanımlanan Python v2 işlevleri için, tetikleyicinin aşağıdaki özellikleri dekoratörde route
tanımlanır ve bu da HttpTrigger ve HttpOutput bağlaması ekler:
Özellik | Açıklama |
---|---|
route |
Http uç noktası için yol. Yok ise, varsa işlev adı veya kullanıcı tanımlı python işlev adı olarak ayarlanır. |
trigger_arg_name |
HttpRequest için bağımsız değişken adı. Varsayılan değer :'req'. |
binding_arg_name |
HttpResponse için bağımsız değişken adı. Varsayılan değer :'$return'. |
methods |
İşlevin yanıt verdiği HTTP yöntemlerinin tanımlama grubu. |
auth_level |
İşlevi çağırmak için istekte hangi anahtarların bulunması gerektiğini belirler. |
function.json kullanılarak tanımlanan Python işlevleri için Yapılandırma bölümüne bakın.
Ek Açıklamalar
Java işlevleri çalışma zamanı kitaplığında, aşağıdaki ayarları destekleyen HttpTrigger ek açıklamasını kullanın:
Yapılandırma
Yalnızca Python v1 programlama modeli için geçerlidir.
Aşağıdaki tabloda, yöntemine geçirilen app.http()
nesnede options
ayarlayabileceğiniz özellikler açıklanmaktadır.
Özellik | Açıklama |
---|---|
authLevel | İşlevi çağırmak için istekte hangi anahtarların bulunması gerektiğini belirler. Desteklenen değerler için bkz . Yetkilendirme düzeyi. |
Yöntemler | İşlevin yanıt verdiği HTTP yöntemlerinin dizisi. Belirtilmezse, işlev tüm HTTP yöntemlerine yanıt verir. Bkz . HTTP uç noktasını özelleştirme. |
rota | İşlevinizin yanıt verdiği istek URL'lerini denetleyen rota şablonunu tanımlar. Hiçbiri sağlanmadıysa varsayılan değer olur <functionname> . Daha fazla bilgi için bkz . HTTP uç noktasını özelleştirme. |
Aşağıdaki tabloda, çalışma zamanı sürümüne göre farklılık gösteren function.json dosyasında ayarladığınız tetikleyici yapılandırma özellikleri açıklanmaktadır.
Aşağıdaki tabloda, function.json dosyasında ayarladığınız bağlama yapılandırma özellikleri açıklanmaktadır.
function.json özelliği | Açıklama |
---|---|
type | Gerekli - olarak httpTrigger ayarlanmalıdır. |
direction | Gerekli - olarak in ayarlanmalıdır. |
ad | Gerekli - istek veya istek gövdesi için işlev kodunda kullanılan değişken adı. |
authLevel | İşlevi çağırmak için istekte hangi anahtarların bulunması gerektiğini belirler. Desteklenen değerler için bkz . Yetkilendirme düzeyi. |
Yöntemler | İşlevin yanıt verdiği HTTP yöntemlerinin dizisi. Belirtilmezse, işlev tüm HTTP yöntemlerine yanıt verir. Bkz . HTTP uç noktasını özelleştirme. |
rota | İşlevinizin yanıt verdiği istek URL'lerini denetleyen rota şablonunu tanımlar. Hiçbiri sağlanmadıysa varsayılan değer olur <functionname> . Daha fazla bilgi için bkz . HTTP uç noktasını özelleştirme. |
Kullanım
Bu bölümde HTTP tetikleyici işlev bağlamanızı yapılandırma işlemi ayrıntılı olarak anlatılır.
HttpTrigger ek açıklaması aşağıdaki türlerden birinin yöntem parametresine uygulanmalıdır:
- HttpRequestMessage<T>.
- int, String, byte[] gibi herhangi bir yerel Java türü.
- İsteğe Bağlı'nın kullanıldığı null atanabilir değerler.
- Herhangi bir düz eski Java nesnesi (POJO) türü.
Yük
Tetikleyici giriş türü aşağıdaki türlerden biri olarak bildirilir:
Type | Açıklama |
---|---|
HttpRequest | Bu türün kullanılması, uygulamanın .NET Yalıtılmış'da ASP.NET Core tümleştirmesi ile yapılandırılmasını gerektirir. Bu, istek nesnesine ve genel HttpContext'e tam erişim sağlar. |
HttpRequestData | İstek nesnesinin projeksiyonu. |
Özel bir tür | İsteğin gövdesi JSON olduğunda, çalışma zamanı nesne özelliklerini ayarlamak için ayrıştırmaya çalışır. |
Tetikleyici parametresi veya HttpRequest
türünde HttpRequestData
olduğunda, özel türler kullanılarak Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute
diğer parametrelere de bağlanabilir. Bu özniteliğin kullanılması için sürüm 3.1.0 veya üzeri gerekirMicrosoft.Azure.Functions.Worker.Extensions.Http
. Bu, içindeki benzer öznitelikten farklı bir türdür Microsoft.AspNetCore.Mvc
. ASP.NET Core tümleştirmesini kullanırken tam başvuru veya using
deyim gerekir. Bu örnekte, ASP.NET Core tümleştirmesini kullanarak tam HttpRequest
öğesine erişmeye devam ederken yalnızca gövde içeriğini almak için özniteliğinin nasıl kullanılacağı gösterilmektedir:
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);
}
HTTP uç noktasını özelleştirme
Http tetikleyicisi için bir işlev oluşturduğunuzda, varsayılan olarak işlev formun bir yolu ile adreslenebilir:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>
HTTP tetikleyicisinin giriş bağlaması üzerindeki isteğe bağlı route
özelliğini kullanarak bu yolu özelleştirebilirsiniz. Parametrelerinizle herhangi bir Web API Yol Kısıtlaması kullanabilirsiniz.
Aşağıdaki işlev kodu, iki parametreyi kabul eder category
ve id
yolunda her iki parametreyi kullanarak bir yanıt yazar.
[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;
}
Yol parametreleri, ek açıklama ayarı route
HttpTrigger
kullanılarak tanımlanır. Aşağıdaki işlev kodu, iki parametreyi kabul eder category
ve id
yolunda her iki parametreyi kullanarak bir yanıt yazar.
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();
}
}
Örneğin, aşağıdaki TypeScript kodu iki parametreli category
bir HTTP tetikleyicisi için bir özellik tanımlar route
ve id
. Örnek, istekteki parametreleri okur ve yanıttaki değerlerini döndürür.
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,
});
Örneğin, aşağıdaki JavaScript kodu iki parametresi category
olan bir HTTP tetikleyicisi için bir özellik tanımlar route
ve id
. Örnek, istekteki parametreleri okur ve yanıttaki değerlerini döndürür.
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}` };
},
});
Örneğin, aşağıdaki kod iki parametreli category
bir HTTP tetikleyicisi için bir route
özellik tanımlar ve id
:
function.json dosyasında bildirilen yol parametrelerine nesnenin $Request.Params
özelliği olarak erişilebilir.
$Category = $Request.Params.category
$Id = $Request.Params.id
$Message = "Category:" + $Category + ", ID: " + $Id
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [HttpStatusCode]::OK
Body = $Message
})
İşlev yürütme bağlamı olarak func.HttpRequest
bildirilen bir parametre aracılığıyla kullanıma sunulur. Bu örnek, bir işlevin HTTP yanıtları döndürmenizi sağlayan veri yolu parametrelerine, sorgu dizesi değerlerine ve yöntemlerine erişmesine olanak tanır.
Tanımlandıktan sonra, yöntemi çağrılarak yol parametreleri işlevi tarafından route_params
kullanılabilir.
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)
Bu yapılandırma kullanıldığında işlev artık özgün yol yerine aşağıdaki yol ile adreslenebilir.
https://<APP_NAME>.azurewebsites.net/api/products/electronics/357
Bu yapılandırma, işlev kodunun adres, kategori ve kimlikte iki parametreyi desteklemesini sağlar. Yol parametrelerinin URL'de nasıl belirteç haline getirildiği hakkında daha fazla bilgi için bkz . ASP.NET Core'da yönlendirme.
Varsayılan olarak, tüm işlev yollarının ön eki vardır api
. Ayrıca, host.json dosyanızdaki özelliğini kullanarak extensions.http.routePrefix
ön eki özelleştirebilir veya kaldırabilirsiniz. Aşağıdaki örnek, host.json dosyasındaki ön ek için boş bir dize kullanarak yol ön ekini kaldırırapi
.
{
"extensions": {
"http": {
"routePrefix": ""
}
}
}
Yol parametrelerini kullanma
bir işlevin route
düzenini tanımlayan yol parametreleri her bağlama için kullanılabilir. Örneğin, tablo depolama bağlaması olarak "route": "products/{id}"
tanımlanmış bir yolunuz varsa bağlama yapılandırmasında parametresinin {id}
değerini kullanabilir.
Aşağıdaki yapılandırma, parametresinin {id}
bağlamanın rowKey
öğesine nasıl geçirildiğini gösterir.
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}"
}
Yol parametrelerini kullandığınızda, işleviniz için otomatik olarak bir invoke_URL_template
oluşturulur. İstemcileriniz, URL'sini kullanarak işlevinizi çağırırken URL'ye geçirmeleri gereken parametreleri anlamak için URL şablonunu kullanabilir. Azure portalında HTTP ile tetiklenen işlevlerden birine gidin ve İşlev URL'sini al'ı seçin.
Liste İşlevleri veya Get İşlevi için Azure Resource Manager API'lerini kullanarak program aracılığıyla erişebilirsinizinvoke_URL_template
.
HTTP akışları
Artık Node.js v4 işlev uygulamalarında HTTP uç noktanızdan istekleri ve yanıtları akışla aktarabilirsiniz. Daha fazla bilgi için bkz . HTTP akışları.
HTTP akışları
Python'daki HTTP akışları desteği, işlevlerinizde etkinleştirilen FastAPI isteği ve yanıt API'lerini kullanarak HTTP uç noktalarınızdan verileri kabul etmenizi ve döndürmenizi sağlar. Bu API'ler, konağın bir iletinin tamamını belleğe okumak yerine HTTP iletilerindeki verileri öbekler halinde işlemesini sağlar. Daha fazla bilgi için bkz. Python'da HTTP akışları
Önemli
Python için HTTP akışları desteği şu anda önizleme aşamasındadır ve yalnızca Python v2 programlama modeli için desteklenir.
İstemci kimlikleriyle çalışma
İşlev uygulamanız App Service Kimlik Doğrulaması / Yetkilendirme kullanıyorsa, kodunuzdan kimliği doğrulanmış istemciler hakkındaki bilgileri görüntüleyebilirsiniz. Bu bilgiler, platform tarafından eklenen istek üst bilgileri olarak kullanılabilir.
Bu bilgileri bağlama verilerinden de okuyabilirsiniz.
Not
Kimliği doğrulanmış istemci bilgilerine erişim şu anda yalnızca .NET dillerinde kullanılabilir. İşlevler çalışma zamanının 1.x sürümünde de desteklenmez.
Kimliği doğrulanmış istemciler ile ilgili bilgiler, aşağıdaki örnekte gösterildiği gibi istek bağlamının bir parçası olarak sağlanan ClaimsPrincipal olarak kullanılabilir:
Kimliği doğrulanmış kullanıcı HTTP Üst Bilgileri aracılığıyla kullanılabilir.
Kimliği doğrulanmış kullanıcı HTTP Üst Bilgileri aracılığıyla kullanılabilir.
Yetkilendirme düzeyi
Yetkilendirme düzeyi, işlev uç noktasına erişmek için gereken yetkilendirme anahtarı türünü gösteren bir dize değeridir. HTTP ile tetiklenen bir işlev için yetkilendirme düzeyi aşağıdaki değerlerden biri olabilir:
Düzey değeri | Açıklama |
---|---|
Anonim | Erişim anahtarı gerekmez. |
fonksiyon | Uç noktaya erişmek için işleve özgü bir anahtar gereklidir. |
Admin | Uç noktaya erişmek için ana anahtar gereklidir. |
Bir düzey açıkça ayarlı olmadığında, yetkilendirme varsayılan olarak düzeye ayarlanır function
.
Bir düzey açıkça ayarlı olmadığında, varsayılan yetkilendirme Node.js modelinin sürümüne bağlıdır:
İşlev erişim anahtarları
İşlevler, işlev uç noktalarınıza erişmeyi zorlaştırmak için erişim anahtarlarını kullanmanıza olanak tanır. HTTP ile tetiklenen bir işlevdeki yetkilendirme düzeyi olarak anonymous
ayarlanmadığı sürece istekler isteğe bir erişim anahtarı içermelidir. Daha fazla bilgi için bkz. Azure İşlevleri'da erişim anahtarlarıyla çalışma.
Erişim anahtarı yetkilendirmesi
ÇOĞU HTTP tetikleyicisi şablonu, istekte bir erişim anahtarı gerektirir. Dolayısıyla HTTP isteğiniz normalde aşağıdaki URL'ye benzer:
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>
Anahtar, daha önce belirtildiği gibi adlı code
bir sorgu dizesi değişkenine eklenebilir. Ayrıca bir x-functions-key
HTTP üst bilgisinde de bulunabilir. Anahtarın değeri, işlev için tanımlanan herhangi bir işlev anahtarı veya herhangi bir konak anahtarı olabilir.
Anahtar gerektirmeyen anonim isteklere izin vekleyebilirsiniz. Ana anahtarın kullanılmasını da zorunlu kılabilirsiniz. JSON bağlamasında özelliğini kullanarak authLevel
varsayılan yetkilendirme düzeyini değiştirirsiniz.
Not
İşlevler yerel olarak çalıştırılırken, belirtilen yetkilendirme düzeyi ayarından bağımsız olarak yetkilendirme devre dışı bırakılır. Azure'da authLevel
yayımladıktan sonra tetikleyicinizdeki ayar zorlanır. Bir kapsayıcıda yerel olarak çalıştırılırken anahtarlar hala gereklidir.
Web kancaları
Not
Web kancası modu yalnızca İşlevler çalışma zamanının 1.x sürümünde kullanılabilir. Bu değişiklik, 2.x ve üzeri sürümlerde HTTP tetikleyicilerinin performansını geliştirmek için yapılmıştır.
Sürüm 1.x'te, web kancası şablonları web kancası yükleri için başka bir doğrulama sağlar. 2.x ve üzeri sürümlerde temel HTTP tetikleyicisi çalışmaya devam eder ve web kancaları için önerilen yaklaşımdır.
Web Kancası türü
webHookType
Bağlama özelliği, web kancasının işlev tarafından desteklenip desteklenmediğini belirtir ve bu da desteklenen yükü dikte eder. Web kancası türü aşağıdaki değerlerden biri olabilir:
Tür değeri | Açıklama |
---|---|
genericJson |
Belirli bir sağlayıcı için mantığı olmayan genel amaçlı bir web kancası uç noktası. Bu ayar istekleri yalnızca HTTP POST kullananlarla ve içerik türüyle application/json kısıtlar. |
github |
İşlev GitHub web kancalarına yanıt verir. Özelliğini GitHub web kancalarıyla kullanmayın authLevel . |
slack |
İşlev Slack web kancalarına yanıt verir. Özelliğini Slack web kancalarıyla kullanmayın authLevel . |
Özelliği ayarlarken webHookType
, bağlamada methods
özelliğini de ayarlamayın.
GitHub web kancaları
GitHub web kancalarına yanıt vermek için, önce işlevinizi bir HTTP Tetikleyicisi ile oluşturun ve webHookType özelliğini olarak github
ayarlayın. Ardından URL'sini ve API anahtarını GitHub deponuzun Web kancası ekle sayfasına kopyalayın.
Slack web kancaları
Slack web kancası, belirteci belirtmenize izin vermek yerine sizin için bir belirteç oluşturur, bu nedenle Slack belirteciyle işleve özgü bir anahtar yapılandırmanız gerekir. Bkz. Yetkilendirme anahtarları.
Web kancaları ve anahtarlar
Web kancası yetkilendirmesi, HTTP tetikleyicisinin bir parçası olan web kancası alıcı bileşeni tarafından işlenir ve mekanizma web kancası türüne göre değişir. Her mekanizma bir anahtara dayanır. Varsayılan olarak, "default" adlı işlev anahtarı kullanılır. Farklı bir anahtar kullanmak için web kancası sağlayıcısını anahtar adını istekle birlikte aşağıdaki yollardan biriyle gönderecek şekilde yapılandırın:
- Sorgu dizesi: Sağlayıcı, anahtar adını gibi
https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>
sorgu dizesi parametresineclientid
geçirir. - İstek üst bilgisi: Sağlayıcı üst bilgideki
x-functions-clientid
anahtar adını geçirir.
İçerik türleri
İkili ve form verilerini C# olmayan bir işleve geçirmek için uygun içerik türü üst bilgisini kullanmanız gerekir. İkili veriler ve çok parçalı türler için desteklenen içerik türleri vardır.octet-stream
Bilinen sorunlar
C# olmayan işlevlerde, içerik türüyle image/jpeg
gönderilen istekler işleve geçirilen bir string
değerle sonuçlanmaktadır. Böyle durumlarda ham ikili verilere erişmek için değeri el ile bayt dizisine dönüştürebilirsiniz string
.
Sınırlar
HTTP isteğinin uzunluğu 100 MB (104.857.600 bayt) ve URL uzunluğu da 4 KB (4.096 bayt) ile sınırlıdır. Bu sınırlar çalışma zamanının httpRuntime
Web.config dosyasının öğesi tarafından belirtilir.
HTTP tetikleyicisini kullanan bir işlev 230 saniye içinde tamamlanmazsa, Azure Load Balancer zaman aşımına uğrar ve bir HTTP 502 hatası döndürür. İşlev çalışmaya devam eder ancak HTTP yanıtı döndüremez. Uzun süre çalışan işlevler için, zaman uyumsuz desenleri izlemenizi ve isteğin durumuna ping atabileceğiniz bir konum döndürmenizi öneririz. bir işlevin ne kadar süreyle çalışabileceği hakkında bilgi için bkz . Ölçeklendirme ve barındırma - Tüketim planı.