簡単なメモ: JWT 認証に関する私の以前の投稿をチェックして、いくつかのレンダリングの問題に気づいた場合は、それらは現在修正されています。これらの例はそのチュートリアルの上に構築されているため、必ずもう一度見てください。 :)
さて、Go API が実行され、JWT 認証が追加され、PostgreSQL データベースにも接続されました。しかし、まだ終わっていません!今週は、ロギング と よりスマート、さらに開発者に優しいにしていきます。 >エラー処理.
改めてミドルウェアとは何ですか? ?今日は、次のようなミドルウェアを構築します。
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)) }) }ロギング ミドルウェアについてさらに詳しく知りたい方は、Go でのロギング ミドルウェアの作成に関する Matt Silverlock の素晴らしいガイドを参照することをお勧めします。彼は、認証、トレース、そしてもちろんログ記録など、さまざまなユースケースに合わせて再利用可能なミドルウェアを構築する方法を詳しく解説しています!
ステップ 2: エラー処理ミドルウェア ?
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) }) }
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)) }
go run main.go次に、エンドポイント (/books など) のいずれかにアクセスして、ターミナルを確認してください。次のようなログが表示されるはずです:
Started GET /books Completed in 1.2msエラーがある場合は、次のように表示されます。
Error occurred: some error detailsしかし、ユーザーにはクリーンな「500 Internal Server Error」メッセージのみが表示されます。 ?
ロギング は、バグを追跡し、API の動作を監視するのに役立ちます。何か問題が発生した場合、どのエンドポイントがヒットしたか、リクエストにかかった時間が正確にわかります。
エラー処理 は、予期せぬ事態が発生したときに API がクラッシュするのを防ぎます。代わりに、正常に回復し、クライアントにクリーンなエラー メッセージを送信します。
Go API を Docker 化します。これにより、アプリが移植可能になり、あらゆるマシンまたはクラウド サービスに展開できるようになります。コンテナマジックの準備をしましょう! ?
以上がロギングおよびエラー処理ミドルウェアを Go API に追加するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。