Latihan - Menggunakan handler kustom untuk membangun aplikasi

Selesai

Dalam latihan ini, Anda akan membuat dan menjalankan aplikasi tanpa server menggunakan Go.

Menguraikan aplikasi

Mulailah dengan membuat perancah aplikasi, dengan menggunakan ekstensi Azure Functions di Visual Studio Code.

  1. Pilih Lihat>Pallet Perintah.
  2. Pilih Azure Functions: Buat Project Baru.
  3. Pilih folder, biasanya folder Anda saat ini.
  4. Di Pilih bahasa, pilih Handler Kustom.
  5. Di Pilih templat untuk fungsi pertama Anda, pilih HttpTrigger.
  6. Beri nama aplikasi, seperti halo.
  7. Pilih tingkat otorisasi anonim. Anda bisa mengubah nama nanti jika mau.

Sekarang Anda memiliki proyek yang terlihat seperti ini:

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

Membuat aplikasi

Serangkaian langkah berikutnya adalah untuk membuat aplikasi yang dapat merespons pemicu HTTP.

  1. Buat file bernama server.go di akar proyek.

  2. Berikan server.go konten berikut:

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

    Kode sebelumnya mengimpor semua pustaka yang Anda butuhkan untuk membangun aplikasi HTTP dan mencari variabel lingkungan.

  3. Tambahkan kode berikut setelah pernyataan cetak:

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

    Fungsi main() ini dipanggil dengan sendirinya. Baris pertama kode menyatakan bagaimana kode akan dibaca dari variabel lingkungan FUNCTIONS_CUSTOM_HANDLER_PORT:

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

    Selanjutnya, fungsi memeriksa apakah port tersebut ada. Jika tidak, fungsi ditetapkan ke port 8080:

    if !exists {
      customHandlerPort = "8080"
    }
    

    Kode berikutnya membuat instans server HTTP:

    mux := http.NewServeMux()
    

    Baris penting terakhir adalah baris yang mulai mendengarkan port tertentu dan memberi sinyal bahwa ia siap untuk menerima permintaan, dengan metode ListenAndServe():

    log.Fatal(http.ListenAndServe(":"+customHandlerPort, mux))
    
  4. Mari kita tambahkan kode yang tersisa. Pertama, lokalkan baris berikut dan nonaktifkan komentar:

    // mux.HandleFunc("/api/hello", helloHandler)
    
  5. Di antara pernyataan impor dan fungsi main(), tambahkan kode berikut:

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

    Fungsi helloHandler() mengatur jenis konten ke application/json. Ini akan merespons dengan "halo dunia" atau isi yang diposting, jika ada.

Menjalankan aplikasi

Anda sudah menyelesaikan penulisan kode pada titik ini, tetapi Anda perlu melakukan beberapa konfigurasi agar skenario ini berfungsi. Anda perlu menunjukkan di mana file yang dapat dieksekusi berada, sehingga host Fungsi dapat menemukannya. Anda juga perlu mengonfigurasi perutean dan menyatakan bahwa aplikasi ini menangani pemicu HTTP dan tidak ada jenis pengikatan lainnya.

  1. Dari terminal, jalankan go build server.go di akar proyek:

    go build server.go
    

    Langkah ini membuat file yang dapat dieksekusi yang disebut server di macOS dan Linux, atau server.exe pada OS Windows.

  2. Buka file host.json dan temukan elemen defaultExecutablePath di dalam file customHandler. Nyatakan ./server di macOS dan Linux, atau .\server.exe pada OS Windows.

  3. Di bawah elemen customHandler, tambahkan elemen enableForwardingHttpRequest dan berikan nilai true. Elemen customHandler Anda akan terlihat seperti ini:

    "customHandler": {
     "description": {
       "defaultExecutablePath": "./server",
       "workingDirectory": "",
       "arguments": []
     },
     "enableForwardingHttpRequest" : true
    }
    
  4. Dari terminal, jalankan func start di akar proyek. Dengan melakukan itu, aplikasi Functions Anda akan memulai.

    func start
    

    Di akhir output, Anda akan melihat output yang mirip dengan:

    Functions:
    
         hello: [GET,POST] http://localhost:7071/api/hello
    
  5. Di browser, pergi kehttp://localhost:7071/api/hello. Anda akan melihat output "halo dunia".

Selamat! Anda telah mengembangkan aplikasi tanpa server di Go.