Webapp
Als u een aangepaste handler wilt gebruiken, moet u een webtoepassing maken. Nadat u uw toepassing hebt geschreven en gecompileerd, moet u de Azure Functions-host configureren, zodat deze weet hoe deze moet worden gebruikt. We gaan daar later meer over verkennen. Hoe bouwt u eerst een webtoepassing in Go?
Een REST API bouwen in Go
Als u een REST API wilt bouwen met go, moet u een aantal dingen weten:
Bibliotheken importeren. U gebruikt de bibliotheken
fmt
,log
ennet/http
. Deze bibliotheken helpen u bij het beheren van routes, het verwerken van binnenkomende aanvragen en het verwerken van logboekregistratie. Gebruik de volgende importinstructie:import ( "fmt", "log", "net/http" )
Stel routering in. REST API's bestaan uit logische divisies die routes worden genoemd. Routes zijn adressen die reageren op een specifiek probleem in de app. Als u een route wilt instellen, roept u de
HandleFunc()
methode op hethttp
exemplaar aan en definieert u de route om te reageren op aanvragen:http.HandleFunc("/", handleRoute)
In dit geval moet u een
handleRoute
functie maken om binnenkomende aanvragen te vergelijken met route"/"
.Aanvragen beheren. U moet binnenkomende aanvragen beheren en zaken lezen, zoals router- of queryparameters of een geplaatste hoofdtekst. Vervolgens moet u een antwoord maken. Een functie die een aanvraag verwerkt, kan er als volgt uitzien:
func handleRequest(w: http:ResponseWriter, r: http.Request) { fmt.Fprintf(w, "My first REST API") }
De code verzendt de tekst 'Mijn eerste REST API' terug naar een aanroepende client. De methode
Fprintf()
heeft twee argumenten: de antwoordstroom en de tekenreeks die moet worden teruggestuurd.Maak de server. Als u aanvragen wilt kunnen beluisteren, moet u de server starten. U moet ook een deel opgeven waarnaar aanvragen kunnen worden verzonden. De volgende code laat zien hoe u de server maakt:
http.ListenAndServe(":3000", nil)
De server is nu up en kan luisteren naar aanvragen op poort 3000.
Een Azure Functions-app maken
Voordat u een Azure Functions-app ontwikkelt, raden we u aan het volgende te doen:
Installeer Visual Studio Code. U kunt Azure Functions-apps ontwerpen met elke teksteditor of IDE. In deze module worden enkele extensies getoond die het ontwerpen eenvoudiger maken.
Installeer de Visual Studio Code-extensie voor Azure Functions. Met deze extensie kunt u een Functions-app opzetten, deze uitvoeren en fouten opsporen.
Installeer Azure Functions Core Tools. Deze installatie bevat onder andere een
func
uitvoerbare opdracht waarmee u uw Functions-app kunt uitvoeren.
Een Functions-app maken met behulp van Visual Studio Code
Nadat u alle benodigde afhankelijkheden op uw systeem hebt geïnstalleerd, is de volgende stap het opzetten van een toepassing. Wanneer u wordt gevraagd over runtime, kiest u Aangepaste handler.
Nu hebt u ervoor gezorgd dat de juiste bestanden worden gegenereerd. Wanneer u op deze manier een project genereert, moet u een triggertype selecteren voor uw eerste functie. Aangepaste handlers werken met alle gebruikelijke triggers en bindingen.
Nadat u klaar bent met het genereren van het project, moet u een app hebben met de volgende bestanden:
- host.json
- local.setting.json
- proxy's.json
- function.json
Het bestand function.json bevindt zich in een map waarvan de naam overeenkomt met de naam van uw eerste functie. U gebruikt dit bestand om uw functie te configureren.
Het project configureren
Als uw app werkt met HTTP-primitieven, moet u een aantal dingen configureren:
Luister naar een aangepaste handlerpoort. Uw app moet luisteren naar een specifieke poort. De variabele
FUNCTIONS_CUSTOMHANDLER_PORT
bevat de waarde die u nodig hebt. U kunt de poortwaarde opzoeken met behulp van de volgende code:customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
Configureer het standaardpad voor uitvoerbare bestanden. Omdat u een uitvoerbaar bestand bouwt, moet u uw Functions-app-project vertellen waar het zich bevindt.
Zoek het bestand function.json in de hoofdmap van het project. Geef in de
customHandler
sectie opdefaultExecutablePath
. Hier volgt een voorbeeld van hoe het eruit kan zien:"customHandler": { "defaultExecutablePath": "mygoapp.exe" }
Schakel doorsturen van aanvragen in. Wanneer u te maken hebt met een functie die gebruikmaakt van een HTTP-trigger, wilt u de app iets anders configureren dan wanneer u te maken hebt met een ander type trigger (zoals een wachtrijtrigger).
Schakel een eigenschap in met de naam
enableForwardingHttpRequest
. Wanneer deze eigenschap is ingeschakeld, wordt het gedrag van de verwerking van de aanvraag op de volgende manieren gewijzigd:Kopie van de oorspronkelijke aanvraag. De HTTP-aanvraag bevat niet de nettolading van de aanvraag van de aangepaste handler. In plaats daarvan roept de Functions-host de handler aan met een kopie van de oorspronkelijke HTTP-aanvraag.
Hetzelfde pad als de oorspronkelijke aanvraag. De Functions-host roept de handler aan met hetzelfde pad als de oorspronkelijke aanvraag.
Wanneer u een route en een route-handler definieert, moet u specifiek zijn in de manier waarop u de routering instelt. Stel dat u het volgende projectoverzicht hebt:
hello/ function.json
De bestanden in het overzicht worden standaard toegewezen aan een route
/api/hello
. In uw code voor het instellen van de route moet u de volledige route opgeven:mux.HandleFunc("/api/hello", helloHandler)
Als u deze instelling niet had ingeschakeld, moet u voor andere typen triggers en bindingen de routercode opgeven zoals
"/hello"
voldoende zou zijn geweest.Kopie van het antwoord van de handler. De Functions-host retourneert een kopie van het HTTP-antwoord van de handler als het antwoord op de oorspronkelijke aanvraag.
In het voorgaande voorbeeld is mygoapp.exe
het uitvoerbare bestand . In het voorbeeld wordt ervan uitgegaan dat u het uitvoerbare bestand maakt op basis van een bestand met de naam mygoapp.go
Go, maar u kunt het Go-bestand een andere naam opgeven. In Linux of macOS heeft het uitvoerbare bestand geen extensie.
De app bouwen
Het bouwen van de web-app op dit moment verschilt niet veel van het bouwen van een web-app met behulp van Go. Zolang u de configuratie hebt uitgevoerd die in de vorige sectie is beschreven, bent u klaar.
Nu moet u de volgende stappen uitvoeren:
- Lees de poort.
- Instantie van een HTTP-server instantiëren.
- Definieer routes en route-handlers.
- Begin met luisteren op de poort.
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)