Øvelse – brug en brugerdefineret handler til at bygge en app

Fuldført

I denne øvelse skal du oprette og køre en serveruafhængig app ved hjælp af Go.

Stillads til appen

Begynd med at oprette et stillads for appen ved hjælp af udvidelsen Azure Functions i Visual Studio Code.

  1. VælgVis>kommandopalet .
  2. Vælg Azure Functions: Opret nyt projekt.
  3. Vælg en mappe, som normalt er den aktuelle mappe.
  4. I Vælg et sprogskal du vælge Brugerdefineret handler.
  5. I Vælg en skabelon til din første funktionskal du vælge HttpTrigger.
  6. Giv appen et navn, f.eks. hej.
  7. Vælg et godkendelsesniveau for anonyme. Du kan ændre det senere, hvis du vil.

Nu har du et projekt, der ser nogenlunde sådan ud:

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

Opret appen

Den næste række trin handler om at oprette en app, der kan reagere på en HTTP-udløser.

  1. Opret en fil med navnet server.go i projektroden.

  2. Giv server.go følgende indhold:

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

    Den foregående kode importerer alle de biblioteker, du skal bruge for at bygge en HTTP-app og slå miljøvariabler op.

  3. Tilføj følgende kode efter importsætningerne:

    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() aktiveres af sig selv. Den første linje i koden angiver, hvordan den læses fra miljøvariablen FUNCTIONS_CUSTOM_HANDLER_PORT :

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

    Derefter kontrollerer funktionen, om porten findes. Hvis ikke, tildeles funktionen port 8080:

    if !exists {
      customHandlerPort = "8080"
    }
    

    Den næste kode instantierer en HTTP-serverforekomst:

    mux := http.NewServeMux()
    

    Den sidste prioritetslinje er den, der begynder at lytte til en bestemt port, og signalerer, at den er klar til at modtage anmodninger, med metoden ListenAndServe():

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Lad os tilføje den resterende kode. Find først følgende linje og fjern kommentaren:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. Tilføj følgende kode mellem importsætningerne og funktionen main():

    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, _ := io.ReadAll(r.Body)
        w.Write(body)
      }
    }
    

    Funktionen helloHandler() angiver indholdstypen til application/json. Det reagerer med enten "hej verden" eller den indsendte krop, hvis nogen.

Kør appen

Du er færdig med at oprette koden på nuværende tidspunkt, men du skal udføre en konfiguration, for at dette scenarie kan fungere. Du skal påpege, hvor din eksekverbare fil er, så funktionsværten kan finde den. Du skal også konfigurere den routing og tilstand, som denne app håndterer HTTP-udløsere og ingen andre typer bindinger.

  1. Kør go build server.go i projektroden fra en terminal:

    go build server.go
    

    Dette trin opretter en eksekverbar fil, der kaldes server på macOS og Linux eller server.exe på et Windows OS.

  2. Åbn host.json-filen, og find elementet defaultExecutablePath i det customHandler. Angiv ./server på macOS og Linux eller .\\server.exe på et Windows OS.

  3. Under elementet customHandler skal du tilføje elementet enableForwardingHttpRequest og give det værdien true. Dit customHandler element bør nu se sådan ud:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. Kør func start i projektroden fra en terminal. Det starter appen Functions.

    func start
    

    I slutningen af outputtet kan du se et output, der ligner:

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. Gå til http://localhost:7071/api/helloi en browser. Du bør se outputtet "hej verden."

Tillykke! Du har udviklet en serveruafhængig app i Go.