Golang melaksanakan perkhidmatan perkhidmatan web

王林
Lepaskan: 2023-05-14 22:41:06
asal
1634 orang telah melayarinya

Dengan populariti seni bina perkhidmatan mikro dan permintaan yang semakin meningkat untuk perkhidmatan Web, semakin ramai pembangun mula menggunakan Golang untuk melaksanakan perkhidmatan Web. Golang ialah bahasa ringan dengan kelajuan penyusunan pantas dan prestasi cemerlang, menjadikannya pilihan ideal untuk melaksanakan perkhidmatan web.

Dalam artikel ini, kita akan membincangkan cara menggunakan Golang untuk melaksanakan perkhidmatan web, termasuk memproses permintaan HTTP, memproses data JSON dan menggunakan pakej "net/http" terbina dalam Golang untuk melaksanakan pelayan web.

1. Sediakan persekitaran

Sebelum anda bermula, anda perlu memastikan bahawa anda telah memasang Golang dengan betul dan mengkonfigurasikan pembolehubah persekitaran yang sepadan. Jika anda seorang pemula, sila muat turun dan pasang Golang (https://golang.org/dl/) di tapak web rasmi terlebih dahulu, dan pastikan direktori di mana ia berada telah ditambahkan pada pembolehubah persekitaran PATH.

Kami perlu menggunakan perpustakaan pihak ketiga - "gorilla/mux" untuk mengendalikan permintaan HTTP. Pustaka ini boleh membantu kami menyelesaikan beberapa masalah penghalaan yang rumit.

boleh dipasang menggunakan arahan berikut:

go get -u github.com/gorilla/mux
Salin selepas log masuk

2. Laksanakan Perkhidmatan Web

Di bawah ini kami akan menggunakan Golang dan gorila/mux untuk melaksanakan perkhidmatan Web mudah, yang akan Menyediakan fungsi berikut:

  • memproses permintaan GET dan mengembalikan halaman HTML;
  • Pertama, kita perlu memulakan pelayan HTTP. Di Golang, anda boleh menggunakan pakej "net/http" untuk melaksanakan pelayan HTTP. Pakej ini menyediakan struktur yang dipanggil "Pelayan", yang mempunyai dua ahli penting - Pengendali dan Addr.
  • Pengendali digunakan untuk mengendalikan permintaan HTTP Kami boleh menyesuaikan Pengendali dan mengikatnya pada pelayan. Di sini kita akan menggunakan gorila/mux untuk menentukan pengendali laluan dan mengikatnya ke pelayan HTTP.
package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
    "github.com/gorilla/mux"
)

func main() {
    // 定义路由处理程序
    r := mux.NewRouter()

    // 定义处理GET请求的路由
    r.HandleFunc("/", homePage).Methods("GET")
    r.HandleFunc("/users", getAllUsers).Methods("GET")
    r.HandleFunc("/user/{id}", getUserByID).Methods("GET")

    // 定义处理POST请求的路由
    r.HandleFunc("/user", createUser).Methods("POST")

    // 绑定路由处理程序到HTTP服务器
    log.Fatal(http.ListenAndServe(":8080", r))
}
Salin selepas log masuk

Melalui kod di atas, kami telah menentukan empat pengendali penghalaan, yang merangkumi tiga kaedah GET dan satu kaedah POST, masing-masing sepadan dengan pemerolehan data dan penambahan data.

Seterusnya, kita perlu melaksanakan kaedah ini.

Kendalikan permintaan GET dan kembalikan halaman HTML

func homePage(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome to the HomePage!")
    fmt.Println("Endpoint Hit: homePage")
}
Salin selepas log masuk
    Ini adalah kaedah yang sangat mudah, ia hanya memaparkan rentetan pada penyemak imbas.
Kendalikan permintaan GET, kembalikan data JSON

    Dalam contoh ini, kami mencipta rentetan JSON berkod keras yang mengandungi butiran pengguna dan menghantarnya dalam respons HTTP Kembalikan rentetan JSON ini .
  1. type User struct {
        ID        string `json:"id"`
        FirstName string `json:"firstname"`
        LastName  string `json:"lastname"`
        Email     string `json:"email"`
        Phone     string `json:"phone"`
    }
    
    var users []User
    
    func getAllUsers(w http.ResponseWriter, r *http.Request) {
        users := []User{
            User{ID: "1", FirstName: "Mike", LastName: "Smith", Email: "mike@example.com", Phone: "1234567890"},
            User{ID: "2", FirstName: "John", LastName: "Doe", Email: "john@example.com", Phone: "0987654321"},
        }
        json.NewEncoder(w).Encode(users)
    }
    Salin selepas log masuk
  2. Kaedah ini akan menulis data JSON ke dalam Badan respons HTTP dan secara automatik menetapkan Content-Type kepada application/json.

Proses permintaan GET dan dapatkan maklumat pengguna berdasarkan ID

    Apabila pengguna menghantar permintaan GET, kami perlu mencari maklumat pengguna dalam pangkalan data dengan ID dan kembalikan maklumat tersebut.
  1. func getUserByID(w http.ResponseWriter, r *http.Request) {
        vars := mux.Vars(r)
        id := vars["id"]
        for _, user := range users {
            if user.ID == id {
                json.NewEncoder(w).Encode(user)
                return
            }
        }
        json.NewEncoder(w).Encode(&User{})
    }
    Salin selepas log masuk
  2. Dalam kaedah ini, kami mula-mula mendapatkan ID daripada permintaan menggunakan fungsi mux.Vars. Kami kemudian melelang melalui senarai pengguna, mencari pengguna yang sepadan dengan ID dan menulisnya ke dalam Badan respons HTTP. Jika tiada pengguna yang sepadan ditemui, kami akan mengembalikan pengguna kosong.

Kendalikan permintaan POST, terima data JSON

    Akhir sekali, kami perlu melaksanakan kaedah yang akan menerima permintaan POST dan menghuraikan data JSON daripada Badan permintaan, dan kemudian Pengguna ditambah ke senarai pengguna.
  1. func createUser(w http.ResponseWriter, r *http.Request) {
        var user User
        _ = json.NewDecoder(r.Body).Decode(&user)
        user.ID = strconv.Itoa(rand.Intn(1000000)) // 随机生成一个ID
        users = append(users, user)
        json.NewEncoder(w).Encode(user)
    }
    Salin selepas log masuk
    Dalam kaedah ini, kami mula-mula menggunakan fungsi json.NewDecoder untuk menghuraikan data JSON yang diluluskan dalam Badan permintaan dan menyimpannya kepada pembolehubah bernama pengguna. Kami kemudian menjana ID rawak dan menambahkan pengguna itu ke senarai pengguna.

    3. Test Web Service

    Kami kini telah melaksanakan perkhidmatan web ringkas yang boleh mengendalikan permintaan GET dan POST serta mengembalikan data JSON dan HTML. Seterusnya, kami perlu menguji perkhidmatan web ini untuk memastikan ia boleh bertindak balas kepada permintaan HTTP dengan betul.

    Anda boleh menggunakan Posmen untuk menguji perkhidmatan web ini, atau terus masukkan alamat dalam penyemak imbas untuk menguji.

    GET permintaan

      Hantar permintaan GET /users dan semak dua pengguna yang kami tambahkan dalam respons:
    GET request

      Hantar GET /user/1 permintaan dan semak butiran Mike dalam jawapan:
    POST request

      Hantar POST /user Request untuk menambah pengguna baharu, dan semak dalam respons sama ada maklumat pengguna baharu telah ditambah dengan betul:
    1. 4. Ringkasan

    Dalam artikel ini, kami bercakap tentang cara menggunakan Golang dan gorila /mux untuk melaksanakan perkhidmatan web yang ringkas, termasuk memproses permintaan GET dan POST, dan mengembalikan data JSON dan HTML. Walaupun contoh ini mungkin agak ringkas, ia menyediakan titik permulaan yang baik untuk menerokai kekuatan Golang dan mendapatkan pemahaman yang lebih mendalam dalam amalan.

    Akhir sekali, kami mengesyorkan agar anda meneruskan pembelajaran secara mendalam selepas membiasakan diri dengan konsep asas Golang dan perkhidmatan web. Meneroka ciri yang lebih maju seperti goroutin, saluran, teknik penghalaan lanjutan, pengesahan dan keselamatan serta menggunakan pangkalan data untuk menyimpan dan mendapatkan data adalah semua konsep penting yang anda perlu kuasai. Saya harap artikel ini memberikan titik permulaan yang berguna untuk pembelajaran anda!

    Atas ialah kandungan terperinci Golang melaksanakan perkhidmatan perkhidmatan web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan