Ćwiczenie — tworzenie aplikacji przy użyciu niestandardowej procedury obsługi

Ukończone

W tym ćwiczeniu skompilujesz i uruchomisz aplikację bezserwerową przy użyciu języka Go.

Tworzenie szkieletu aplikacji

Zacznij od tworzenia szkieletu aplikacji przy użyciu rozszerzenia usługi Azure Functions w programie Visual Studio Code.

  1. Wybierz pozycję Wyświetl>paletę poleceń.
  2. Wybierz pozycję Azure Functions: Utwórz nowy projekt.
  3. Wybierz folder, zazwyczaj bieżący folder.
  4. W obszarze Wybierz język wybierz pozycję Niestandardowa procedura obsługi.
  5. W obszarze Wybierz szablon dla pierwszej funkcji wybierz pozycję HttpTrigger.
  6. Nadaj aplikacji nazwę, taką jak hello.
  7. Wybierz poziom autoryzacji anonimowego. Jeśli chcesz, możesz to zmienić później.

Teraz masz projekt podobny do następującego:

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

Tworzenie aplikacji

Kolejną serią kroków jest utworzenie aplikacji, która może odpowiedzieć na wyzwalacz HTTP.

  1. Utwórz plik o nazwie server.go w katalogu głównym projektu.

  2. Nadaj plikowi server.go następującą zawartość:

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

    Powyższy kod importuje wszystkie biblioteki potrzebne do skompilowania aplikacji HTTP i wyszukanie zmiennych środowiskowych.

  3. Dodaj następujący kod po instrukcjach import:

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

    Funkcja jest wywoływana main() samodzielnie. Pierwszy wiersz kodu określa, jak będzie odczytywany ze zmiennej środowiskowej FUNCTIONS_CUSTOM_HANDLER_PORT :

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

    Następnie funkcja sprawdza, czy port istnieje. Jeśli nie, funkcja jest przypisana na porcie 8080:

    if !exists {
      customHandlerPort = "8080"
    }
    

    Następny kod tworzy wystąpienie serwera HTTP:

    mux := http.NewServeMux()
    

    Ostatni wiersz ważności to ten, który rozpoczyna nasłuchiwanie określonego portu i sygnałów, że jest gotowy do odbierania żądań przy użyciu metody ListenAndServe():

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Dodajmy pozostały kod. Najpierw należy zlokalizować następujący wiersz i usunąć komentarz:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. Między instrukcjami import i funkcją main() dodaj następujący 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)
      }
    }
    

    Funkcja helloHandler() ustawia typ zawartości na application/json. Odpowiada za pomocą "hello world" lub wysłana treść, jeśli istnieje.

Uruchom aplikację

W tym momencie utworzysz kod, ale musisz wykonać konfigurację, aby ten scenariusz działał. Musisz wskazać, gdzie znajduje się plik wykonywalny, aby host funkcji mógł go znaleźć. Należy również skonfigurować routing i stan, który ta aplikacja zajmuje się wyzwalaczami HTTP i nie ma innych typów powiązań.

  1. W terminalu uruchom polecenie go build server.go w katalogu głównym projektu:

    go build server.go
    

    Ten krok tworzy plik wykonywalny o nazwie serwer w systemach macOS i Linux lub server.exe w systemie operacyjnym Windows.

  2. Otwórz plik host.json i znajdź defaultExecutablePath element wewnątrz pliku customHandler . Określ ./server w systemach macOS i Linux lub .\server.exe w systemie operacyjnym Windows.

  3. customHandler W obszarze elementu dodaj enableForwardingHttpRequest element i nadaj mu wartość true. Element customHandler powinien teraz wyglądać następująco:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. W terminalu uruchom polecenie func start w katalogu głównym projektu. Spowoduje to uruchomienie aplikacji usługi Functions.

    func start
    

    Na końcu danych wyjściowych zobaczysz dane wyjściowe podobne do następujących:

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. W przeglądarce przejdź do strony http://localhost:7071/api/hello. Powinny zostać wyświetlone dane wyjściowe "hello world".

Gratulacje! Utworzono aplikację bezserwerową w języku Go.