Aplikacja sieci web
Aby użyć niestandardowego programu obsługi, musisz utworzyć aplikację internetową. Po napisaniu aplikacji i skompilowaniu jej należy skonfigurować hosta usługi Azure Functions, aby wiedział, jak z niej korzystać. Dowiemy się więcej na ten temat później. Po pierwsze, jak utworzyć aplikację internetową w języku Go?
Tworzenie interfejsu API REST w języku Go
Aby utworzyć interfejs API REST przy użyciu języka Go, musisz znać kilka rzeczy:
Importowanie bibliotek. Użyjesz bibliotek
fmt
,log
inet/http
. Te biblioteki ułatwiają zarządzanie trasami, obsługę żądań przychodzących i obsługę rejestrowania. Użyj następującej instrukcji importowania:import ( "fmt", "log", "net/http" )
Konfigurowanie routingu. Interfejsy API REST składają się z podziałów logicznych nazywanych trasami. Trasy to adresy, które odpowiadają na konkretne problemy w aplikacji. Aby skonfigurować trasę, wywołaj
HandleFunc()
metodę w wystąpieniuhttp
i zdefiniuj trasę, aby odpowiadać na żądania:http.HandleFunc("/", handleRoute)
W takim przypadku należy utworzyć
handleRoute
funkcję w celu dopasowania żądań przychodzących do trasy"/"
.Zarządzanie żądaniami. Musisz zarządzać żądaniami przychodzącymi i odczytywać takie elementy jak router lub parametry zapytania lub wysłana treść. Następnie należy utworzyć odpowiedź. Funkcja, która obsługuje żądanie, może wyglądać następująco:
func handleRequest(w: http:ResponseWriter, r: http.Request) { fmt.Fprintf(w, "My first REST API") }
Kod wysyła tekst "Mój pierwszy interfejs API REST" z powrotem do wywołującego klienta. Metoda
Fprintf()
przyjmuje dwa argumenty: strumień odpowiedzi i ciąg do wysłania z powrotem.Utwórz serwer. Aby móc nasłuchiwać żądań, należy uruchomić serwer. Należy również określić część, do której można wysyłać żądania. Poniższy kod pokazuje, jak utworzyć serwer:
http.ListenAndServe(":3000", nil)
Serwer działa teraz i może nasłuchiwać żądań na porcie 3000.
Tworzenie aplikacji usługi Azure Functions
Przed utworzeniem aplikacji usługi Azure Functions zalecamy:
Zainstaluj program Visual Studio Code. Aplikacje usługi Azure Functions można tworzyć za pomocą dowolnego edytora tekstów lub środowiska IDE. W tym module przedstawiono niektóre rozszerzenia, które ułatwiają tworzenie.
Zainstaluj rozszerzenie programu Visual Studio Code dla usługi Azure Functions. To rozszerzenie pomoże Ci utworzyć szkielet aplikacji usługi Functions, uruchomić ją i debugować.
Zainstaluj narzędzia Azure Functions Core Tools. Ta instalacja obejmuje między
func
innymi polecenie wykonywalne, które umożliwia uruchamianie aplikacji usługi Functions.
Tworzenie szkieletu aplikacji usługi Functions przy użyciu programu Visual Studio Code
Po zainstalowaniu wszystkich wymaganych zależności w systemie następnym krokiem jest utworzenie szkieletu aplikacji. Po wyświetleniu monitu o środowisko uruchomieniowe wybierz pozycję Niestandardowa procedura obsługi.
Teraz upewniono się, że zostaną wygenerowane poprawne pliki. Podczas generowania projektu w ten sposób należy wybrać typ wyzwalacza dla pierwszej funkcji. Niestandardowe programy obsługi współpracują ze wszystkimi zwykłymi wyzwalaczami i powiązaniami.
Po zakończeniu generowania projektu powinna istnieć aplikacja z następującymi plikami:
- host.json
- local.setting.json
- proxies.json
- function.json
Plik function.json znajduje się w katalogu, którego nazwa odpowiada nazwie twojej pierwszej funkcji. Użyjesz tego pliku do skonfigurowania funkcji.
Konfigurowanie projektu
Aby aplikacja działała z elementami pierwotnymi HTTP, należy skonfigurować kilka rzeczy:
Nasłuchiwanie niestandardowego portu programu obsługi. Aplikacja musi nasłuchiwać określonego portu. Zmienna
FUNCTIONS_CUSTOMHANDLER_PORT
zawiera potrzebną wartość. Wartość portu można wyszukać przy użyciu następującego kodu:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
Skonfiguruj domyślną ścieżkę wykonywalną. Ponieważ tworzysz plik wykonywalny, musisz poinformować projekt aplikacji usługi Functions o lokalizacji.
Znajdź plik function.json w katalogu głównym projektu.
customHandler
W sekcji określ wartośćdefaultExecutablePath
. Oto przykład tego, jak może wyglądać:"customHandler": { "defaultExecutablePath": "mygoapp.exe" }
Włącz przekazywanie żądań. Gdy masz do czynienia z funkcją korzystającą z wyzwalacza HTTP, chcesz skonfigurować aplikację nieco inaczej niż w przypadku innego typu wyzwalacza (na przykład wyzwalacza kolejki).
Włącz właściwość o nazwie
enableForwardingHttpRequest
. Po włączeniu tej właściwości zmienia zachowanie sposobu obsługi żądania w następujący sposób:Kopia oryginalnego żądania. Żądanie HTTP nie zawiera ładunku żądania niestandardowego programu obsługi. Zamiast tego host usługi Functions wywołuje procedurę obsługi z kopią oryginalnego żądania HTTP.
Ta sama ścieżka co oryginalne żądanie. Host usługi Functions wywołuje procedurę obsługi z tą samą ścieżką co oryginalne żądanie.
Podczas definiowania trasy i procedury obsługi tras należy określić sposób konfigurowania routingu. Załóżmy, że masz następujący konspekt projektu:
hello/ function.json
Pliki w konspekcie będą domyślnie mapowane na trasę
/api/hello
. W kodzie konfigurowania trasy należy określić pełną trasę:mux.HandleFunc("/api/hello", helloHandler)
Jeśli to ustawienie nie zostało włączone, w przypadku innych typów wyzwalaczy i powiązań należy określić kod routera, tak jak
"/hello"
byłby wystarczający.Kopia odpowiedzi programu obsługi. Host usługi Functions zwraca kopię odpowiedzi HTTP programu obsługi jako odpowiedź na oryginalne żądanie.
W poprzednim przykładzie plik wykonywalny to mygoapp.exe
. W przykładzie przyjęto założenie, że tworzysz plik wykonywalny z pliku o nazwie mygoapp.go
, ale możesz nazwać plik Go dowolnym elementem. W systemie Linux lub macOS plik wykonywalny nie ma rozszerzenia.
Tworzenie aplikacji
Kompilowanie aplikacji internetowej w tym momencie nie różni się znacznie od kompilowania żadnej aplikacji internetowej przy użyciu języka Go. O ile konfiguracja została opisana w poprzedniej sekcji, wszystko jest ustawione.
Teraz musisz wykonać następujące czynności:
- Odczyt portu.
- Utwórz wystąpienie wystąpienia serwera HTTP.
- Definiowanie tras i procedur obsługi tras.
- Rozpocznij nasłuchiwanie na porcie.
customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
if !exists {
customHandlerPort = "8080"
} // 1)
mux := http.NewServeMux() // 2)
mux.HandleFunc("/order", orderHandler) // 3)
fmt.Println("Go server Listening on: ", customHandlerPort)
log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux)) // 4)