Rumah > Artikel > pembangunan bahagian belakang > Cara Menulis API Seperti Pro dalam Go dengan GopherLight
GopherLIight
Hai semua, pertama sekali saya ingin mengucapkan terima kasih kerana memilih untuk menggunakan projek kami. Walaupun dia kecil, kami melakukannya dengan penuh semangat! Untuk mula menggunakannya, anda perlu memasangnya terlebih dahulu, anggap anda sudah memilikinya. Kemudian pasang modul utama rangka kerja, iaitu req dan penghala
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Sudah dimuat turun? Fuh! Kini kita boleh membuat dunia helo pertama kita.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Agak mudah, bukan? Dan banyak lagi yang boleh kita lakukan dengan GopherLight. Teruskan membaca untuk butiran penuh kaedah HTTP dan alatan Permintaan dan Respons kami.
Kaedah HTTP Disokong
Berikut ialah senarai kaedah HTTP yang boleh anda gunakan dengan router.App. Setiap satu daripada ini membolehkan anda menyediakan laluan untuk mengendalikan pelbagai jenis permintaan. Mari selami!
Mengambil semula data tanpa mengubah suai apa-apa.
Contoh: Mengambil senarai item atau membaca butiran pengguna.
Menghantar data untuk mencipta sumber baharu.
Contoh: Menyerahkan borang atau menambah item baharu pada senarai.
Penggunaan: app.Put(laluan, pengendali)
Mengemas kini atau menggantikan sumber. Ini tindakan "tulis ganti".
Contoh: Mengemas kini profil pengguna penuh.
Penggunaan: app.Delete(laluan, pengendali)
Memadamkan sumber.
Contoh: Mengalih keluar pengguna atau memadamkan siaran.
Penggunaan: app.Patch(laluan, pengendali)
Mengemas kini sebahagian sumber tanpa menggantikan segala-galanya.
Contoh: Mengemas kini hanya e-mel pada profil pengguna.
Penggunaan: app.Options(laluan, pengendali)
Mengembalikan kaedah HTTP yang dibenarkan untuk URL, terutamanya untuk permintaan prapenerbangan CORS.
Penggunaan: app.Head(laluan, pengendali)
Suka GET, tetapi tiada badan tindak balas. Gunakannya untuk menyemak sama ada sumber wujud.
Penggunaan: app.Connect(laluan, pengendali), app.Trace(laluan, pengendali)
Kaedah lanjutan: CONNECT menyediakan terowong (untuk SSL) dan TRACE adalah untuk nyahpepijat, menggemakan semula permintaan.
Memandangkan anda telah melihat laluannya, mari kita bincangkan tentang objek Permintaan dan Respons, pembantu utama anda untuk mengendalikan permintaan masuk dan menghantar respons.
Setiap pengendali permintaan mendapat objek Permintaan yang dimuatkan dengan maklumat mengenai permintaan masuk. Inilah perkara yang boleh anda lakukan dengannya:
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Objek Respons membantu anda menghantar balasan kembali kepada pelanggan. Inilah perkara yang boleh anda lakukan:
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Kami telah menyediakan sekumpulan perisian tengah untuk anda menambahkan beberapa fungsi yang serius pada apl web Go anda. Setiap perisian tengah ini membawa keajaiban tersendiri—keselamatan, pengelogan, tamat masa dan banyak lagi! Mari kita pecahkan satu demi satu. ?
AuthMiddleware kami membantu melindungi laluan anda dengan JSON Web Token (JWT). Ia fleksibel, membolehkan anda menyesuaikan kunci rahsia, pengendalian ralat dan kaedah pengekstrakan token.
Persediaan
Untuk bermula, konfigurasikan tetapan JWT anda menggunakan JWTConfig:
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " + name + "!") })
Perlu membenarkan permintaan silang asal? Tiada masalah! CORSMiddleware kami mengkonfigurasikan tetapan Perkongsian Sumber Silang Asal (CORS) untuk menjadikan API anda boleh diakses daripada domain lain.
Pilihan Konfig
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
CSRFMiddleware kami melindungi daripada Pemalsuan Permintaan Merentas Tapak dengan mengesahkan token CSRF yang dihantar dengan setiap permintaan. Gunakan GenerateCSRFToken() untuk mencipta token selamat, kemudian sahkannya dengan fungsi isValidToken anda sendiri.
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Dan jangan lupa menjana token dengan:
go get github.com/BrunoCiccarino/GopherLight/router go get github.com/BrunoCiccarino/GopherLight/req
Ingin menjejaki apa yang berlaku pada pelayan anda? LoggingMiddleware merekodkan setiap permintaan, termasuk kaedah, laluan dan masa yang diambil. Ini adalah cara yang bagus untuk terus mendapat maklumat tentang prestasi apl dan sebarang aktiviti luar biasa.
package main import ( "fmt" "github.com/BrunoCiccarino/GopherLight/router" "github.com/BrunoCiccarino/GopherLight/req" ) func main() { app := router.NewApp() // Define a route that responds to a GET request at "/hello". app.Get("/hello", func(r *req.Request, w *req.Response) { w.Send("Hello, World!") }) fmt.Println("Server listening on port 3333") app.Listen(":3333") }
Setiap permintaan akan dilog seperti ini:
Elakkan penantian yang tidak berkesudahan itu dengan menetapkan had masa pada pemprosesan permintaan dengan TimeoutMiddleware. Perisian tengah ini akan membatalkan permintaan jika ia tidak selesai dalam masa, menghantar status 504 Gateway Timeout kepada pelanggan.
app.Get("/greet", func(r *req.Request, w *req.Response) { name := r.QueryParam("name") if name == "" { name = "stranger" } w.Send("Hello, " + name + "!") })
Antara muka Pemalam adalah sangat mudah tetapi sangat berkuasa. Ia memberi anda satu kaedah: Daftar. Ini membolehkan anda menyambung ke sistem penghalaan apl untuk menambah sebarang laluan yang anda perlukan—sama ada titik akhir API baharu, webhook atau apa-apa sahaja yang anda boleh bayangkan.
Kaedah Daftar
Inilah bahagian ajaib antara muka Pemalam:
app.Get("/user", func(r *req.Request, w *req.Response) { user := map[string]string{"name": "Gopher", "language": "Go"} w.JSON(user) })
Kaedah Daftar menerima fungsi laluan yang membolehkan anda menentukan laluan baharu dalam pemalam anda dengan menyatakan:
Katakan anda ingin mencipta pemalam yang menambahkan titik tamat ringkas di /hello-plugin untuk menyambut pengguna. Begini rupa pemalam itu:
import ( "github.com/BrunoCiccarino/GopherLight/middleware" ) config := middleware.JWTConfig{ SecretKey: []byte("your_secret_key"), } app.Use(middleware.NewAuthMiddleware(config))
Untuk memuatkan pemalam, cuma buat contoh dan panggil Daftar dalam persediaan apl utama anda:
corsOptions := middleware.CORSOptions{ AllowOrigin: "*", AllowMethods: []string{"GET", "POST"}, } app.Use(middleware.CORSMiddleware(corsOptions))
Setiap pemalam boleh menambah seberapa banyak laluan yang diperlukan. Hanya panggil laluan beberapa kali dalam fungsi Daftar anda untuk menentukan titik akhir tambahan. Gunakan kaedah, laluan dan pengendali HTTP yang berbeza untuk membentuk kefungsian pemalam anda mengikut kehendak anda.
Atas ialah kandungan terperinci Cara Menulis API Seperti Pro dalam Go dengan GopherLight. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!