Cara Menulis API Seperti Pro dalam Go dengan GopherLight

Linda Hamilton
Lepaskan: 2024-10-30 16:56:03
asal
972 orang telah melayarinya

How to Write APIs Like a Pro in Go with GopherLight

Dokumen

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
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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")
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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!

DAPATKAN

  • Penggunaan: app.Get(path, handler)

Mengambil semula data tanpa mengubah suai apa-apa.
Contoh: Mengambil senarai item atau membaca butiran pengguna.

POS

  • Penggunaan: app.Post(laluan, pengendali)

Menghantar data untuk mencipta sumber baharu.
Contoh: Menyerahkan borang atau menambah item baharu pada senarai.

LETAK

Penggunaan: app.Put(laluan, pengendali)

Mengemas kini atau menggantikan sumber. Ini tindakan "tulis ganti".
Contoh: Mengemas kini profil pengguna penuh.

PADAM

Penggunaan: app.Delete(laluan, pengendali)

Memadamkan sumber.
Contoh: Mengalih keluar pengguna atau memadamkan siaran.

PATCH

Penggunaan: app.Patch(laluan, pengendali)

Mengemas kini sebahagian sumber tanpa menggantikan segala-galanya.
Contoh: Mengemas kini hanya e-mel pada profil pengguna.

PILIHAN

Penggunaan: app.Options(laluan, pengendali)

Mengembalikan kaedah HTTP yang dibenarkan untuk URL, terutamanya untuk permintaan prapenerbangan CORS.

KEPALA

Penggunaan: app.Head(laluan, pengendali)

Suka GET, tetapi tiada badan tindak balas. Gunakannya untuk menyemak sama ada sumber wujud.

HUBUNGKAN dan JEJAK

Penggunaan: app.Connect(laluan, pengendali), app.Trace(laluan, pengendali)

Kaedah lanjutan: CONNECT menyediakan terowong (untuk SSL) dan TRACE adalah untuk nyahpepijat, menggemakan semula permintaan.

Bekerja dengan req.Request dan req.Respons

Memandangkan anda telah melihat laluannya, mari kita bincangkan tentang objek Permintaan dan Respons, pembantu utama anda untuk mengendalikan permintaan masuk dan menghantar respons.

Permintaan

Setiap pengendali permintaan mendapat objek Permintaan yang dimuatkan dengan maklumat mengenai permintaan masuk. Inilah perkara yang boleh anda lakukan dengannya:

  • Parameter Pertanyaan: Dapatkan parameter pertanyaan dengan .QueryParam("kunci").
  • Pengepala: Akses pengepala menggunakan .Header("kunci").
  • Body as String: Dapatkan badan permintaan dengan .BodyAsString().

Contoh:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Respon

Objek Respons membantu anda menghantar balasan kembali kepada pelanggan. Inilah perkara yang boleh anda lakukan:

  • Hantar Teks: .Hantar(rentetan data) menulis kembali teks biasa.
  • Tetapkan Status: .Status(kod) menetapkan status HTTP.
  • Hantar JSON: .JSON(data) menyerikan objek Go kepada JSON dan menghantarnya.
  • Kendalikan Ralat: .JSONError(message) menghantar respons ralat berformat JSON.

Contoh:

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")
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Middlewares

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. ?

Perisian Tengah Pengesahan (JWT)

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:

  • SecretKey: Kunci rahsia untuk menandatangani JWT.
  • Kaedah Tandatangan: Algoritma tandatangan JWT.
  • ErrorHandler: Pengendali ralat tersuai untuk mengendalikan ralat pengesahan (pilihan).
  • TokenExtractor: Mengeluarkan token daripada pengepala permintaan (pilihan).

Contoh

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
Salin selepas log masuk
Salin selepas log masuk

CORS Middleware

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

  • AllowOrigin: Tetapkan kepada "*" untuk membenarkan mana-mana asal atau menentukan domain (cth., "http://example.com").
  • AllowMethods: Kaedah HTTP yang manakah dibenarkan? Pilihan biasa termasuk "DAPATKAN", "POST", dll.
  • AllowHeaders: Tentukan pengepala yang boleh digunakan oleh pelanggan.
  • AllowCredentials: Tetapkan kepada benar jika anda mahu kuki atau pengesahan HTTP disertakan.
  • ExposeHeaders: Biarkan pelanggan membaca tajuk tertentu daripada respons.
  • MaxAge: Masa cache (dalam saat) untuk permintaan prapenerbangan.

Contoh

app.Get("/user", func(r *req.Request, w *req.Response) {
    user := map[string]string{"name": "Gopher", "language": "Go"}
    w.JSON(user)
})
Salin selepas log masuk
Salin selepas log masuk

Perisian Tengah CSRF

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.

Contoh

import (
    "github.com/BrunoCiccarino/GopherLight/middleware"
)

config := middleware.JWTConfig{
    SecretKey: []byte("your_secret_key"),
}
app.Use(middleware.NewAuthMiddleware(config))
Salin selepas log masuk
Salin selepas log masuk

Dan jangan lupa menjana token dengan:

go get github.com/BrunoCiccarino/GopherLight/router
go get github.com/BrunoCiccarino/GopherLight/req
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Pembalakan Middleware

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.

Contoh

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")
}
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Setiap permintaan akan dilog seperti ini:

  • Bermula: Mencatat masa mula permintaan.
  • Selesai: Log apabila permintaan selesai, termasuk tempohnya.

Timeout Middleware

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.

Contoh

app.Get("/greet", func(r *req.Request, w *req.Response) {
    name := r.QueryParam("name")
    if name == "" {
        name = "stranger"
    }
    w.Send("Hello, " + name + "!")
})
Salin selepas log masuk
Salin selepas log masuk

Antara Muka Pemalam

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)
})
Salin selepas log masuk
Salin selepas log masuk

Kaedah Daftar menerima fungsi laluan yang membolehkan anda menentukan laluan baharu dalam pemalam anda dengan menyatakan:

  • kaedah: Kaedah HTTP (cth., "GET", "POST", dll.)
  • laluan: Laluan laluan (cth., "/my-plugin-route")
  • pengendali: Fungsi untuk melaksanakan apabila laluan dilanggar. Fungsi ini menerima:
    • req: Objek permintaan dengan akses kepada parameter pertanyaan, pengepala dan kandungan.
    • res: Objek tindak balas untuk menghantar data kembali kepada pelanggan.

Contoh Plugin

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))
Salin selepas log masuk
Salin selepas log masuk

Menambahkan Pemalam pada Apl Anda

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))
Salin selepas log masuk

Menyesuaikan Pemalam Anda

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!

sumber:dev.to
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!