Web 應用程式
若要使用自訂處理常式,您必須撰寫 Web 應用程式。 撰寫您的應用程式並加以編譯之後,您必須設定 Azure Functions 主機,讓主機知道其使用方式。 我們會在稍後探索更多相關資訊。 首先,您要如何使用 Go 建置 Web 應用程式?
使用 Go 建置 REST API
若要使用 Go 建置 REST API,您需要知道一些事項:
匯入程式庫。 您將使用程式庫
fmt
、log
與net/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。 您可以使用任何文字編輯器或 IDE 撰寫 Azure Functions 應用程式。 本課程模組展示一些可簡化撰寫的延伸模組。
安裝適用於 Azure Functions 的 Visual Studio Code 延伸模組。 此延伸模組可協助您建構、執行和偵錯 Functions 應用程式。
安裝 Azure Functions Core Tools。 此安裝包含
func
可執行檔命令,可讓您執行 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 應用程式並無太大不同。 只要您已完成上一節中所述的設定,便已就緒。
現在您需要執行下列步驟:
- 讀取連接埠。
- 將 HTTP 伺服器執行個體具現化。
- 定義路由和路由處理常式。
- 開始在連接埠上接聽。
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)