Rumah > Artikel > pembangunan bahagian belakang > Menambahkan Pembalakan dan Ralat Mengendalikan Middleware pada API Go Anda
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.
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:
Mari kita mendalaminya!
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!
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) }) }
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)) }
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. ?
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.
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.
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!