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 tinggiHTTP 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:
- Membacakan parameter dari string kueri
- Membaca isi dari permintaan POST
- Membaca parameter dari rute
- Membaca badan POJO dari permintaan POST
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
:
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
.
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:
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.
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, sepertihttps://<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
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk