Aracılığıyla paylaş


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 ile
  • HTTP 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:

Aşağıdaki örneklerde HTTP tetikleyici bağlaması gösterilmektedir.

Sorgu dizesinden parametre okuma

Bu örnekte sorgu dizesinden adlı idbir parametre okunur ve istemciye döndürülen ve içerik türüne application/jsonsahip 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 Stringokur ve istemciye döndürülen ve içerik türüne application/jsonsahip 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ı idzorunlu 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/jsonsahip 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/jsondö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 httpTriggerayarlanmalıdır.
direction Gerekli - olarak inayarlanmalı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 HttpRequesttüründe HttpRequestData olduğunda, özel türler kullanılarak Microsoft.Azure.Functions.Worker.Http.FromBodyAttributediğ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:

@app.function_name(name="httpTrigger")
@app.route(route="products/{category:alpha}/{id:int?}")

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.HttpRequestbildirilen 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.

@app.table_input(arg_name="product", table_name="products", 
                 row_key="{id}", partition_key="products",
                 connection="AzureWebJobsStorage")
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:

Yetkilendirme varsayılan olarak düzeyine sahiptir anonymous .

İş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 anonymousayarlanmadığı 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ı codebir 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 githubayarlayın. Ardından URL'sini ve API anahtarını GitHub deponuzun Web kancası ekle sayfasına kopyalayın.

İşleviniz için web kancası eklemeyi gösteren ekran görüntüsü.

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 parametresine clientid 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ı.

Sonraki adımlar