Cvičení – vytvoření aplikace pomocí vlastní obslužné rutiny
V tomto cvičení vytvoříte a spustíte bezserverovou aplikaci pomocí Jazyka Go.
Generování uživatelského rozhraní aplikace
Začněte generováním uživatelského rozhraní aplikace pomocí rozšíření Azure Functions v editoru Visual Studio Code.
- Vyberte paletu příkazů Zobrazit>.
- Vyberte Azure Functions: Vytvořit nový projekt.
- Vyberte složku, obvykle vaši aktuální složku.
- V části Vybrat jazyk vyberte Vlastní obslužnou rutinu.
- V části Vybrat šablonu pro první funkci vyberte HttpTrigger.
- Pojmenujte aplikaci, například hello.
- Vyberte úroveň autorizace anonymního uživatele. Pokud chcete, můžete to později změnit.
Teď máte projekt, který vypadá nějak takto:
hello/
function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json
Vytvoření aplikace
Další série kroků spočívá v vytvoření aplikace, která může reagovat na trigger HTTP.
Vytvořte soubor s názvem server.go v kořenovém adresáři projektu.
Dejte serveru.go následující obsah:
package main import ( "fmt" "io/ioutil" "log" "net/http" "os" )
Předchozí kód naimportuje všechny knihovny, které potřebujete k sestavení aplikace HTTP a vyhledání proměnných prostředí.
Za příkazy importu přidejte následující kód:
func main() { customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT") if !exists { customHandlerPort = "8080" } mux := http.NewServeMux() // mux.HandleFunc("/api/hello", helloHandler) fmt.Println("Go server Listening on: ", customHandlerPort) log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) }
Funkce
main()
se vyvolá sama. První řádek kódu uvádí, jak bude číst zFUNCTIONS_CUSTOM_HANDLER_PORT
proměnné prostředí:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
Dále funkce zkontroluje, jestli port existuje. Pokud ne, funkce má přiřazený port 8080:
if !exists { customHandlerPort = "8080" }
Další kód vytvoří instanci serveru HTTP:
mux := http.NewServeMux()
Poslední řádek důležitosti je ten, který začíná naslouchat určitému portu a signály, že je připraven přijímat požadavky pomocí metody
ListenAndServe()
:log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
Pojďme přidat zbývající kód. Nejprve lokalizovat následující řádek a zrušit komentář:
// mux.HandleFunc("/api/hello", helloHandler)
Mezi příkazy importu a
main()
funkcí přidejte následující kód:func helloHandler(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") if r.Method == "GET" { w.Write([]byte("hello world")) } else { body, _ := ioutil.ReadAll(r.Body) w.Write(body) } }
Funkce
helloHandler()
nastaví typ obsahu naapplication/json
. Odpoví buď "hello world", nebo zveřejněné tělo, pokud existuje.
Spustit aplikaci
V tuto chvíli jste dokončili vytváření kódu, ale pro tento scénář potřebujete provést určitou konfiguraci. Musíte zdůraznit, kde je spustitelný soubor, aby ho hostitel funkce mohl najít. Musíte také nakonfigurovat směrování a stav, že tato aplikace pracuje s triggery HTTP a žádnými dalšími typy vazeb.
Z terminálu spusťte
go build server.go
v kořenovém adresáři projektu:go build server.go
Tento krok vytvoří spustitelný soubor, který se nazývá server v systému macOS a Linux, nebo server.exe v operačním systému Windows.
Otevřete soubor host.json a najděte
defaultExecutablePath
prvek uvnitřcustomHandler
souboru. Zadejte./server
v systémech macOS a Linux nebo.\server.exe
v operačním systému Windows.customHandler
Pod element přidejteenableForwardingHttpRequest
prvek a dejte jí hodnotutrue
. VášcustomHandler
prvek by teď měl vypadat takto:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
V terminálu spusťte
func start
v kořenovém adresáři projektu. Tím spustíte aplikaci Functions.func start
Na konci výstupu se zobrazí podobný výstup:
Functions: hello: [GET,POST] http://localhost:7071/api/hello
V prohlížeči přejděte na
http://localhost:7071/api/hello
. Měl by se zobrazit výstup "hello world".
Gratulujeme! Vyvinuli jste bezserverovou aplikaci v Go.