Aplikasi web

Selesai

Untuk menggunakan handler kustom, Anda perlu menulis aplikasi web. Setelah menulis aplikasi dan mengompilasinya, Anda perlu mengonfigurasi host Azure Functions sehingga tahu cara menggunakannya. Kita akan menjelajahi lebih lanjut tentang itu nanti. Pertama, bagaimana Anda membangun aplikasi web di Go?

Membangun REST API di Go

Untuk membangun REST API dengan menggunakan Go, Anda perlu mengetahui beberapa hal:

  • Mengimpor pustaka. Anda akan menggunakan perpustakaan fmt, log, dan net/http. Pustaka ini akan membantu Anda mengelola rute, menangani permintaan masuk, dan menangani pencatatan. Tambahkan pernyataan impor berikut:

    import (
       "fmt",
       "log",
       "net/http"
    )    
    
  • Menyiapkan perutean. REST API terdiri dari divisi logis yang disebut route. Rute adalah alamat yang merespons kekhawatiran tertentu di aplikasi. Untuk menyiapkan rute, panggil HandleFunc() metode pada http instance dan tentukan rute untuk menanggapi permintaan:

    http.HandleFunc("/", handleRoute)   
    

    Dalam hal ini, Anda perlu membuat handleRoute fungsi untuk mencocokkan permintaan yang masuk dengan rute "/".

  • Kelola permintaan. Anda perlu mengelola permintaan masuk dan membaca hal-hal seperti parameter perute atau kueri atau isi yang diposting. Maka Anda perlu membuat respons. Fungsi yang menangani permintaan dapat terlihat seperti ini:

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

    Kode mengirimkan teks "API REST pertama saya" kembali ke klien panggilan. Metode ini Fprintf() membutuhkan dua argumen: aliran respons dan string untuk dikirim kembali.

  • Membuat server. Untuk dapat mendengarkan permintaan, Anda perlu memulai server. Anda juga perlu menentukan bagian yang dapat dikirimi permintaan. Kode berikut menunjukkan cara membuat baris:

    http.ListenAndServe(":3000", nil)
    

    Server sekarang aktif dan dapat mendengarkan permintaan pada port 3000.

Membuat aplikasi Azure Functions

Sebelum mengembangkan aplikasi Azure Functions, kami sarankan Anda:

Membuat perancah aplikasi Functions dengan menggunakan Visual Studio Code

Setelah Anda menginstal semua dependensi yang diperlukan pada sistem Anda, langkah Anda selanjutnya adalah membuat perancah aplikasi. Saat Anda ditanya tentang runtime, pilih Custom Handler.

Sekarang Anda telah memastikan bahwa file yang benar akan dihasilkan. Saat Anda membuat proyek dengan cara ini, Anda perlu memilih jenis pemicu untuk fungsi pertama Anda. Handler kustom bekerja dengan semua pemicu dan pengikatan yang biasa.

Setelah selesai membuat proyek, Anda harus memiliki aplikasi dengan file berikut:

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

File function.json berada di direktori yang namanya sesuai dengan apa yang Anda beri nama fungsi pertama Anda. Anda akan menggunakan file ini untuk mengonfigurasi fungsi Anda.

Mengonfigurasi proyek

Agar aplikasi Anda berfungsi dengan primitif HTTP, Anda perlu mengonfigurasi beberapa hal:

  • Dengarkan port handler khusus. Aplikasi Anda perlu mendengarkan port tertentu. Variabel FUNCTIONS_CUSTOMHANDLER_PORT berisi nilai yang Anda butuhkan. Anda dapat mencari nilai port dengan menggunakan kode berikut:

    customHandlerPort, exists := os.LookupEnv("FUNCTIONS_CUSTOMHANDLER_PORT")
    
  • Konfigurasikan jalur default yang dapat dieksekusi. Karena Anda membangun file yang dapat dieksekusi, Anda perlu memberi tahu proyek aplikasi Functions tempat file tersebut berada.

    Temukan function.json di root proyek. Di customHandler bagian, tentukan defaultExecutablePath. Berikut adalah contoh tampilannya:

    "customHandler": {
       "defaultExecutablePath": "mygoapp.exe"
    }
    
  • Aktifkan penerusan permintaan. Saat Anda berhadapan dengan fungsi yang menggunakan pemicu HTTP, Anda ingin mengonfigurasi aplikasi sedikit berbeda daripada jika Anda berurusan dengan jenis pemicu lain (seperti pemicu antrean).

    Aktifkan properti yang disebut enableForwardingHttpRequest. Ketika properti ini diaktifkan, properti ini mengubah perilaku bagaimana permintaan ditangani dengan cara berikut:

    • Salinan permintaan asli. Permintaan HTTP tidak berisi handler kustom meminta payload. Sebaliknya, host Functions memanggil handler kustom melalui salinan permintaan HTTP asli.

    • Jalur yang sama dengan permintaan asli. Host Fungsi memanggil pawang dengan jalur yang sama seperti permintaan asli.

      Saat Anda menentukan rute dan handler rute, Anda harus spesifik tentang cara Anda menyiapkan perutean. Katakanlah Anda memiliki kerangka proyek berikut:

      hello/
        function.json   
      

      File dalam garis besar akan dipetakan ke rute /api/hello secara default. Dalam kode Anda untuk menyiapkan rute, Anda perlu menentukan rute lengkap:

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

      Jika Anda tidak mengaktifkan pengaturan ini, untuk jenis pemicu dan pengikatan lainnya, menentukan kode "/hello" perute seperti itu sudah cukup.

    • Salinan tanggapan pawang. Host Functions mengembalikan salinan respons HTTP handler sebagai respons terhadap permintaan asli.

Dalam contoh sebelumnya, file yang dapat dieksekusi adalah mygoapp.exe. Contoh mengasumsikan bahwa Anda membuat file yang dapat dieksekusi dari file bernama mygoapp.go, tetapi Anda dapat memberi nama file Go apa pun yang Anda inginkan. Di Linux atau macOS, file yang dapat dieksekusi tidak memiliki ekstensi.

Membangun aplikasi

Membangun aplikasi web saat ini tidak jauh berbeda dari membangun aplikasi web apa pun dengan menggunakan Go. Selama Anda telah melakukan konfigurasi yang dijelaskan di bagian sebelumnya, Anda sudah siap.

Sekarang Anda perlu mengambil langkah-langkah berikut:

  1. Baca port.
  2. Membuat instans server HTTP.
  3. Tentukan rute dan handler rute.
  4. Mulai mendengarkan di port.
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)