Aplicație web

Finalizat

Pentru a utiliza o rutină de tratare particularizată, trebuie să creați o aplicație web. După ce ați scris aplicația și ați compilat-o, trebuie să configurați gazda Funcții Azure, astfel încât să știe cum să o utilizeze. Vom explora mai multe despre aceasta mai târziu. Mai întâi, cum construiți o aplicație web în Deplasare?

Construiți o interfață API REST în deplasare

Pentru a construi o interfață API REST utilizând Go, trebuie să știți câteva lucruri:

  • Import biblioteci. Utilizați bibliotecile fmt, log, și net/http. Aceste biblioteci vă ajută să gestionați rutele, să gestionați solicitările primite și să vă ocupați de înregistrarea în jurnal. Utilizați următoarea instrucțiune de import:

    import (
       "fmt",
       "log",
       "net/http"
    )    
    
  • Configurați rutarea. API-urile REST constau din diviziuni logice denumite rute . Rutele sunt adrese care răspund la o anumită preocupare din aplicație. Pentru a configura o rută, apelați metoda de HandleFunc() în instanța http și definiți ruta de răspuns la solicitări:

    http.HandleFunc("/", handleRoute)   
    

    În acest caz, trebuie să creați o funcție de handleRoute pentru a potrivi solicitările de intrare în raport cu "/"rutei "/".

  • Gestionați solicitările. Trebuie să gestionați solicitările de intrare și să citiți lucruri cum ar fi parametrii ruterului sau interogării sau un corp publicat. Atunci trebuie să construiți un răspuns. O funcție care gestionează o solicitare poate arăta astfel:

    func handleRequest(w: http:ResponseWriter, r: http.Request) {
        fmt.Fprintf(w, "My first REST API") 
    }
    

    Codul trimite textul "Primul meu API REST" către un client de apelare. Metoda Fprintf() preia două argumente: fluxul de răspuns și șirul de trimis înapoi.

  • Creați serverul. Pentru a putea asculta solicitările, trebuie să porniți serverul. De asemenea, trebuie să specificați o parte la care se pot trimite solicitări. Următorul cod vă arată cum să creați serverul:

    http.ListenAndServe(":3000", nil)
    

    Serverul este acum sus și poate asculta solicitările pe portul 3000.

Crearea unei aplicații Funcții Azure

Înainte de a dezvolta o aplicație Azure Functions, vă recomandăm:

Eșafodarea unei aplicații Funcții utilizând Visual Studio Code

După ce aveți instalate toate dependențele necesare pe sistem, următorul pas este să scaffoldați o aplicație. Atunci când sunteți întrebat despre modulul runtime, alegeți rutină de tratare particularizată .

Acum ați asigurat că fișierele corecte vor fi generate. Atunci când generați un proiect astfel, trebuie să selectați un tip de declanșator pentru prima funcție. Rutinele de tratare particularizate funcționează cu toate declanșatoarele și legările obișnuite.

După ce terminați de generat proiectul, ar trebui să aveți o aplicație cu următoarele fișiere:

  • host.json
  • local.setting.json
  • proxies.json
  • function.json

Fișierul function.json se află într-un director al cărui nume corespunde numelui pe care l-ați denumit prima funcție. Utilizați acest fișier pentru a vă configura funcția.

Configurarea proiectului

Pentru ca aplicația dvs. să funcționeze cu primitive HTTP, trebuie să configurați câteva lucruri:

  • Ascultați un port de rutină de tratare particularizat. Aplicația dvs. trebuie să asculte un anumit port. Variabila FUNCTIONS_CUSTOMHANDLER_PORT conține valoarea de care aveți nevoie. Puteți căuta valoarea portului utilizând următorul cod:

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    
  • Configurați calea executabilă implicită. Pentru că construiți un fișier executabil, trebuie să spuneți proiectului aplicației Functions unde se află.

    Găsiți fișierul function.json în rădăcina proiectului. În secțiunea customHandler, specificați defaultExecutablePath. Iată un exemplu cu cum poate arăta:

    "customHandler": {
       "defaultExecutablePath": "mygoapp.exe"
    }
    
  • Activați redirecționarea solicitărilor. Atunci când aveți de-a face cu o funcție care utilizează un trigger HTTP, doriți să configurați aplicația ușor diferit decât dacă ați avea de-a face cu un alt tip de trigger (cum ar fi un trigger de coadă).

    Activați o proprietate denumită enableForwardingHttpRequest. Atunci când această proprietate este activată, aceasta modifică comportamentul modului în care se gestionează solicitarea în următoarele moduri:

    • Copie a solicitării originale. Solicitarea HTTP nu conține sarcina de solicitare a handlerului particularizat. În schimb, gazda Functions apelează rutina de tratare cu o copie a solicitării HTTP originale.

    • Aceeași cale ca solicitarea inițială. Gazda Functions apelează rutina de tratare cu aceeași cale ca solicitarea inițială.

      Atunci când definiți o rută și o rutină de tratare a rutelor, trebuie să fiți specific în modul în care configurați rutarea. Să presupunem că aveți următoarea schiță de proiect:

      hello/
        function.json   
      

      Fișierele din schiță sunt mapate la o rută /api/hello în mod implicit. În codul dvs. pentru configurarea traseului, trebuie să specificați ruta completă:

      mux.HandleFunc("/api/hello", helloHandler)
      

      Dacă nu ați activat această setare, pentru alte tipuri de triggere și legări, specificarea codului ruterului ca "/hello" ar fi fost suficientă.

    • Copie a răspunsului rutinei de tratare. Gazda Functions returnează o copie a răspunsului HTTP al rutinei de tratare ca răspuns la solicitarea inițială.

În exemplul anterior, fișierul executabil este mygoapp.exe. Exemplul presupune că creați fișierul executabil dintr-un fișier denumit mygoapp.go, dar puteți denumi fișierul Salt orice doriți. Pe Linux sau macOS, fișierul executabil nu are o extensie.

Construiți aplicația

Construirea aplicației web în acest moment nu este cu mult diferită de construirea oricărei aplicații web folosind Go. Atât timp cât ați efectuat configurația descrisă în secțiunea anterioară, sunteți gata.

Acum trebuie să urmați pașii următori:

  1. Citiți portul.
  2. Instanța serverului HTTP.
  3. Definiți rutele și rutinele de tratare a rutelor.
  4. Începeți să ascultați portul.
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)