All Products
Search
Document Center

Function Compute:Gunakan Pemicu HTTP untuk memanggil fungsi

Last Updated:Sep 15, 2026

Pemicu HTTP mengekspos suatu fungsi sebagai titik akhir HTTP(S), yang disebut URL fungsi. Saat klien memanggil URL tersebut, Function Compute mengonversi permintaan HTTP menjadi objek event dan meneruskannya ke penanganan fungsi Anda. Setelah fungsi mengembalikan respons, Function Compute memetakan output tersebut kembali ke respons HTTP dan mengirimkannya ke klien.

Topik ini mencakup perilaku Pemicu HTTP pada runtime bawaan. Untuk runtime kustom, lihat Web functions.

Pada Function Compute 3.0, perilaku Pemicu HTTP pada runtime bawaan berbeda secara signifikan dibandingkan Function Compute 2.0. Untuk detailnya, lihat Cara kerja. Untuk runtime kustom dan runtime Custom Container, perilakunya tetap sama seperti pada Function Compute 2.0.

Cara kerja

image

Saat klien memanggil URL fungsi Anda:

  1. Function Compute memetakan permintaan HTTP ke objek event.

  2. Objek event diteruskan ke penanganan fungsi Anda.

  3. Setelah fungsi Anda mengembalikan respons, Function Compute memetakan output tersebut ke respons HTTP dan mengirimkannya kembali ke klien.

Struktur permintaan

Format

Function Compute memetakan permintaan HTTP masuk ke objek event dengan struktur berikut:

{
    "version": "v1",
    "rawPath": "/example",
    "body": "Hello FC!",
    "isBase64Encoded": false,
    "headers": {
        "header1": "value1",
        "header2": "value1,value2"
    },
    "queryParameters": {
        "parameter1": "value1",
        "parameter2": "value1,value2"
    },
    "requestContext": {
        "accountId": "123456*********",
        "domainName": "<http-trigger-id>.<region-id>.fcapp.run",
        "domainPrefix": "<http-trigger-id>",
        "http": {
            "method": "GET",
            "path": "/example",
            "protocol": "HTTP/1.1",
            "sourceIp": "11.11.11.**",
            "userAgent": "PostmanRuntime/7.32.3"
        },
        "requestId": "1-64f6cd87-*************",
        "time": "2023-09-05T06:41:11Z",
        "timeEpoch": "1693896071895"
    }
}

Parameter

Parameter Deskripsi Contoh
version Versi format payload. Satu-satunya nilai yang didukung adalah v1. v1
rawPath Path permintaan yang telah diencode URL. Untuk URL permintaan seperti https://{url-id}.{region}.fcapp.run/example, nilainya adalah /example. Untuk path yang telah didecode, lihat requestContext.http.path. /example
body Badan permintaan. Data biner diencode Base64. Hello FC!
isBase64Encoded Apakah badan permintaan diencode Base64. Nilai yang valid: true, false. false
headers Header permintaan dalam bentuk pasangan kunci-nilai. Jika suatu kunci memiliki beberapa nilai, nilai-nilai tersebut dipisahkan dengan koma. Di Function Compute 3.0, huruf pertama setiap kunci header diubah menjadi huruf kapital (normalisasi). Lihat Mengapa huruf pertama kunci header menjadi kapital saat saya menggunakan Pemicu HTTP untuk memanggil fungsi? {"Header1": "value1", "Header2": "value1,value2"}
queryParameters Parameter kueri dalam bentuk objek JSON. Untuk URL seperti https://{url-id}.{region}.fcapp.run/example?key1=value1, nilainya adalah {"key1": "value1"}. Beberapa nilai untuk kunci yang sama dipisahkan dengan koma. {"parameter1": "value1", "parameter2": "value1,value2"}
requestContext Metadata permintaan tambahan, termasuk ID permintaan, timestamp, dan informasi pemanggil.
requestContext.accountId ID Akun Alibaba Cloud yang memiliki fungsi tersebut. 123456*********
requestContext.domainName Nama domain dari Pemicu HTTP. <http-trigger-id>.<region-id>.fcapp.run
requestContext.domainPrefix Awalan domain dari Pemicu HTTP. <http-trigger-id>
requestContext.http Informasi detail tentang permintaan HTTP.
requestContext.http.method Metode HTTP. Nilai yang valid: GET, POST, PUT, HEAD, OPTIONS, PATCH, DELETE. GET
requestContext.http.path Path permintaan yang telah didecode. Untuk URL permintaan seperti https://{url-id}.{region}.fcapp.run/example?name=Jane, nilainya adalah /example. /example
requestContext.http.protocol Protokol permintaan. HTTP/1.1
requestContext.http.sourceIp IP peer dari koneksi TCP langsung (RemoteAddr). Lihat catatan di bawah. 11.11.XX.XX
requestContext.http.userAgent Nilai header permintaan user-agent. PostmanRuntime/7.32.3
requestContext.requestId ID permintaan untuk melacak log pemanggilan. 1-64f6cd87-*************
requestContext.time Timestamp permintaan dalam format ISO 8601. 2023-09-05T06:41:11Z
requestContext.timeEpoch Timestamp permintaan dalam waktu UNIX (milidetik). 1693896071895
Peringatan

sourceIp adalah IP peer dari koneksi TCP langsung, yang belum tentu merupakan IP klien asli. Jika permintaan tidak diteruskan oleh proxy, sourceIp adalah IP klien. Jika permintaan melewati satu atau lebih proxy, sourceIp adalah IP proxy terakhir. Untuk mendapatkan IP klien asli saat permintaan melewati proxy, baca header X-Forwarded-For. Untuk detailnya, lihat Bagaimana cara mendapatkan alamat IP asli klien saat Pemicu HTTP memanggil fungsi yang menggunakan runtime bawaan?

Logika pemetaan

Function Compute memetakan permintaan HTTP ke objek event sebagai berikut:

  • Header permintaan HTTP → event.headers

  • Parameter kueri HTTP → event.queryParameters

  • Konteks permintaan (ID permintaan, timestamp, identitas pemanggil) → event.requestContext

  • Badan permintaan POST → event.body

Pengkodean Base64

Function Compute memeriksa header Content-Type untuk menentukan apakah badan permintaan perlu diencode Base64.

Content-Type isBase64Encoded Penanganan badan
text/* false Diteruskan apa adanya
application/json false Diteruskan apa adanya
application/ld+json false Diteruskan apa adanya
application/xhtml+xml false Diteruskan apa adanya
application/xml false Diteruskan apa adanya
application/atom+xml false Diteruskan apa adanya
application/javascript false Diteruskan apa adanya
Nilai lainnya true Diencode Base64 sebelum diteruskan ke fungsi

Contoh pemetaan permintaan

GET

Permintaan HTTP Objek event
GET /?parameter1=value1&parameter2=value2 HTTP/1.1 {"version":"v1","rawPath":"/","headers":{"Accept":"*/*","User-Agent":"CurlHttpClient"},"queryParameters":{"parameter1":"value1","parameter2":"value2"},"body":"","isBase64Encoded":true,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"GET","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

Untuk mengirim permintaan ini dari CLI (ganti https://example.cn-hangzhou.fcapp.run dengan URL fungsi Anda):

curl -v "https://example.cn-hangzhou.fcapp.run?parameter1=value1&parameter2=value2"

POST

Permintaan HTTP Objek event
POST / HTTP/1.1
Content-Type: application/json
{"version":"v1","rawPath":"/","headers":{"Accept":"*/*","Content-Length":"20","Content-Type":"application/json","User-Agent":"curl/8.7.1"},"queryParameters":{},"body":"{\"message\": \"Hello\"}","isBase64Encoded":false,"requestContext":{"accountId":"1327**********","domainName":"example.cn-hangzhou.fcapp.run","domainPrefix":"example","requestId":"1-67aee50c-****-**********","time":"2025-02-14T06:39:08Z","timeEpoch":"1739515148145","http":{"method":"POST","path":"/","protocol":"HTTP/1.1","sourceIp":"40.XX.XX.XX","userAgent":"CurlHttpClient"}}}

Untuk mengirim permintaan ini dari CLI (ganti https://example.cn-hangzhou.fcapp.run dengan URL fungsi Anda):

curl -v -H "Content-Type: application/json" -d '{"message": "Hello"}' "https://example.cn-hangzhou.fcapp.run"
Untuk memaksa pengkodean Base64 pada badan permintaan, atur Content-Type menjadi application/x-www-form-urlencoded.

Struktur respons

Format

Output fungsi Anda diurai menjadi struktur respons sebelum dipetakan ke respons HTTP:

{
    "statusCode": 200,
    "headers": {
        "Content-Type": "application/json",
        "Custom-Header-1": "Custom Value"
    },
    "isBase64Encoded": false,
    "body": "{\"message\":\"Hello FC!\"}"
}

Logika pemetaan

Function Compute memetakan output fungsi Anda ke respons HTTP berdasarkan apakah output tersebut merupakan JSON valid yang berisi bidang statusCode.

Jika output berupa JSON valid dengan statusCode:

Bidang Struktur Respons Respons HTTP
statusCode Kode status
headers["Content-Type"] Content-Type (default ke application/json jika tidak ada)
body Badan respons
isBase64Encoded Apakah badan perlu didecode Base64 sebelum dikirim (default ke false jika tidak ada)

Jika output berupa JSON valid tanpa statusCode, atau bukan JSON:

Function Compute menggunakan nilai default berikut:

Bidang Nilai default
statusCode 200
Content-Type application/json
body Output fungsi apa adanya
isBase64Encoded false

Contoh pemetaan respons

Contoh berikut menunjukkan bagaimana output fungsi mengalir melalui proses penguraian hingga menjadi respons HTTP akhir.

Output untuk respons string

Output fungsi Struktur respons terurai Respons HTTP (diterima client)
Hello World! {"statusCode":200,"body":"Hello World!","headers":{"content-type":"application/json"},"isBase64Encoded":false}
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 12
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d6e7-e01edb1cce58240ed59b59d9

Hello World!

Output untuk respons JSON

Output fungsi Struktur respons terurai Respons HTTP (diterima client)
{"message": "Hello World!"} {"statusCode":200,"body":"{\"message\": \"Hello World!\"}","headers":{"content-type":"application/json"},"isBase64Encoded":false}
HTTP/1.1 200 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
X-Fc-Request-Id: 1-64f6d867-7302fc1ac6338b6fd2adb782

{"message": "Hello World!"}

Output untuk respons kustom

Output fungsi Struktur respons terurai Respons HTTP (diterima client)
{"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false} {"statusCode":201,"headers":{"Content-Type":"application/json","My-Custom-Header":"Custom Value"},"body":{"message":"Hello, world!"},"isBase64Encoded":false}
HTTP/1.1 201 OK
Content-Type: application/json
My-Custom-Header: Custom Value
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14

{"message": "Hello world!"}

Pendekodean Base64

Jika fungsi Anda mengembalikan JSON valid dengan isBase64Encoded diatur ke true, Function Compute akan mendekode Base64 body sebelum memetakannya ke badan respons HTTP. Jika pendekodean gagal, Function Compute mengembalikan nilai body secara langsung tanpa melaporkan error.

Header respons

Function Compute secara otomatis menambahkan header X-Fc-Request-Id ke setiap respons. Header ini secara unik mengidentifikasi permintaan dan berguna untuk melacak log serta mendiagnosis error. Selain X-Fc-Request-Id, Function Compute tidak menambahkan header respons lain secara default.

Peringatan

Header kustom dengan awalan X-Fc- tidak didukung. Header berikut dicadangkan oleh Function Compute dan diabaikan jika dikembalikan oleh fungsi Anda:

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • content-disposition

Penanganan error

Pemanggilan melalui Pemicu HTTP dan pemanggilan API langsung menangani error fungsi secara berbeda.

Jenis pemanggilan Perilaku Kesalahan Kode status HTTP
Pemanggilan API langsung Pesan error dikembalikan dalam badan respons 200
Pemicu HTTP (URL fungsi) Pesan error disembunyikan; Internal Server Error dikembalikan 502

Sebagai contoh, pemanggilan API langsung yang mengalami Python ModuleNotFoundError mengembalikan detail error berikut:

{
    "errorMessage": "Unable to import module 'index'",
    "errorType": "ImportModuleError",
    "stackTrace": [
        "ModuleNotFoundError: No module named 'not_exist_module'"
    ]
}

Saat fungsi yang dipanggil melalui Pemicu HTTP mengalami error, klien menerima respons seperti:

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Content-Length: 21

Internal Server Error

Gunakan nilai X-Fc-Request-Id untuk mencari detail error lengkap di log pemanggilan fungsi Anda.

Topik terkait

Jika Anda menulis kode fungsi untuk runtime bawaan, lihat dokumentasi penanganan untuk bahasa Anda: