Övning – Använda en anpassad hanterare för att skapa en app

Slutförd

I den här övningen ska du skapa och köra en serverlös app med hjälp av Go.

Autogenerera appen

Börja med att skapa en app med hjälp av Azure Functions-tillägget i Visual Studio Code.

  1. Välj Visa>kommandopalett.
  2. Välj Azure Functions: Skapa nytt projekt.
  3. Välj en mapp, vanligtvis din aktuella mapp.
  4. I Välj ett språk väljer du Anpassad hanterare.
  5. I Välj en mall för din första funktion väljer du HttpTrigger.
  6. Ge appen ett namn, till exempel hello.
  7. Välj en auktoriseringsnivå för anonym. Du kan ändra det senare om du vill.

Nu har du ett projekt som ser ut ungefär så här:

hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json

Skapa appen

Nästa serie steg handlar om att skapa en app som kan svara på en HTTP-utlösare.

  1. Skapa en fil med namnet server.go i projektroten.

  2. Ge server.go följande innehåll:

    package main
    
    import (
     "fmt"
     "io/ioutil"
     "log"
     "net/http"
     "os"
    )
    

    Föregående kod importerar alla bibliotek som du behöver för att skapa en HTTP-app och söka efter miljövariabler.

  3. Lägg till följande kod efter importinstruktionerna:

    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))
    }
    

    Funktionen main() anropas av sig själv. Den första raden i koden anger hur den FUNCTIONS_CUSTOM_HANDLER_PORT ska läsas från miljövariabeln:

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    

    Sedan kontrollerar funktionen om porten finns. Annars tilldelas funktionen port 8080:

    if !exists {
      customHandlerPort = "8080"
    }
    

    Nästa kod instansierar en HTTP-serverinstans:

    mux := http.NewServeMux()
    

    Den sista prioritetsraden är den som börjar lyssna på en specifik port och signalerar att den är redo att ta emot begäranden med metoden ListenAndServe():

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Nu ska vi lägga till den återstående koden. Först lokaliserar du följande rad och avkommentarer den:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. Mellan importinstruktionerna main() och funktionen lägger du till följande kod:

    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)
      }
    }
    

    Funktionen helloHandler() anger innehållstypen till application/json. Den svarar med antingen "hello world" eller den publicerade brödtexten, om någon.

Kör appen

Du är klar med att redigera koden just nu, men du måste göra en konfiguration för att det här scenariot ska fungera. Du måste peka på var den körbara filen finns, så att funktionsvärden kan hitta den. Du måste också konfigurera routning och tillstånd som den här appen hanterar MED HTTP-utlösare och inga andra typer av bindningar.

  1. Kör i projektroten från en terminal go build server.go :

    go build server.go
    

    Det här steget skapar en körbar fil som kallas server på macOS och Linux, eller server.exe på ett Windows-operativsystem.

  2. Öppna filen host.json och leta reda på elementet defaultExecutablePath i den customHandler . Ange ./server i macOS och Linux eller .\server.exe i ett Windows-operativsystem.

  3. Under elementet customHandler lägger du till elementet enableForwardingHttpRequest och ger det värdet true. Elementet customHandler bör nu se ut så här:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. Kör i projektroten från en terminal func start . När du gör det startas din Functions-app.

    func start
    

    I slutet av utdata ser du utdata som liknar:

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. I en webbläsare går du till http://localhost:7071/api/hello. Du bör se utdatan "hello world".

Grattis! Du har utvecklat en serverlös app i Go.