全部产品
Search
文档中心

Function Compute:Gunakan pemicu HTTP untuk memanggil fungsi

更新时间:Jul 02, 2025

Pemicu HTTP menyediakan titik akhir HTTP(S) untuk sebuah fungsi, yang disebut URL fungsi. Ini memungkinkan Anda langsung memanggil fungsi melalui permintaan HTTP. Topik ini menjelaskan cara menggunakan pemicu HTTP untuk memanggil fungsi dalam runtime bawaan Function Compute. Untuk informasi tentang penggunaan pemicu dalam runtime kustom, lihat Fungsi Web.

Pertimbangan

Dalam Function Compute 3.0, mekanisme pemicu HTTP yang memanggil fungsi di runtime kustom atau runtime Custom Container tetap sama seperti pada Function Compute 2.0. Namun, ada perbedaan signifikan dalam cara pemicu HTTP memanggil fungsi di runtime bawaan. Untuk informasi lebih lanjut, lihat bagian berikut.

Proses pemanggilan

Dalam runtime bawaan, ketika klien memanggil URL fungsi, Function Compute memetakan permintaan ke objek acara (event) dan meneruskan objek tersebut ke fungsi. Setelah eksekusi selesai, Function Compute memetakan hasilnya ke respons HTTP dan mengirimkannya kembali ke klien.

Struktur permintaan

Format struktur permintaan

Format struktur permintaan adalah sebagai berikut:

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

Tabel berikut menjelaskan parameter:

Parameter

Deskripsi

Contoh

version

Versi format payload dari acara. Versi yang saat ini didukung adalah v1.

v1

rawPath

Path permintaan. Sebagai contoh, jika URL permintaan adalah https://{url-id}.{region}.fcapp.run/contoh, nilai parameter ini adalah /contoh. Perhatikan bahwa nilai ini dikodekan URL. Lihat requestContext.http.path untuk path yang didekode.

/contoh

body

Body permintaan. Selama proses pemetaan, Function Compute melakukan Base64-encoding data biner.

Halo FC!

isBase64Encoded

Menentukan apakah body permintaan dienkripsi Base64. Nilai valid: true dan false.

false

headers

Daftar header permintaan, ditampilkan dalam pasangan key-value. Jika sebuah key memiliki beberapa nilai, nilai-nilai tersebut dipisahkan oleh koma (,).

Proses pemetaan di mana Function Compute 3.0 mengubah permintaan HTTP menjadi objek acara menghasilkan huruf pertama setiap key header permintaan diubah menjadi huruf besar, sebuah perubahan yang dikenal sebagai proses normalisasi. Untuk informasi lebih lanjut, lihat Mengapa huruf pertama dari key header menjadi huruf besar ketika saya menggunakan pemicu HTTP untuk memanggil fungsi?

{"Header1": "nilai1", "Header2": "nilai1,nilai2"}

queryParameters

Parameter query dari permintaan. Sebagai contoh, jika URL permintaan adalah https://{url-id}.{region}.fcapp.run/contoh?key1=nilai1, nilai parameter ini adalah objek JSON dengan key key1 dan value nilai1. Jika sebuah key memiliki beberapa nilai, nilai-nilai tersebut dipisahkan oleh koma (,), misalnya, {"key1": "nilai1", "key2": "nilai2,nilai3"}.

{

"parameter1": "nilai1",

"parameter2": "nilai1,nilai2"

}

requestContext

Objek yang berisi informasi tambahan tentang permintaan, seperti requestId, waktu permintaan dibuat, dan identitas pemanggil yang berwenang.

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

Prefix domain dari pemicu HTTP.

<http-trigger-id>

requestContext.http

Objek yang berisi informasi detail tentang permintaan HTTP.

requestContext.http.method

Metode HTTP yang digunakan dalam permintaan. Nilai valid: GET, POST, PUT, HEAD, OPTIONS, PATCH, dan DELETE.

GET

requestContext.http.path

Path permintaan. Sebagai contoh, jika URL permintaan adalah https://{url-id}.{region}.fcapp.run/contoh?name=Jane, nilai parameter ini adalah /contoh.

/contoh

requestContext.http.protocol

Protokol dari permintaan.

HTTP/1.1

requestContext.http.sourceIp

Alamat IP sumber dari koneksi TCP langsung yang membuat permintaan. Alamat IP ini merujuk pada alamat IP peer (RemoteAddr) yang secara langsung menetapkan koneksi, khususnya alamat klien yang terhubung langsung ke server atau alamat proxy terakhir yang digunakan klien.

11.11.XX.XX

requestContext.http.userAgent

Nilai dari header permintaan user-agent.

PostmanRuntime/7.32.3

requestContext.requestId

ID permintaan. Anda dapat menggunakan ID ini untuk melacak log pemanggilan yang terkait dengan fungsi.

1-64f6cd87-*************

requestContext.time

Timestamp dari permintaan.

2023-09-05T06:41:11Z

requestContext.timeEpoch

Timestamp dari permintaan, dalam waktu UNIX.

1693896071895

Logika pemetaan permintaan

Function Compute memetakan permintaan HTTP masuk ke objek acara sebelum meneruskannya ke penanganan fungsi Anda. Logika pemetaan adalah sebagai berikut:

  • Header dari permintaan HTTP dipetakan ke event headers.

  • Parameter query dari permintaan HTTP dipetakan ke queryParameters.

  • Informasi kontekstual tentang permintaan HTTP dipetakan ke requestContext.

  • Body permintaan dari permintaan POST dipetakan ke body.

Mekanisme pengkodean Base64

Ketika Function Compute memetakan permintaan HTTP ke objek acara (event), ia memeriksa nilai dari Content-Type dalam header permintaan untuk menentukan apakah pengkodean Base64 harus dilakukan.

  • Jika nilai dari Content-Type menunjukkan representasi tekstual, Function Compute tidak melakukan pengkodean Base64, dan parameter isBase64Encoded dalam event diatur ke false.

  • Sebaliknya, body permintaan diubah menjadi format teks menggunakan pengkodean Base64, dan parameter isBase64Encoded diatur ke true.

Nilai Content-Type berikut menunjukkan representasi tekstual:

  • text/*

  • application/json

  • application/ld+json

  • application/xhtml+xml

  • application/xml

  • application/atom+xml

  • application/javascript

Contoh pemetaan permintaan

GET

Permintaan HTTP

Objek acara

GET /?parameter1=nilai1&parameter2=nilai2 HTTP/1.1
{
  "version": "v1",
  "rawPath": "/",
  "headers": {
    "Accept": "*/*",
    "User-Agent": "CurlHttpClient"
  },
  "queryParameters": {
    "parameter1": "nilai1",
    "parameter2": "nilai2"
  },
  "body": "",
  "isBase64Encoded": true,
  "requestContext": {
    "accountId": "1327************",
    "domainName": "contoh.cn-hangzhou.fcapp.run",
    "domainPrefix": "contoh",
    "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"
    }
  }
}
Catatan

Anda dapat memasukkan perintah berikut di CLI untuk mengirim permintaan HTTP yang disebutkan di atas. Ganti https://contoh.cn-hangzhou.fcapp.run dengan URL sebenarnya dari fungsi Anda.

curl -v "https://contoh.cn-hangzhou.fcapp.run?parameter1=nilai1&parameter2=nilai2"

POST

Permintaan HTTP

Objek acara

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\": \"Halo\"}",
  "isBase64Encoded": false,
  "requestContext": {
    "accountId": "1327************",
    "domainName": "contoh.cn-hangzhou.fcapp.run",
    "domainPrefix": "contoh",
    "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"
    }
  }
}
Catatan
  • Anda dapat memasukkan perintah berikut di CLI untuk mengirim permintaan HTTP yang disebutkan di atas. Ganti https://contoh.cn-hangzhou.fcapp.run dengan URL sebenarnya dari fungsi Anda.

    curl -v -H "Content-Type: application/json"  -d '{"message": "Halo"}' "https://contoh.cn-hangzhou.fcapp.run"
  • Jika Anda ingin mengkodekan permintaan Anda dalam format Base64, cukup atur Content-Type dalam header permintaan ke application/x-www-form-urlencoded.

Struktur respons

Format struktur respons

Format struktur respons adalah sebagai berikut. Function Compute mengurai output fungsi Anda, mentransformasikannya menjadi struktur respons, dan memetakan struktur ini ke respons HTTP.

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

Logika pemetaan respons

Setelah menguraikan output fungsi, Function Compute memetakan struktur respons ke respons HTTP.

  • Jika fungsi Anda mengembalikan JSON yang valid dengan statusCode, proses pemetaan diatur oleh aturan berikut:

    • statusCode dalam JSON dipetakan ke statusCode dalam respons HTTP.

    • Content-Type dalam JSON dipetakan ke Content-Type dalam respons HTTP. Jika JSON tidak mengandung parameter Content-Type, nilai default application/json digunakan.

    • body dalam JSON, yang merupakan output fungsi, dipetakan ke body respons HTTP.

    • Parameter isBase64Encoded dalam JSON dipetakan ke parameter isBase64Encoded dalam respons HTTP. Jika JSON tidak mengandung parameter isBase64Encoded, nilai default "false" digunakan.

  • Jika fungsi Anda mengembalikan JSON yang valid tanpa statusCode, atau jika mengembalikan data dalam format selain JSON, Function Compute membuat asumsi berikut untuk membangun respons HTTP:

    • statusCode adalah 200.

    • Content-Type adalah application/json.

    • body adalah output fungsi.

    • isBase64Encoded adalah false.

Kesimpulannya, Function Compute mengonversi data yang dikembalikan oleh fungsi Anda menjadi respons HTTP dan mengirimkannya kembali ke klien.

  • statusCode dipetakan ke kode status dari respons HTTP.

  • headers dipetakan ke header respons HTTP.

  • body dipetakan ke body respons HTTP. Jika parameter isBase64Encoded ada dan nilainya true, maka data body akan didekodekan ke dalam bentuk biner sebelum dipetakan ke body respons HTTP.

Contoh pemetaan respons

Bagian ini menunjukkan bagaimana output fungsi Anda diuraikan menjadi struktur respons dan bagaimana struktur tersebut dipetakan ke respons HTTP pada klien. Ketika klien memanggil fungsi Anda melalui titik akhir HTTP(S)-nya, ia menerima respons HTTP.

Output untuk respons string

Output fungsi

Output fungsi yang diuraikan

Respons HTTP (ke klien)

Halo Dunia!

{
  "statusCode": 200,
  "body": "Halo Dunia!",
  "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
Date: Tue, 05 Sep 2023 07:21:11 GMT

Halo Dunia!

Output untuk respons JSON

Output fungsi

Output fungsi yang diuraikan

Respons HTTP (ke klien)

{"message": "Halo Dunia!"}

{
  "statusCode": 200,
  "body": "{\"message\": \"Halo Dunia!\"}",
  "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
Date: Tue, 05 Sep 2023 07:27:35 GMT

{"message": "Halo Dunia!"}

Output untuk respons kustom

Output fungsi

Output fungsi yang diuraikan

Respons HTTP (ke klien)

{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Nilai Kustom"
    },
    "body": {
        "message": "Halo, dunia!"
    },
    "isBase64Encoded": false
}
{
   "statusCode": 201,
    "headers": {
        "Content-Type": "application/json",
        "My-Custom-Header": "Nilai Kustom"
    },
    "body": {
        "message": "Halo, dunia!"
    },
    "isBase64Encoded": false
}
HTTP/1.1 201 OK
Content-Disposition: attachment
Content-Length: 27
Content-Type: application/json
Custom-Header-1: Nilai Kustom
X-Fc-Request-Id: 1-64f6dcb3-e787580749d3ba13b047ce14
Date: Tue, 05 Sep 2023 07:45:55 GMT

{"message": "Halo dunia!"}

Mekanisme dekode Base64

Jika fungsi Anda mengembalikan JSON yang valid dengan parameter isBase64Encoded yang nilainya true, Function Compute melakukan dekode Base64 pada body JSON dan kemudian memetakan data yang didekodekan ke body respons HTTP.

Jika body JSON gagal didekode, Function Compute tidak melaporkan kesalahan. Sebagai gantinya, ia langsung mengembalikan nilai dari body JSON ke klien.

Header respons HTTP

Dalam pemanggilan URL fungsi, header respons X-Fc-Request-Id, yang secara otomatis ditambahkan oleh Function Compute, secara unik mengidentifikasi permintaan yang memicu pemanggilan fungsi. Function Compute tidak secara otomatis menambahkan header respons lainnya.

Anda dapat mengembalikan header kustom dari fungsi Anda. Perhatikan bahwa header kustom yang dimulai dengan X-Fc- tidak didukung. Selain itu, header respons berikut tidak dapat digunakan sebagai header kustom karena dicadangkan oleh Function Compute.

  • connection

  • content-length

  • date

  • keep-alive

  • server

  • content-disposition

Jika salah satu header cadangan ini digunakan sebagai header kustom, Function Compute akan mengabaikannya.

Penanganan kesalahan

Ketika fungsi yang dipanggil melalui API mengalami kesalahan, pesan kesalahan dikembalikan sebagai bagian dari respons, dan kode status HTTP 200 dikembalikan. Sebagai contoh, kode sampel berikut menunjukkan respons terhadap kesalahan ModuleNotFound dalam Python:

{
    "errorMessage": "Tidak dapat mengimpor modul 'index'",
    "errorType": "ImportModuleError",
    "stackTrace": [
        "ModuleNotFoundError: Tidak ada modul bernama 'not_exist_module'"
    ]
}

Namun, dalam kasus pemanggilan URL fungsi, Function Compute menyembunyikan pesan kesalahan dan hanya mengembalikan Internal Server Error. Kode status HTTP adalah 502. Kode sampel berikut menunjukkan sebuah contoh:

HTTP/1.1 502 Bad Gateway
Content-Disposition: attachment
Content-Type: application/json
X-Fc-Request-Id: 1-64f6df91-fe144d52e4fd27afe3d8dd6f
Date: Tue, 05 Sep 2023 07:58:09 GMT
Content-Length: 21

Internal Server Error

Anda dapat menggunakan header respons X-Fc-Request-Id untuk secara efisien menemukan log yang relevan dan mengidentifikasi pesan kesalahan yang terkait dengan permintaan.

Referensi

Jika Anda menulis kode dalam runtime bawaan Function Compute 3.0, Anda mungkin menemukan topik berikut tentang penanganan berguna.