Webapp

Voltooid

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, logen net/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 het http 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:

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 op defaultExecutablePath. 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.exehet uitvoerbare bestand . In het voorbeeld wordt ervan uitgegaan dat u het uitvoerbare bestand maakt op basis van een bestand met de naam mygoapp.goGo, 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:

  1. Lees de poort.
  2. Instantie van een HTTP-server instantiëren.
  3. Definieer routes en route-handlers.
  4. 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)