Ć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/ioutil" "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, jak będzie odczytywany 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 należy zlokalizować następujący wiersz i usunąć 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, _ := ioutil.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.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.
Otwórz plik host.json i znajdź
defaultExecutablePath
element wewnątrz plikucustomHandler
. Określ./server
w systemach macOS i Linux lub.\server.exe
w systemie operacyjnym Windows.customHandler
W obszarze elementu dodajenableForwardingHttpRequest
element i nadaj mu wartośćtrue
. ElementcustomHandler
powinien teraz wyglądać następująco:"customHandler": { "description": { "defaultExecutablePath": "./server", "workingDirectory": "", "arguments": [] }, "enableForwardingHttpRequest" : true }
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
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.