Alıştırma - Uygulama oluşturmak için özel işleyici kullanma

Tamamlandı

Bu alıştırmada Go kullanarak sunucusuz bir uygulama oluşturacak ve çalıştıracaksınız.

Uygulamayı iskeleye ekle

Visual Studio Code'daki Azure İşlevleri uzantısını kullanarak uygulamanın iskelesini yaparak başlayın.

  1. Komut Paleti Görüntüle'yi>seçin.
  2. Azure İşlevleri: Yeni Proje Oluştur'u seçin.
  3. Genellikle geçerli klasörünüz olan bir klasör seçin.
  4. Dil seçin bölümünde Özel İşleyici'yi seçin.
  5. İlk işleviniz için şablon seçin bölümünde HttpTrigger'ı seçin.
  6. Uygulamaya merhaba gibi bir ad verin.
  7. Anonim yetkilendirme düzeyini seçin. İsterseniz bunu daha sonra değiştirebilirsiniz.

Şimdi aşağıdakine benzer bir projeniz var:

hello/
  function.json
.funcignore
.gitignore
host.json
local.settings.json
proxies.json

Uygulamayı oluşturma

Sonraki adım serisi, BIR HTTP tetikleyicisine yanıt verebilen bir uygulama oluşturmaktır.

  1. Proje kökünde server.go adlı bir dosya oluşturun.

  2. server.go'ya aşağıdaki içeriği verin:

    package main
    
    import (
     "fmt"
     "io/ioutil"
     "log"
     "net/http"
     "os"
    )
    

    Yukarıdaki kod, bir HTTP uygulaması oluşturmak ve ortam değişkenlerini aramak için ihtiyacınız olan tüm kitaplıkları içeri aktarır.

  3. İçeri aktarma deyimlerinden sonra aşağıdaki kodu ekleyin:

    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))
    }
    

    main() İşlev tek başına çağrılır. Kodun ilk satırında ortam değişkeninden FUNCTIONS_CUSTOM_HANDLER_PORT nasıl okunacağı belirtilir:

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    

    Ardından işlev bağlantı noktasının var olup olmadığını denetler. Aksi takdirde işleve 8080 numaralı bağlantı noktası atanır:

    if !exists {
      customHandlerPort = "8080"
    }
    

    Sonraki kod bir HTTP sunucusu örneği oluşturur:

    mux := http.NewServeMux()
    

    Son önem derecesi, belirli bir bağlantı noktasını dinlemeye başlayan ve istekleri almaya hazır olduğunu belirten ve yöntemiyle ListenAndServe()gelen satırdır:

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Şimdi kalan kodu ekleyelim. İlk olarak, aşağıdaki satırı yerelleştirin ve açıklamayı kaldırın:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. import deyimleri ve işlevi arasında main() aşağıdaki kodu ekleyin:

    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)
      }
    }
    

    İşlev, helloHandler() içerik türünü olarak application/jsonayarlar. "Merhaba dünya" veya varsa gönderilen gövde ile yanıt verir.

Uygulamayı çalıştırma

Bu noktada kodu yazmayı bitirdiniz, ancak bu senaryonun çalışması için bazı yapılandırmalar yapmanız gerekir. İşlev konağı tarafından bulunabilmesi için yürütülebilir dosyanızın nerede olduğuna dikkat etmeniz gerekir. Ayrıca yönlendirmeyi ve bu uygulamanın HTTP tetikleyicileriyle uğraştığını ve başka bağlama türü olmadığını yapılandırmanız gerekir.

  1. Terminalden proje kökünde komutunu çalıştırın go build server.go :

    go build server.go
    

    Bu adım, macOS ve Linux üzerinde sunucu veya Windows işletim sisteminde server.exe adlı yürütülebilir bir dosya oluşturur.

  2. host.json dosyasını açın ve içindeki öğesini bulun.defaultExecutablePath customHandler macOS ve Linux'ta veya .\server.exe Windows işletim sisteminde belirtin./server.

  3. öğesinin customHandler altına öğesini ekleyin enableForwardingHttpRequest ve değerini trueverin. Öğeniz customHandler şimdi şöyle görünmelidir:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. Terminalden proje kökünde komutunu çalıştırın func start . Bunu yaptığınızda İşlevler uygulamanız başlatılır.

    func start
    

    Çıkışın sonunda şuna benzer bir çıkış görürsünüz:

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. Tarayıcıda adresine http://localhost:7071/api/hellogidin. "Merhaba dünya" çıkışını görmeniz gerekir.

Tebrikler! Go'da sunucusuz bir uygulama geliştirdiniz.