日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

HTTP請求處理程序(HTTP Handler)

您可以使用HTTP Handler更方便地處理HTTP請求。當調用函數時,FC運行您提供的執行方法來處理請求。本文介紹Go HTTP Handler的結構和特點。

使用示例

在Go語言的代碼中,您需要引入官方的SDK庫aliyun/serverless/fc-runtime-go-sdk/fc,并實現handler函數和main函數。示例如下:

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("Hi,%s!\n", body)))
    return nil
}

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

示例解析如下:

  • package main: 在Go語言中,Go應用程序都包含一個名為main的包。
  • import:需要引用函數計算依賴的包,主要包括以下包:
    • github.com/aliyun/fc-runtime-go-sdk/fc函數計算Go語言的核心庫。
    • context函數計算Go語言的Context對象。
    • net/http:HTTP Handler中需要用到的HTTP包中RequestResponseWriter接口。
  • HandleHttpRequest(ctx context.Context, w http.ResponseWriter, req *http.Request) error:處理HTTP請求的方法(即HTTP Handler),需包含將要執行的代碼,參數含義如下:
    • ctx context.Context:提供了函數在調用時的運行上下文信息,詳細信息,請參見上下文。
    • w http.ResponseWriter:HTTP Handler的響應接口,可以設置狀態行、消息頭和響應正文。具體支持格式,請參見響應接口。
    • req *http.Request:HTTP Handler的請求接口,包含請求行、請求頭和請求正文。具體方法,請參見請求結構體
    • w.WriteHeader(http.StatusOK):填入響應的HTTP狀態碼。
    • w.Header().Add("Content-Type", "text/plain"):填入響應的消息頭。
    • w.Write([]byte(fmt.Sprintf("Hi,%s!\n", body))):填入響應的消息體。
    • return nil:簡單的錯誤信息,nil表示沒有錯誤發生。如果設置了錯誤信息,則認為是函數錯誤。
  • func main():運行FC函數代碼的入口點,Go程序必須包含main函數。在main()中調用fc.StartHttp(HandleHttpRequest),您的程序即可運行在阿里云的函數計算平臺。
    重要 HTTP請求處理程序和事件請求處理程序的啟動方法不同。如果是事件請求處理程序,您需要在main函數中調用fc.Start函數。如果是HTTP請求處理程序,您需要在main函數中調用fc.StartHttp函數。

Handler

Go的HTTP Handler的定義,是參考Go標準庫HTTP中的Handler interface設計,并在此基礎上新增一個context參數。定義如下:

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

函數定義中包含以下三部分內容:

  • context:為您的FC函數調用提供運行時信息。更多信息,請參見上下文。
  • http.Request:請求結構體。詳細信息,請參見請求結構體
  • http.ResponseWriter:響應接口。詳細信息,請參見響應接口。

請求結構體

http.Request是Go標準庫HTTP中的定義,目前支持的參數和方法如下表所示。

參數類型描述
MethodStringHTTP請求方法,例如PUT、POST、DELETE等。
URL*url.URL請求地址信息。
Headerhttp.HeaderHTTP請求頭部的鍵值對。
Bodyio.ReadCloser請求結構體。
ContentLengthInt64請求結構體數據長度。

響應接口

實現了http.ResponseWriter聲明的三個方法,示例如下:

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

說明如下:

  • WriteHeader(statusCode int):設置狀態碼。
  • Header() Header:獲取并設置響應頭信息。
  • Write([]byte) (int, error):設置響應體。

限制說明

  • 請求限制

    如果超過以下限制,會返回400狀態碼和InvalidArgument錯誤碼。

    字段

    限制說明

    HTTP狀態碼

    錯誤碼

    headers

    請求頭中的所有鍵和值的總大小不能超過8 KB。

    400

    InvalidArgument

    path

    請求路徑以及所有查詢參數的總大小不能超過4 KB。

    body

    同步調用請求的Body的總大小不能超過32 MB,異步調用請求的Body的總大小不能超過128 KB。

  • 響應限制

    如果超過以下限制,會返回502狀態碼和BadResponse錯誤碼。

    字段

    限制說明

    HTTP狀態碼

    錯誤碼

    headers

    響應頭中的所有鍵和值對的大小不能超過8 KB。

    502

    BadResponse

    body

    同步調用響應的Body的總大小不能超過16 MB,異步調用響應的Body的總大小不能超過128 KB。

Context

Context的詳細使用方法,請參見上下文。