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. Jikanildikembalikan, 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 fungsimain. Untuk menjalankan aplikasi Anda di Function Compute, panggil fungsifc.StartHttp(HandleHttpRequest)dalam fungsimain().null Metode untuk memulai penanganan HTTP dan penanganan acara berbeda. Untuk memulai penanganan acara, panggil fungsifc.Startdalam fungsimain. Untuk memulai penanganan HTTP, panggil fungsifc.StartHttpdalam fungsimain.
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) errorPenanganan 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.
| Parameter | Tipe | Deskripsi |
| Method | String | Metode permintaan HTTP, seperti PUT, POST, atau DELETE. |
| URL | *url.URL | URL permintaan. |
| Header | http.Header | Pasangan kunci-nilai dari header permintaan HTTP. |
| Body | io.ReadCloser | Struktur permintaan. |
| ContentLength | Int64 | Panjang 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
400dan kesalahanInvalidArgument.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
502dan kesalahanBadResponse.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.