全部产品
Search
文档中心

Function Compute:Penanganan HTTP

更新时间:Jun 24, 2025

Gunakan penanganan HTTP untuk memproses permintaan HTTP secara efisien. Saat memanggil fungsi, Function Compute menjalankan penanganan yang ditentukan dalam kode fungsi untuk memproses permintaan. Topik ini menjelaskan struktur dan karakteristik penanganan HTTP untuk Go.

Kode contoh untuk menggunakan penanganan HTTP

Impor pustaka SDK resmi bernama aliyun/serverless/fc-runtime-go-sdk/fc untuk Go dan implementasikan fungsi handler dan main. Berikut adalah contoh kode:

package main

import (
    "context"
    "fmt"
    "net/http"
    "io/ioutil"

    "github.com/aliyun/fc-runtime-go-sdk/fc"
)

func HandleHttpRequest(ctx context.Context, w http.ResponseWriter, req *http.Request) error {
  body, err := ioutil.ReadAll(req.Body)
  if err != nil {
    w.WriteHeader(http.StatusBadRequest)
    w.Header().Add("Content-Type", "text/plain")
    w.Write([]byte(err.Error()))
    return nil
  }
    w.WriteHeader(http.StatusOK)
    w.Header().Add("Content-Type", "text/plain")
    w.Write([]byte(fmt.Sprintf("Halo,%s! \n", body)))
    return nil
}

func main() {
    fc.StartHttp(HandleHttpRequest)
}
            

Berikut adalah deskripsi potongan-potongan kode dalam contoh:

  • package mainmain: Paket utama aplikasi Go. Setiap aplikasi Go harus memiliki paket ini.
  • import: Mengimpor dependensi Function Compute. Dependensi berikut perlu diimpor:
    • github.com/aliyun/fc-runtime-go-sdk/fc: Pustaka inti dari SDK Function Compute untuk Go.
    • context: Objek konteks dari SDK Function Compute untuk Go.
    • net/http: Menyediakan metode Request dan ResponseWriter dalam paket HTTP untuk penanganan HTTP.
  • HandleHttpRequest(ctx context.Context, w http.ResponseWriter, req *http.Request) error: Penanganan HTTP untuk memproses permintaan HTTP. Penanganan ini mencakup parameter berikut:
    • ctx context.Context: Menyediakan informasi konteks waktu proses saat fungsi dipanggil. Untuk detail lebih lanjut, lihat Konteks.
    • w http.ResponseWriter: Metode respons dari penanganan HTTP. Anda dapat menggunakan metode ini untuk menetapkan kode status, header respons, dan badan respons. Lihat bagian Metode Respons untuk informasi lebih lanjut.
    • req *http.Request: Metode permintaan dari penanganan HTTP. Anda dapat menggunakan metode ini untuk menetapkan baris permintaan, header permintaan, dan badan permintaan. Lihat Struktur Permintaan untuk detail lebih lanjut.
    • w.WriteHeader(http.StatusOK): Menetapkan kode status HTTP untuk respons.
    • w.Header().Add("Content-Type", "text/plain"): Menetapkan header respons.
    • w.Write([]byte(fmt.Sprintf("Halo,%s! \n", body))): Menetapkan badan respons.
    • return nil: Mengembalikan pesan kesalahan sederhana. Jika nil dikembalikan, tidak ada kesalahan yang terjadi. Jika pesan kesalahan dikembalikan, terjadi kesalahan fungsi.
  • func main(): Titik masuk untuk menjalankan kode fungsi di Function Compute. Aplikasi Go harus memiliki fungsi main. Untuk menjalankan aplikasi Anda di Function Compute, panggil fungsi fc.StartHttp(HandleHttpRequest) dalam fungsi main().
    null Metode untuk memulai penanganan HTTP dan penanganan acara berbeda. Untuk memulai penanganan acara, panggil fungsi fc.Start dalam fungsi main. Untuk memulai penanganan HTTP, panggil fungsi fc.StartHttp dalam fungsi main.

Definisi

Penanganan HTTP untuk Go didefinisikan berdasarkan Antarmuka Handler untuk permintaan HTTP dalam pustaka standar Go tetapi mencakup parameter tambahan context. Sintaks penanganan HTTP:

function(ctx context.Context, w http.ResponseWriter, req *http.Request) error

Penanganan HTTP terdiri dari tiga objek berikut:

  • context: Menyediakan informasi konteks waktu proses saat fungsi dipanggil di Function Compute. Untuk detail lebih lanjut, lihat Konteks.
  • http.Request: Struktur permintaan. Lihat Struktur Permintaan untuk informasi lebih lanjut.
  • http.ResponseWriter: Metode respons. Lihat Metode Respons untuk detail lebih lanjut.

Struktur Permintaan

http.Request adalah objek HTTP yang didefinisikan dalam pustaka standar Go. Tabel berikut menjelaskan parameter yang didukung oleh objek http.Request.

ParameterTipeDeskripsi
MethodStringMetode permintaan HTTP, seperti PUT, POST, atau DELETE.
URL*url.URLURL permintaan.
Headerhttp.HeaderPasangan kunci-nilai dari header permintaan HTTP.
Bodyio.ReadCloserStruktur permintaan.
ContentLengthInt64Panjang data dalam struktur permintaan.

Metode Respons

Berikut adalah contoh kode yang menunjukkan tiga metode yang dideklarasikan oleh http.ResponseWriter:

type ResponseWriter interface {
    Header() Header
    Write([]byte) (int, error)
    WriteHeader(statusCode int)
}

Catatan:

  • WriteHeader(statusCode int): Menetapkan kode status.
  • Header() Header: Menetapkan header respons.
  • Write([]byte) (int, error): Menetapkan badan respons.

Batasan

  • Batasan pada Permintaan

    Jika permintaan melebihi salah satu batasan berikut, sistem akan mengembalikan kode status 400 dan kesalahan InvalidArgument.

    Bidang

    Batasan

    Kode status HTTP

    Kode kesalahan

    headers

    Total ukuran semua kunci dan nilai dalam header permintaan tidak boleh melebihi 8 KB.

    400

    InvalidArgument

    path

    Total ukuran jalur permintaan dan parameter kueri tidak boleh melebihi 4 KB.

    body

    Total ukuran badan permintaan pemanggilan sinkron tidak boleh melebihi 32 MB, dan total ukuran badan permintaan pemanggilan asinkron tidak boleh melebihi 128 KB.

  • Batasan pada Respons

    Jika respons melebihi salah satu batasan berikut, sistem akan mengembalikan kode status 502 dan kesalahan BadResponse.

    Bidang

    Batasan

    Kode status HTTP

    Kode kesalahan

    headers

    Total ukuran semua pasangan kunci dan nilai dalam header respons tidak boleh melebihi 8 KB.

    502

    BadResponse

    body

    Total ukuran badan respons pemanggilan sinkron tidak boleh melebihi 16 MB. Total ukuran badan respons pemanggilan asinkron tidak boleh melebihi 128 KB.

Konteks

Untuk informasi lebih lanjut tentang konteks, lihat Konteks.