Ćwiczenie — tworzenie aplikacji przy użyciu niestandardowej procedury obsługi
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.
- Wybierz pozycję Wyświetl>paletę poleceń.
- Wybierz pozycję Azure Functions: Utwórz nowy projekt.
- Wybierz folder, zazwyczaj bieżący folder.
- W obszarze Wybierz język wybierz pozycję Niestandardowa procedura obsługi.
- W obszarze Wybierz szablon dla pierwszej funkcji wybierz pozycję HttpTrigger.
- Nadaj aplikacji nazwę, taką jak hello.
- 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.
Utwórz plik o nazwie server.go w katalogu głównym projektu.
Nadaj plikowi server.go następującą zawartość:
package main import ( "fmt" "io" "log" "net/http" "os" )Powyższy kod importuje wszystkie biblioteki potrzebne do skompilowania aplikacji HTTP i wyszukanie zmiennych środowiskowych.
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 sposób odczytu ze zmiennej środowiskowejFUNCTIONS_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))Dodajmy pozostały kod. Najpierw znajdź następujący wiersz i usuń komentarz:
// mux.HandleFunc("/api/hello", helloHandler)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, _ := io.ReadAll(r.Body) w.Write(body) } }Funkcja
helloHandler()ustawia typ zawartości naapplication/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ń.
W terminalu uruchom polecenie
go build server.gow katalogu głównym projektu:go build server.goTen krok tworzy plik wykonywalny o nazwie serwer w systemach macOS i Linux lub server.exe w systemie operacyjnym Windows.
Otwórz plik host.json i znajdź
defaultExecutablePathelement wewnątrz plikucustomHandler. Określ./serverw systemach macOS i Linux lub.\\server.exew systemie operacyjnym Windows.customHandlerW obszarze elementu dodajenableForwardingHttpRequestelement i nadaj mu wartośćtrue. ElementcustomHandlerpowinien teraz wyglądać następująco:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }W terminalu uruchom polecenie
func startw katalogu głównym projektu. Spowoduje to uruchomienie aplikacji usługi Functions.func startNa końcu danych wyjściowych zobaczysz dane wyjściowe podobne do następujących:
Functions: hello: [GET,POST] http://localhost:7071/api/helloW 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.