Bagikan melalui


Pemicu HTTP Azure Functions

Pemicu HTTP memungkinkan Anda memanggil fungsi dengan permintaan HTTP. Anda dapat menggunakan pemicu HTTP untuk membuat API tanpa server dan merespons webhook.

Nilai pengembalian default untuk fungsi yang dipicu HTTP adalah:

  • HTTP 204 No Content dengan isi kosong di Functions 2.x dan versi yang lebih tinggi
  • HTTP 200 OK dengan isi kosong di Functions 1.x

Untuk mengubah respons HTTP, konfigurasikan pengikatan output.

Untuk informasi selengkapnya tentang pengikatan HTTP, lihat gambaran umum dan referensi pengikatan output.

Tip

Jika Anda berencana untuk menggunakan pengikatan HTTP atau WebHook, rencanakan untuk menghindari kekurangan port yang dapat disebabkan oleh pembuatan objek yang tidak tepat dari HttpClient. Untuk informasi selengkapnya, lihat Cara mengelola koneksi di Azure Functions.

Penting

Artikel ini menggunakan tab untuk mendukung beberapa versi model pemrograman Node.js. Model v4 umumnya tersedia dan dirancang untuk memiliki pengalaman yang lebih fleksibel dan intuitif untuk pengembang JavaScript dan TypeScript. Untuk detail selengkapnya tentang cara kerja model v4, lihat panduan pengembang Node.js Azure Functions. Untuk mempelajari selengkapnya tentang perbedaan antara v3 dan v4, lihat panduan migrasi.

Azure Functions mendukung dua model pemrograman untuk Python. Cara Anda menentukan pengikatan tergantung pada model pemrograman yang Anda pilih.

Model pemrograman Python v2 memungkinkan Anda menentukan pengikatan menggunakan dekorator langsung dalam kode fungsi Python Anda. Untuk informasi selengkapnya, lihat panduan pengembang Python.

Artikel ini mendukung kedua model pemrograman.

Contoh

Fungsi C# dapat dibuat dengan menggunakan salah satu mode C# berikut:

  • Model pekerja terisolasi: Fungsi C# terkompilasi yang berjalan dalam proses pekerja yang terisolasi dari runtime. Proses pekerja terisolasi diperlukan untuk mendukung fungsi C# yang berjalan pada versi LTS dan non-LTS .NET dan .NET Framework. Ekstensi untuk fungsi proses pekerja yang terisolasi menggunakan Microsoft.Azure.Functions.Worker.Extensions.* namespace layanan.
  • Model dalam proses: Fungsi C# yang dikompilasi yang berjalan dalam proses yang sama dengan runtime Functions. Dalam variasi model ini, Functions dapat dijalankan menggunakan scripting C#, yang didukung terutama untuk pengeditan portal C#. Ekstensi untuk fungsi dalam proses menggunakan Microsoft.Azure.WebJobs.Extensions.* namespace layanan.

Penting

Dukungan akan berakhir untuk model dalam proses pada 10 November 2026. Kami sangat menyarankan Agar Anda memigrasikan aplikasi Anda ke model pekerja yang terisolasi untuk dukungan penuh.

Kode dalam artikel ini kembali default ke sintaks .NET Core, digunakan dalam Functions versi 2.x dan yang lebih tinggi. Untuk informasi tentang sintaksis 1.x, lihat Templat fungsi 1.x.

Contoh berikut menunjukkan pemicu HTTP yang mengembalikan respons "hello, world" sebagai IActionResult, menggunakan integrasi ASP.NET Core di .NET Isolated:

[Function("HttpFunction")]
public IActionResult Run(
    [HttpTrigger(AuthorizationLevel.Anonymous, "get")] HttpRequest req)
{
    return new OkObjectResult($"Welcome to Azure Functions, {req.Query["name"]}!");
}

Contoh berikut menunjukkan pemicu HTTP yang mengembalikan respons "halo dunia" sebagai objek HttpResponseData:

[Function(nameof(HttpFunction))]
public static HttpResponseData Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequestData req,
    FunctionContext executionContext)
{
    var logger = executionContext.GetLogger(nameof(HttpFunction));
    logger.LogInformation("message logged");

    var response = req.CreateResponse(HttpStatusCode.OK);
    response.Headers.Add("Content-Type", "text/plain; charset=utf-8");
    response.WriteString("Welcome to .NET isolated worker !!");

    return response;
}

Bagian ini berisi contoh-contoh berikut:

Contoh berikut menunjukkan pengikatan pemicu HTTP.

Membacakan parameter dari string kueri

Contoh ini membaca parameter, bernama id, dari string kueri, dan menggunakannya untuk membuat dokumen JSON yang dikembalikan ke klien, dengan tipe konten application/json.

@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();
    }
}

Membaca isi dari permintaan POST

Contoh ini membaca isi permintaan POST, sebagai String, dan menggunakannya untuk membuat dokumen JSON yang dikembalikan ke klien, dengan tipe konten application/json.

    @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();
        }
    }

Membaca parameter dari rute

Contoh ini membaca parameter wajib, bernama id, dan parameter opsional name dari jalur rute, dan menggunakannya untuk membuat dokumen JSON yang dikembalikan ke klien, dengan jenis konten application/json.

@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();
    }
}

Membaca isi POJO dari permintaan POST

Berikut adalah kode untuk kelas, yang dirujuk ToDoItem dalam contoh ini:


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 + "}";
  }
}

Contoh ini membaca isi permintaan POST. Isi permintaan secara otomatis diuraikan serialisasinya menjadi objek ToDoItem, dan dikembalikan ke klien, dengan jenis konten application/json. Parameter ToDoItem diserialisasikan oleh runtime Functions ketika ditetapkan ke body properti HttpMessageResponse.Builder kelas.

@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();
    }
}

Contoh berikut menunjukkan fungsi TypeScript pemicu HTTP. Fungsi ini mencari name parameter baik dalam string kueri atau isi permintaan HTTP.

import { app, HttpRequest, HttpResponseInit, InvocationContext } from '@azure/functions';

export async function httpTrigger1(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> {
    context.log(`Http function processed request for url "${request.url}"`);

    const name = request.query.get('name') || (await request.text()) || 'world';

    return { body: `Hello, ${name}!` };
}

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: httpTrigger1,
});

Contoh berikut menunjukkan fungsi JavaScript pemicu HTTP. Fungsi ini mencari name parameter baik dalam string kueri atau isi permintaan HTTP.

const { app } = require('@azure/functions');

app.http('httpTrigger1', {
    methods: ['GET', 'POST'],
    authLevel: 'anonymous',
    handler: async (request, context) => {
        context.log(`Http function processed request for url "${request.url}"`);

        const name = request.query.get('name') || (await request.text()) || 'world';

        return { body: `Hello, ${name}!` };
    },
});

Contoh berikut menunjukkan pengikatan pemicu di file function.json dan fungsi PowerShell. Fungsi ini mencari name parameter baik dalam string kueri atau isi permintaan HTTP.

{
  "bindings": [
    {
      "authLevel": "function",
      "type": "httpTrigger",
      "direction": "in",
      "name": "Request",
      "methods": [
        "get",
        "post"
      ]
    },
    {
      "type": "http",
      "direction": "out",
      "name": "Response"
    }
  ]
}
using namespace System.Net

# Input bindings are passed in via param block.
param($Request, $TriggerMetadata)

# Write to the Azure Functions log stream.
Write-Host "PowerShell HTTP trigger function processed a request."

# Interact with query parameters or the body of the request.
$name = $Request.Query.Name
if (-not $name) {
    $name = $Request.Body.Name
}

$body = "This HTTP triggered function executed successfully. Pass a name in the query string or in the request body for a personalized response."

if ($name) {
    $body = "Hello, $name. This HTTP triggered function executed successfully."
}

# Associate values to output bindings by calling 'Push-OutputBinding'.
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body       = $body
})

Contoh ini menggunakan aliran HTTP untuk mengembalikan data respons yang dipotong.

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

Untuk mempelajari lebih lanjut, termasuk cara mengaktifkan aliran HTTP di proyek Anda, lihat Aliran HTTP.

Contoh ini menunjukkan pengikatan pemicu dan fungsi Python yang menggunakan pengikatan. Fungsi ini mencari name parameter baik dalam string kueri atau isi permintaan HTTP.

import azure.functions as func
import logging

app = func.FunctionApp()

@app.function_name(name="HttpTrigger1")
@app.route(route="hello", auth_level=func.AuthLevel.ANONYMOUS)
def test_function(req: func.HttpRequest) -> func.HttpResponse:
    logging.info('Python HTTP trigger function processed a request.')
    return func.HttpResponse(
        "This HTTP triggered function executed successfully.",
        status_code=200
        )

Atribut

Baik model pekerja yang terisolasi maupun model dalam proses menggunakan HttpTriggerAttribute untuk menentukan pengikatan pemicu. Skrip C# sebagai gantinya menggunakan file konfigurasi function.json seperti yang dijelaskan dalam panduan pembuatan skrip C#.

Dalam aplikasi fungsi model pekerja yang HttpTriggerAttribute terisolasi, mendukung parameter berikut:

Parameter Deskripsi
AuthLevel Menentukan kunci apa, jika ada, yang perlu ada pada permintaan untuk menjalankan fungsi. Untuk nilai yang didukung, lihat Tingkat otorisasi.
Metode Larik metode HTTP yang direspons oleh fungsi. Jika tidak ditentukan, fungsi merespons semua metode HTTP. Lihat mengkustomisasi titik akhir HTTP.
Rute Mendefinisikan templat rute, mengontrol URL permintaan mana yang merespons fungsi Anda. Nilai default jika tidak ada yang disediakan adalah <functionname>. Untuk informasi selengkapnya, lihat mengkustomisasi titik akhir HTTP.

Dekorator

Hanya berlaku untuk model pemrograman Python v2.

Untuk fungsi Python v2 yang ditentukan menggunakan dekorator, properti berikut untuk pemicu ditentukan dalam route dekorator, yang menambahkan pengikatan HttpTrigger dan HttpOutput:

Properti Deskripsi
route Rute untuk titik akhir http. Jika Tidak Ada, itu akan diatur ke nama fungsi jika ada atau nama fungsi python yang ditentukan pengguna.
trigger_arg_name Nama argumen untuk HttpRequest. Nilai defaultnya adalah 'req'.
binding_arg_name Nama argumen untuk HttpResponse. Nilai defaultnya adalah '$return'.
methods Tuple metode HTTP tempat fungsi merespons.
auth_level Menentukan kunci apa, jika ada, yang perlu ada pada permintaan untuk menjalankan fungsi.

Untuk fungsi Python yang ditentukan dengan menggunakan function.json, lihat bagian Konfigurasi .

Anotasi

Di pustaka runtime fungsi Java, gunakan anotasi HttpTrigger, yang mendukung pengaturan berikut:

Konfigurasi

Hanya berlaku untuk model pemrograman Python v1.

Tabel berikut menjelaskan properti yang bisa Anda atur pada objek yang options diteruskan ke app.http() metode .

Properti Deskripsi
authLevel Menentukan kunci apa, jika ada, yang perlu ada pada permintaan untuk menjalankan fungsi. Untuk nilai yang didukung, lihat Tingkat otorisasi.
metode Larik metode HTTP yang direspons oleh fungsi. Jika tidak ditentukan, fungsi merespons semua metode HTTP. Lihat mengkustomisasi titik akhir HTTP.
rute Mendefinisikan templat rute, mengontrol URL permintaan mana yang merespons fungsi Anda. Nilai default jika tidak ada yang disediakan adalah <functionname>. Untuk informasi selengkapnya, lihat mengkustomisasi titik akhir HTTP.

Tabel berikut menjelaskan properti konfigurasi pemicu yang Anda atur di file function.json, yang berbeda berdasarkan versi runtime.

Tabel berikut menjelaskan properti konfigurasi pengikatan yang Anda atur di file function.json.

Properti function.json Deskripsi
jenis Wajib - harus diatur ke httpTrigger.
arah Wajib - harus diatur ke in.
nama Wajib - nama variabel yang digunakan dalam kode fungsi untuk permintaan atau isi permintaan.
authLevel Menentukan kunci apa, jika ada, yang perlu ada pada permintaan untuk menjalankan fungsi. Untuk nilai yang didukung, lihat Tingkat otorisasi.
metode Larik metode HTTP yang direspons oleh fungsi. Jika tidak ditentukan, fungsi merespons semua metode HTTP. Lihat mengkustomisasi titik akhir HTTP.
rute Mendefinisikan templat rute, mengontrol URL permintaan mana yang merespons fungsi Anda. Nilai default jika tidak ada yang disediakan adalah <functionname>. Untuk informasi selengkapnya, lihat mengkustomisasi titik akhir HTTP.

Penggunaan

Bagian ini menjelaskan cara mengonfigurasi pengikatan fungsi pemicu HTTP Anda.

Anotasi HttpTrigger harus diterapkan ke parameter metode dari salah satu jenis berikut:

  • HttpRequestMessage<T>.
  • Setiap jenis Java asli seperti int, String, byte[].
  • Nilai yang dapat diubah ke null menggunakan Opsional.
  • Jenis plain-old Java object (POJO).

Payload

Jenis input pemicu dinyatakan sebagai salah satu jenis berikut:

Tipe Deskripsi
HttpRequest Penggunaan jenis ini mengharuskan aplikasi dikonfigurasi dengan integrasi ASP.NET Core di .NET Isolated.
Ini memberi Anda akses penuh ke objek permintaan dan HttpContext secara keseluruhan.
HttpRequestData Proyeksi objek permintaan.
Jenis kustom Ketika isi permintaan adalah JSON, runtime mencoba mengurainya untuk mengatur properti objek.

Ketika parameter pemicu berjenis HttpRequestData atau HttpRequest, jenis kustom juga dapat terikat ke parameter lain menggunakan Microsoft.Azure.Functions.Worker.Http.FromBodyAttribute. Penggunaan atribut ini memerlukan Microsoft.Azure.Functions.Worker.Extensions.Http versi 3.1.0 atau yang lebih baru. Ini adalah jenis yang berbeda dari atribut serupa di Microsoft.AspNetCore.Mvc. Saat menggunakan integrasi ASP.NET Core, Anda memerlukan referensi atau using pernyataan yang sepenuhnya memenuhi syarat. Contoh ini menunjukkan cara menggunakan atribut untuk mendapatkan konten isi saja sambil masih memiliki akses ke lengkap HttpRequest, menggunakan integrasi ASP.NET Core:

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

Mengkustomisasi titik akhir HTTP

Secara default saat Anda membuat fungsi untuk pemicu HTTP, fungsi tersebut dapat diatasi dengan rute formulir:

https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>

Anda dapat menyesuaikan rute ini menggunakan properti route opsional pada pengikatan input pemicu HTTP. Anda dapat menggunakan Batasan Rute API Web apa pun dengan parameter Anda.

Kode fungsi berikut menerima dua parameter category dan id dalam rute dan menulis respons menggunakan kedua parameter.

[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;
}

Parameter rute ditentukan menggunakan pengaturan route dari anotasi HttpTrigger. Kode fungsi berikut menerima dua parameter category dan id dalam rute dan menulis respons menggunakan kedua parameter.

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

Sebagai contoh, kode TypeScript berikut menentukan route properti untuk pemicu HTTP dengan dua parameter, category dan id. Contoh membaca parameter dari permintaan dan mengembalikan nilainya dalam respons.

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

Sebagai contoh, kode JavaScript berikut mendefinisikan route properti untuk pemicu HTTP dengan dua parameter, category dan id. Contoh membaca parameter dari permintaan dan mengembalikan nilainya dalam respons.

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}` };
    },
});

Sebagai contoh, kode berikut menentukan route properti untuk pemicu HTTP dengan dua parameter, category dan id:

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

Parameter rute yang dinyatakan dalam file function.json dapat diakses sebagai properti objek $Request.Params.

$Category = $Request.Params.category
$Id = $Request.Params.id

$Message = "Category:" + $Category + ", ID: " + $Id

Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
    StatusCode = [HttpStatusCode]::OK
    Body = $Message
})

Konteks eksekusi fungsi diekspos melalui parameter yang dinyatakan sebagai func.HttpRequest. Instans ini memungkinkan suatu fungsi untuk mengakses parameter rute data, nilai string kueri, dan metode yang memungkinkan Anda mengembalikan respons HTTP.

Setelah didefinisikan, parameter rute tersedia untuk fungsi dengan memanggil metoderoute_params.

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)

Dengan menggunakan konfigurasi ini, fungsi ini sekarang dapat diatasi dengan rute berikut, alih-alih rute asli.

https://<APP_NAME>.azurewebsites.net/api/products/electronics/357

Konfigurasi ini memungkinkan kode fungsi untuk mendukung dua parameter dalam alamat, kategori, dan ID. Untuk informasi selengkapnya tentang bagaimana parameter rute ditokenisasi dalam URL, lihat Perutean di ASP.NET Core.

Secara default, semua rute fungsi diawali dengan api. Anda juga dapat menyesuaikan atau menghapus awalan menggunakan properti extensions.http.routePrefix di file host.json Anda. Contoh berikut menghapus awalan api rute dengan menggunakan string kosong untuk awalan dalam file host.json .

{
    "extensions": {
        "http": {
            "routePrefix": ""
        }
    }
}

Menggunakan parameter rute

Parameter rute yang mendefinisikan pola route fungsi tersedia untuk setiap pengikatan. Misalnya, jika Anda memiliki rute yang ditetapkan sebagai "route": "products/{id}" maka pengikatan penyimpanan tabel dapat menggunakan nilai parameter {id} dalam konfigurasi pengikatan.

Konfigurasi berikut menunjukkan bagaimana {id}parameter diteruskan ke pengikatan rowKey.

@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}"
}

Saat Anda menggunakan parameter rute, sebuah invoke_URL_template secara otomatis dibuat untuk fungsi Anda. Klien Anda dapat menggunakan templat URL untuk memahami parameter yang mereka butuhkan untuk meneruskan URL saat memanggil fungsi Anda menggunakan URL-nya. Navigasi ke salah satu fungsi yang dipicu HTTP Anda di portal Microsoft Azure dan pilih Dapatkan URL fungsi.

Anda dapat mengakses invoke_URL_template secara terprogram dengan menggunakan API Azure Resource Manager untuk Fungsi Daftar atau Fungsi Get.

Aliran HTTP

Anda sekarang dapat melakukan streaming permintaan ke dan respons dari titik akhir HTTP Anda di aplikasi fungsi Node.js v4. Untuk informasi selengkapnya, lihat Aliran HTTP.

Aliran HTTP

Dukungan aliran HTTP di Python memungkinkan Anda menerima dan mengembalikan data dari titik akhir HTTP Anda menggunakan API permintaan dan respons FastAPI yang diaktifkan dalam fungsi Anda. API ini memungkinkan host memproses data dalam pesan HTTP sebagai gugus alih-alih harus membaca seluruh pesan ke dalam memori. Untuk informasi selengkapnya, lihat Aliran HTTP di Python

Penting

Dukungan aliran HTTP untuk Python saat ini dalam pratinjau dan hanya didukung untuk model pemrograman Python v2.

Bekerja dengan identitas klien

Jika aplikasi fungsi Anda menggunakan Autentikasi/Otorisasi App Service,Anda dapat melihat informasi tentang klien yang diautentikasi dari kode Anda. Informasi ini tersedia sebagai header permintaan yang disuntikkan oleh platform.

Anda juga dapat membaca informasi ini dari data pengikatan.

Catatan

Akses ke informasi klien terautentikasi saat ini hanya tersedia untuk bahasa .NET. Ini juga tidak didukung dalam runtime Functions versi 1.x.

Informasi mengenai klien yang diautentikasi tersedia sebagai ClaimsPrincipal, yang tersedia sebagai bagian dari konteks permintaan seperti yang ditunjukkan pada contoh berikut:

Pengguna yang diautentikasi tersedia melalui Header HTTP.

Pengguna yang diautentikasi tersedia melalui Header HTTP.

Tingkat otorisasi

Tingkat otorisasi adalah nilai string yang menunjukkan jenis kunci otorisasi yang diperlukan untuk mengakses titik akhir fungsi. Untuk fungsi yang dipicu HTTP, tingkat otorisasi dapat berupa salah satu dari nilai berikut:

Nilai tingkat Deskripsi
anonim Tidak diperlukan kunci akses.
fungsi Kunci khusus fungsi diperlukan untuk mengakses titik akhir.
admin Kunci master diperlukan untuk mengakses titik akhir.

Saat tingkat tidak diatur secara eksplisit, otorisasi default ke tingkat tersebut function .

Saat tingkat tidak diatur secara eksplisit, otorisasi default bergantung pada versi model Node.js:

Otorisasi default ke anonymous tingkat .

Kunci akses fungsi

Functions memungkinkan Anda menggunakan kunci akses untuk mempersulit akses titik akhir fungsi Anda. Kecuali tingkat otorisasi pada fungsi yang dipicu HTTP diatur ke anonymous, permintaan harus menyertakan kunci akses dalam permintaan. Untuk informasi selengkapnya, lihat Bekerja dengan kunci akses di Azure Functions.

Otorisasi kunci akses

Sebagian besar templat pemicu HTTP memerlukan kunci akses dalam permintaan. Jadi permintaan HTTP Anda biasanya akan terlihat seperti URL berikut:

https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?code=<API_KEY>

Kunci dapat disertakan dalam variabel string kueri bernama code, seperti yang disebutkan sebelumnya. Ini juga dapat dimasukkan dalam header HTTP x-functions-key. Nilai kunci dapat menjadi kunci fungsi apa pun yang ditentukan untuk fungsi, atau kunci host apa pun.

Anda dapat mengizinkan permintaan anonim, yang tidak memerlukan kunci. Anda juga dapat mengharuskan kunci master untuk digunakan. Anda mengubah tingkat otorisasi default dengan menggunakan properti authLevel di JSON yang mengikat.

Catatan

Saat menjalankan fungsi secara lokal, otorisasi dinonaktifkan terlepas dari pengaturan tingkat otorisasi yang ditentukan. Setelah menerbitkan ke Azure, pengaturan authLevel di pemicu Anda diberlakukan. Kunci masih diperlukan saat menjalankan secara lokal dalam kontainer.

Webhook

Catatan

Mode webhook hanya tersedia untuk versi 1.x dari runtime Fungsi. Perubahan ini dilakukan untuk meningkatkan kinerja pemicu HTTP pada versi 2.x dan yang lebih tinggi.

Di versi 1.x, templat webhook menyediakan validasi lain untuk payload webhook. Dalam versi 2.x dan yang lebih tinggi, pemicu HTTP dasar masih berfungsi dan merupakan pendekatan yang disarankan untuk webhook.

Jenis WebHook

Properti pengikatan webHookType menunjukkan jenis jika webhook didukung oleh fungsi, yang juga menentukan payload yang didukung. Jenis webhook bisa menjadi salah satu nilai berikut:

Ketik nilai Deskripsi
genericJson Titik akhir webhook tujuan umum tanpa logika untuk penyedia tertentu. Pengaturan ini membatasi permintaan hanya untuk mereka yang menggunakan HTTP POST dan dengan jenis konten application/json.
github Fungsi ini merespons webhook GitHub. Jangan gunakan properti authLevel dengan webhook GitHub.
slack Fungsi ini merespons webhook Slack. Jangan gunakan properti authLevel dengan webhook Slack.

Saat mengatur properti webHookType, jangan juga mengatur properti methods pada pengikatan.

Webhook GitHub

Untuk merespons webhook GitHub, pertama-tama buatlah fungsi Anda dengan Pemicu HTTP, dan atur properti webHookType ke github. Kemudian salin URL dan kunci API-nya ke halaman Tambahkan webhook dari repositori GitHub Anda.

Cuplikan layar yang memperlihatkan cara menambahkan webhook untuk fungsi Anda.

Webhook Slack

Webhook Slack menghasilkan token untuk Anda, alih-alih membiarkan Anda menentukannya. Jadi, Anda harus mengonfigurasi kunci spesifik fungsi dengan token dari Slack. Lihat Kunci otorisasi.

Webhook dan kunci

Otorisasi webhook ditangani oleh komponen penerima webhook, bagian dari pemicu HTTP, dan mekanismenya bervariasi menurut jenis webhook. Setiap mekanisme mengandalkan satu kunci. Secara default, kunci fungsi bernama "default" digunakan. Untuk menggunakan kunci lain, konfigurasikan penyedia webhook untuk mengirim nama kunci dengan permintaan dengan salah satu cara berikut:

  • String kueri: Penyedia meneruskan nama kunci dalam clientid parameter string kueri, seperti https://<APP_NAME>.azurewebsites.net/api/<FUNCTION_NAME>?clientid=<KEY_NAME>.
  • Header permintaan: Penyedia meneruskan nama kunci di header x-functions-clientid.

Jenis konten

Meneruskan data biner dan formulir ke fungsi non-C# mengharuskan Anda menggunakan header tipe konten yang sesuai. Jenis konten yang didukung termasuk octet-stream untuk data biner dan jenis multibagian.

Masalah umum

Dalam fungsi non-C#, permintaan yang dikirim dengan jenis konten image/jpeg menghasilkan nilai string yang diteruskan ke fungsi. Dalam kasus seperti ini, Anda dapat mengonversi nilai string menjadi larik byte secara manual untuk mengakses data biner mentah.

Batas

Panjang permintaan HTTP dibatasi hingga 100 MB (104.857.600 byte), dan panjang URL dibatasi hingga 4 KB (4.096 byte). Batas ini ditentukan oleh elemen httpRuntime dari runtime file Web.config.

Jika fungsi yang menggunakan pemicu HTTP tidak selesai dalam 230 detik, Azure Load Balancer akan kehabisan waktu dan mengembalikan kesalahan HTTP 502. Fungsi ini akan terus berjalan tetapi tidak akan dapat mengembalikan respons HTTP. Untuk fungsi jangka panjang, kami sarankan Anda mengikuti pola asinkron dan mengembalikan lokasi di mana Anda dapat melakukan ping status permintaan. Untuk informasi tentang berapa lama suatu fungsi dapat berjalan, lihat Skala dan hosting - paket Konsumsi.

Langkah berikutnya