Web 應用程式

已完成

若要使用自訂處理常式,您必須撰寫 Web 應用程式。 撰寫您的應用程式並加以編譯之後,您必須設定 Azure Functions 主機,讓主機知道其使用方式。 我們會在稍後探索更多相關資訊。 首先,您要如何使用 Go 建置 Web 應用程式?

使用 Go 建置 REST API

若要使用 Go 建置 REST API,您需要知道一些事項:

  • 匯入程式庫。 您將使用程式庫 fmtlognet/http。 這些程式庫可協助您管理路由、處理連入要求及處理記錄。 使用下列匯入陳述式:

    import (
       "fmt",
       "log",
       "net/http"
    )    
    
  • 設定路由。 REST API 由稱為「路由」的邏輯分區組成。 路由是回應應用程式中特定考量的位址。 若要設定路由,請在 http 執行個體上呼叫 HandleFunc() 方法,並定義路由以回應要求:

    http.HandleFunc("/", handleRoute)   
    

    在此案例中,您需要建立 handleRoute 函式來依據路由 "/" 比對連入要求。

  • 管理要求。 您需要管理連入要求,並讀取路由器、查詢參數或張貼的本文等內容。 然後,您需要建構回應。 處理要求的函式看起來可能像這樣:

    func handleRequest(w: http:ResponseWriter, r: http.Request) {
        fmt.Fprintf(w, "My first REST API") 
    }
    

    程式碼會將 “My first REST API" 文字傳送回呼叫用戶端。 Fprintf() 方法會採用兩個引數:回應資料流與要傳回的字串。

  • 建立伺服器。 若要接聽要求,您必須啟動伺服器。 您也必須指定要求傳送的目的地。 下列程式碼示範如何建立伺服器:

    http.ListenAndServe(":3000", nil)
    

    伺服器現在已啟動,而且可以接聽連接埠 3000 上的要求。

建立 Azure Functions 應用程式

在開發 Azure Functions 應用程式之前,建議您先:

使用 Visual Studio Code 建構 Functions 應用程式

在系統上安裝所有必要相依性之後,下一步是建構應用程式。 當系統詢問您的執行階段時,請選擇 [自訂處理常式]

現在您已確定會產生正確的檔案。 當您以這種方式產生專案時,您需要為第一個函式選取觸發程序類型。 自訂處理常式適用於所有的一般觸發程序和繫結。

完成產生專案之後,您應該會有一個包含下列檔案的應用程式:

  • host.json
  • local.setting.json
  • proxies.json
  • function.json

function.json 檔案位於其名稱對應至您為第一個函式所指定名稱的目錄中。 您將使用此檔案設定函式。

設定專案

若要讓您的應用程式使用 HTTP 基本類型,您需要設定一些項目:

  • 接聽自訂處理常式連接埠。 您的應用程式必須接聽特定連接埠。 變數 FUNCTIONS_CUSTOMHANDLER_PORT 包含您需要的值。 您可以使用下列程式碼查詢連接埠值:

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    
  • 設定預設可執行檔路徑。 因為您要建立可執行檔,所以您必須告訴 Functions 應用程式專案其所在位置。

    在專案根目錄中找到 function.json 檔案。 在 customHandler 區段中,指定 defaultExecutablePath。 看起來可能如下所示:

    "customHandler": {
       "defaultExecutablePath": "mygoapp.exe"
    }
    
  • 啟用要求轉送。 當您處理使用 HTTP 觸發程序的函式時,您想要以與處理其他觸發程序類型 (例如佇列觸發程序) 稍微不同的方式設定應用程式。

    啟用名為 enableForwardingHttpRequest 的屬性。 啟用此屬性時,有下列方式可變更如何處理要求的行為:

    • 原始要求的複本。 HTTP 要求不包含自訂處理常式的要求承載。 相反地,Functions 主機會使用原始 HTTP 要求的複本叫用處理常式。

    • 與原始要求相同的路徑。 Functions 主機會使用與原始要求相同的路徑叫用處理常式。

      當您定義路由和路由處理常式時,您必須指定路由的設定方式。 假設您有下列專案大綱:

      hello/
        function.json   
      

      大綱中的檔案預設會對應到路由 /api/hello。 在設定路由的程式碼中,您必須指定完整路由:

      mux.HandleFunc("/api/hello", helloHandler)
      

      如果您未啟用此設定,則針對其他類型的觸發程序和繫結,將路由器程式碼指定為 "/hello" 便已足夠。

    • 處理常式回應的複本。 Functions 主機會傳回處理常式的 HTTP 回應複本,作為原始要求的回應。

在上述範例中,可執行檔為 mygoapp.exe。 此範例假設您要從名為 mygoapp.go 的檔案建立可執行檔,但您可以將 Go 檔案命名為任何您想要的名稱。 在 Linux 或 macOS 上,可執行檔沒有副檔名。

建置應用程式

此時,建置 Web 應用程式與使用 Go 建置任何 Web 應用程式並無太大不同。 只要您已完成上一節中所述的設定,便已就緒。

現在您需要執行下列步驟:

  1. 讀取連接埠。
  2. 將 HTTP 伺服器執行個體具現化。
  3. 定義路由和路由處理常式。
  4. 開始在連接埠上接聽。
customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
if !exists {
   customHandlerPort = "8080"
} // 1)
mux := http.NewServeMux() // 2)
mux.HandleFunc("/order", orderHandler) // 3)
fmt.Println("Go server Listening on: ", customHandlerPort)
log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) // 4)