Cvičení – vytvoření aplikace pomocí vlastní obslužné rutiny

Dokončeno

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.

  1. Vyberte paletu příkazů Zobrazit>.
  2. Vyberte Azure Functions: Vytvořit nový projekt.
  3. Vyberte složku, obvykle vaši aktuální složku.
  4. V části Vybrat jazyk vyberte Vlastní obslužnou rutinu.
  5. V části Vybrat šablonu pro první funkci vyberte HttpTrigger.
  6. Pojmenujte aplikaci, například hello.
  7. 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.

  1. Vytvořte soubor s názvem server.go v kořenovém adresáři projektu.

  2. 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í.

  3. 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 z FUNCTIONS_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))
    
  4. Pojďme přidat zbývající kód. Nejprve lokalizovat následující řádek a zrušit komentář:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. 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 na application/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.

  1. 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.

  2. 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.

  3. customHandler Pod element přidejte enableForwardingHttpRequest prvek a dejte jí hodnotu true. Váš customHandler prvek by teď měl vypadat takto:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. 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
    
  5. 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.