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ştir:


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
})

Aşağıdaki ö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. Örnek, v1 veya v2 Python programlama modelini kullanıp kullanmadığınıza bağlıdır.

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 işlem içi hem de yalıtılmış çalışan işlemi C# kitaplıkları 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 işlemi 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 bir HttpRequestDataHttpRequestolduğunda, özel türler kullanılarak Microsoft.Azure.Functions.Worker.Http.FromBodyAttributeek 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 Microsoft.AspNetCore.Mvcbenzer öznitelikten farklı bir türdür ve ASP.NET Core tümleştirmesi kullanırken tam başvuru veya using deyim gerekir. Aşağıdaki ö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ı routeHttpTrigger 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ı api ile öneklenir. 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 api yol ön ekini kaldırır.

{
    "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ı (önizleme)

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

İ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. Bu özellik yalnızca 2.x ve üzeri sürümlerde İşlevler çalışma zamanı tarafından kullanılabilir. Şu anda yalnızca .NET dillerinde de kullanılabilir.

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 API anahtarı gerekmez. Bu, bir düzey özel olarak ayarlı olmadığında varsayılan değerdir.
Işlev İşleve özgü BIR API anahtarı gereklidir.
Yönetici Ana anahtar gereklidir.
Düzey değeri Açıklama
Anonim API anahtarı gerekmez.
Işlev İşleve özgü BIR API anahtarı gereklidir. Bu, bir düzey özel olarak ayarlı olmadığında varsayılan değerdir.
Yönetici Ana anahtar gereklidir.

İşlev erişim anahtarları

İşlevler, geliştirme sırasında HTTP işlev uç noktalarınıza erişmenizi zorlaştırmak için anahtarları kullanmanıza olanak tanır. HTTP ile tetiklenen bir işlevdeki HTTP erişim düzeyi olarak anonymousayarlanmadığı sürece, istekler isteğe bir API erişim anahtarı içermelidir.

Anahtarlar varsayılan bir güvenlik mekanizması sağlarken, üretimde bir HTTP uç noktasının güvenliğini sağlamak için diğer seçenekleri göz önünde bulundurmak isteyebilirsiniz. Örneğin, ortak uygulamalarda paylaşılan gizli dizi dağıtmak iyi bir uygulama değildir. İşleviniz bir genel istemciden çağrılırsa, başka bir güvenlik mekanizması uygulamayı düşünebilirsiniz. Daha fazla bilgi edinmek için bkz . Üretimde HTTP uç noktasının güvenliğini sağlama.

İşlev anahtarı değerlerinizi yenilediğinizde, güncelleştirilmiş anahtar değerlerini işlevinizi çağıran tüm istemcilere el ile yeniden dağıtmanız gerekir.

Yetkilendirme kapsamları (işlev düzeyi)

İşlev düzeyi anahtarları için iki erişim kapsamı vardır:

  • İşlev: Bu anahtarlar yalnızca tanımlandığı belirli işlevler için geçerlidir. API anahtarı olarak kullanıldığında, bunlar yalnızca bu işleve erişime izin verir.

  • Konak: Konak kapsamına sahip anahtarlar, işlev uygulamasındaki tüm işlevlere erişmek için kullanılabilir. API anahtarı olarak kullanıldığında, bunlar işlev uygulamasındaki herhangi bir işleve erişime izin verir.

Her anahtar başvuru için adlandırılır ve işlev ve konak düzeyinde bir varsayılan anahtar ("varsayılan" olarak adlandırılır) vardır. İşlev tuşları konak anahtarlara göre önceliklidir. aynı adla iki anahtar tanımlandığında, işlev anahtarı her zaman kullanılır.

Ana anahtar (yönetici düzeyi)

Her işlev uygulamasının adlı _masteryönetici düzeyinde bir ana bilgisayar anahtarı da vardır. Ana anahtar, uygulamadaki tüm işlevlere konak düzeyinde erişim sağlamanın yanı sıra çalışma zamanı REST API'lerine yönetici erişimi de sağlar. Bu anahtar iptal edilemiyor. bir erişim düzeyi adminayarladığınızda, istekler ana anahtarı kullanmalıdır; diğer tüm anahtarlar erişim hatasına neden olur.

Dikkat

İşlev uygulamanızda ana anahtar tarafından verilen yükseltilmiş izinler nedeniyle, bu anahtarı üçüncü taraflarla paylaşmamanız veya yerel istemci uygulamalarında dağıtmamanız gerekir. Yönetici erişim düzeyini seçerken dikkatli olun.

Anahtarları alma

Anahtarlar Azure'da işlev uygulamanızın bir parçası olarak depolanır ve beklemede şifrelenir. Anahtarlarınızı görüntülemek, yenilerini oluşturmak veya yeni değerlerin anahtarlarını almak için Azure portalında HTTP ile tetiklenen işlevlerden birine gidin ve İşlev Anahtarları'nı seçin.

Konak anahtarlarını da yönetebilirsiniz. Azure portalında işlev uygulamasına gidin ve Uygulama anahtarları'nı seçin.

Azure Resource Manager API'lerini kullanarak işlev ve konak anahtarlarını program aracılığıyla alabilirsiniz. İşlev Anahtarlarını ve Liste Konak Anahtarlarını Listelemek için API'ler vardır ve dağıtım yuvalarını kullanırken eşdeğer API'ler Liste İşlev Anahtarları Yuvası ve Liste Ana Bilgisayar Anahtarları Yuvası'dır.

Ayrıca İşlev Gizli Dizisini Oluştur veya Güncelleştir, İşlev Gizli Dizisini Oluştur veya Güncelleştir, Konak Gizli Dizisini Oluştur veya Güncelleştir ve Konak Gizli Dizisi Yuva API'lerini Oluştur veya Güncelleştir'i kullanarak program aracılığıyla yeni işlev ve konak anahtarları oluşturabilirsiniz.

İşlev ve konak anahtarları, İşlev Gizli Dizisini Sil, İşlev Gizli Dizisini Sil, Konak Gizli Dizisini Sil ve Konak Gizli Dizisi Yuva API'lerini Sil kullanılarak program aracılığıyla silinebilir.

İşlev anahtarlarını almak için eski anahtar yönetimi API'lerini de kullanabilirsiniz, ancak bunun yerine Azure Resource Manager API'lerini kullanmanız önerilir.

API anahtar yetkilendirmesi

ÇOĞU HTTP tetikleyicisi şablonu, istekte bir API 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, yukarıda olduğu 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. Daha fazla bilgi için bkz . Tetikleyici - yapılandırma.

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.

Üretimde HTTP uç noktasının güvenliğini sağlama

Üretimdeki işlev uç noktalarınızın güvenliğini tam olarak sağlamak için aşağıdaki işlev uygulama düzeyi güvenlik seçeneklerinden birini uygulamayı düşünmelisiniz. Bu işlev uygulama düzeyi güvenlik yöntemlerinden birini kullanırken, HTTP ile tetiklenen işlev yetkilendirme düzeyini olarak anonymousayarlamanız gerekir.

App Service Kimlik Doğrulamasını/Yetkilendirmesini Etkinleştirme

App Service platformu, istemcilerin kimliğini doğrulamak için Microsoft Entra Id ve birkaç üçüncü taraf kimlik sağlayıcısı kullanmanıza olanak tanır. İşlevleriniz için özel yetkilendirme kuralları uygulamak için bu stratejiyi kullanabilir ve işlev kodunuzdan kullanıcı bilgileriyle çalışabilirsiniz. Daha fazla bilgi edinmek için bkz. Azure Uygulaması Hizmetinde kimlik doğrulaması ve yetkilendirme ve İstemci kimlikleriyle çalışma.

İsteklerin kimliğini doğrulamak için Azure API Management'ı (APIM) kullanma

APIM, gelen istekler için çeşitli API güvenlik seçenekleri sağlar. Daha fazla bilgi edinmek için bkz . API Management kimlik doğrulama ilkeleri. APIM'yi kullandığınızda işlev uygulamanızı yalnızca APIM örneğinizin IP adresinden gelen istekleri kabul etmek üzere yapılandırabilirsiniz. Daha fazla bilgi edinmek için bkz . IP adresi kısıtlamaları.

İşlev uygulamanızı yalıtarak dağıtma

Azure Uygulaması Hizmet Ortamı (ASE), işlevlerinizin çalıştırıldığı özel bir barındırma ortamı sağlar. ASE, tüm gelen isteklerin kimliğini doğrulamak için kullanabileceğiniz tek bir ön uç ağ geçidi yapılandırmanızı sağlar. Daha fazla bilgi için bkz. App Service Ortamı için Web Uygulaması Güvenlik Duvarı (WAF) yapılandırma.

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 ek 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 httpRuntimeWeb.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