Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menambahkan Pembalakan dan Ralat Mengendalikan Middleware pada API Go Anda

Menambahkan Pembalakan dan Ralat Mengendalikan Middleware pada API Go Anda

Patricia Arquette
Patricia Arquetteasal
2024-10-05 14:07:02432semak imbas

Adding Logging and Error Handling Middleware to Your Go API

Nota Pantas: Jika anda menyemak siaran saya sebelum ini pada pengesahan JWT dan mendapati beberapa isu pemaparan, isu tersebut kini telah dibetulkan! Pastikan anda melihatnya sekali lagi kerana contoh ini dibina di atas tutorial itu. :)

Baiklah, kami telah menjalankan API Go kami, kami telah menambahkan pengesahan JWT, dan kami juga telah menyambungkannya ke pangkalan data PostgreSQL. Tetapi kami belum selesai! Minggu ini, kami akan meningkatkan keadaan dan menjadikan API kami lebih pintar dan lebih banyak lagi mesra pembangun dengan menambahkan perisian tengah tersuai untuk log dan ralat pengendalian.

Apakah Middleware Lagi? ?

Perisian tengah adalah seperti bouncer di kelab kegemaran anda—ia memintas permintaan sebelum ia mencapai titik akhir API anda. Anda boleh mempunyai perisian tengah yang menyemak pengesahan (seperti yang kami lakukan dengan JWT), log maklumat atau mengendalikan ralat apabila berlaku masalah.

Hari ini, kami akan membina perisian tengah yang:

  • Log: Setiap permintaan masuk, jadi kami tahu siapa yang mengetuk pintu API kami.
  • Mengendalikan Ralat: Dengan anggun, jadi pengguna anda tidak melihat 500 ralat yang hodoh itu.

Mari kita mendalaminya!


Langkah 1: Mencipta Perisian Tengah Pembalakan ?

Pengelogan ialah kawan baik anda dalam hal menyahpepijat dan memahami perkara yang berlaku dalam API anda. Kami akan mencipta perisian tengah yang merekodkan setiap permintaan yang datang melalui—kaedah, URL dan masa yang diambil.


func loggingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        start := time.Now()

        // Log the method and the requested URL
        log.Printf("Started %s %s", r.Method, r.URL.Path)

        // Call the next handler in the chain
        next.ServeHTTP(w, r)

        // Log how long it took
        log.Printf("Completed in %v", time.Since(start))
    })
}


Bagi mereka yang berminat untuk mendalami perisian tengah pengelogan, saya syorkan menyemak panduan hebat Matt Silverlock tentang menulis perisian tengah pengelogan dalam Go. Dia membahagikan cara menstruktur perisian tengah boleh guna semula untuk pelbagai kes penggunaan seperti pengesahan, pengesanan dan sudah tentu, pengelogan!

Langkah 2: Ralat Mengendalikan Middleware ?

Mari kita bercakap tentang kesilapan. Kesilapan berlaku, bukan? Tetapi daripada membiarkannya menyebabkan ranap atau menghantar mesej ralat yang samar-samar, mari kita atasinya dengan baik.


func errorHandlingMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        defer func() {
            if err := recover(); err != nil {
                // Log the error and send a user-friendly message
                log.Printf("Error occurred: %v", err)
                http.Error(w, "Internal Server Error", http.StatusInternalServerError)
            }
        }()
        next.ServeHTTP(w, r)
    })
}



Langkah 3: Mengintegrasikan Middleware dalam API Anda?

Sekarang kami telah membina perisian tengah pengelogan dan pengendalian ralat kami, mari sambungkannya ke API kami. Kami akan menerapkannya secara global supaya setiap permintaan dilog dan ralat ditangkap.


func main() {
    db = connectDB()
    defer db.Close()

    r := mux.NewRouter()

    // Apply middleware globally
    r.Use(loggingMiddleware)
    r.Use(errorHandlingMiddleware)

    r.HandleFunc("/login", login).Methods("POST")
    r.Handle("/books", authenticate(http.HandlerFunc(getBooks))).Methods("GET")
    r.Handle("/books", authenticate(http.HandlerFunc(createBook))).Methods("POST")

    fmt.Println("Server started on port :8000")
    log.Fatal(http.ListenAndServe(":8000", r))
}



Langkah 4: Mengujinya?

Untuk memastikan semuanya berfungsi, mulakan API anda:


go run main.go


Sekarang, cuba tekan mana-mana titik akhir anda (seperti /books) dan semak terminal anda. Anda sepatutnya melihat log seperti:


Started GET /books
Completed in 1.2ms


Dan jika terdapat ralat, anda akan melihat:


Error occurred: some error details


Tetapi pengguna anda hanya akan melihat mesej "500 Ralat Pelayan Dalaman" yang bersih. ?


Mengapa Ini Penting?

  1. Pengelogan membantu anda menjejaki pepijat dan memantau gelagat API anda. Jika berlaku masalah, anda akan tahu dengan tepat titik akhir yang mana telah dipukul dan berapa lama permintaan itu diambil.

  2. Pengendalian Ralat menghalang API anda daripada ranap apabila sesuatu yang tidak dijangka berlaku. Sebaliknya, ia pulih dengan anggun dan menghantar mesej ralat bersih kepada pelanggan.


Apa Seterusnya?

Lain kali, kami akan membawa perkara ke tahap yang seterusnya dan merapatkan API Go kami! Ini akan menjadikan apl anda mudah alih dan sedia untuk digunakan pada mana-mana mesin atau perkhidmatan awan. Bersedia untuk beberapa keajaiban bekas! ?

Atas ialah kandungan terperinci Menambahkan Pembalakan dan Ralat Mengendalikan Middleware pada API Go Anda. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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 sebelumnya:Cara Membuat Pakej dalam GoArtikel seterusnya:Cara Membuat Pakej dalam Go