"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > إضافة البرامج الوسيطة الخاصة بالتسجيل ومعالجة الأخطاء إلى واجهة برمجة تطبيقات Go الخاصة بك

إضافة البرامج الوسيطة الخاصة بالتسجيل ومعالجة الأخطاء إلى واجهة برمجة تطبيقات Go الخاصة بك

تم النشر بتاريخ 2024-11-08
تصفح:631

Adding Logging and Error Handling Middleware to Your Go API

ملاحظة سريعة: إذا قمت بمراجعة مشاركتي السابقة حول مصادقة JWT ولاحظت بعض مشكلات العرض، فقد تم إصلاحها الآن! تأكد من إعطائها نظرة أخرى لأن هذه الأمثلة مبنية على هذا البرنامج التعليمي. :)

حسنًا يا رفاق، لقد قمنا بتشغيل Go API الخاص بنا، وأضفنا مصادقة JWT، وقمنا أيضًا بتوصيلها بقاعدة بيانات PostgreSQL. لكننا لم ننته بعد! هذا الأسبوع، سنرفع مستوى الأمور ونجعل واجهة برمجة التطبيقات أكثر ذكاءً وأكثر صديقة للمطورين من خلال إضافة برامج وسيطة مخصصة لـ التسجيل و معالجة الأخطاء.

ما هي البرامج الوسيطة مرة أخرى؟ ؟

البرامج الوسيطة تشبه الحارس في ناديك المفضل، فهي تعترض الطلبات قبل أن تصل إلى نقاط نهاية واجهة برمجة التطبيقات لديك. يمكن أن يكون لديك برنامج وسيط يتحقق من المصادقة (كما فعلنا مع JWT)، أو يسجل المعلومات، أو يعالج الأخطاء عندما تسوء الأمور.

اليوم، سنقوم ببناء برامج وسيطة:

  • السجلات: كل طلب وارد، حتى نعرف من يطرق باب واجهة برمجة التطبيقات لدينا.
  • يعالج الأخطاء: بطريقة رائعة، حتى لا يرى المستخدمون تلك الأخطاء الـ 500 القبيحة.

دعونا نتعمق في الأمر!


الخطوة 1: إنشاء وسيطة للتسجيل؟

التسجيل هو أفضل صديق لك عندما يتعلق الأمر بتصحيح الأخطاء وفهم ما يحدث في واجهة برمجة التطبيقات الخاصة بك. سنقوم بإنشاء برنامج وسيط يسجل كل طلب يأتي من خلال الطريقة وعنوان URL والوقت المستغرق.


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))
    })
}


بالنسبة لأولئك المهتمين بالتعمق أكثر في البرامج الوسيطة للتسجيل، أوصي بمراجعة دليل Matt Silverlock الرائع حول كتابة البرامج الوسيطة للتسجيل في Go. وهو يشرح كيفية هيكلة البرامج الوسيطة القابلة لإعادة الاستخدام لحالات الاستخدام المختلفة مثل المصادقة والتتبع وبالطبع التسجيل!

الخطوة 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)
    })
}



الخطوة 3: دمج البرامج الوسيطة في واجهة برمجة التطبيقات الخاصة بك؟

الآن بعد أن قمنا ببناء برمجياتنا الوسيطة للتسجيل ومعالجة الأخطاء، فلنربطها بواجهة برمجة التطبيقات (API) الخاصة بنا. وسنطبقها عالميًا حتى يتم تسجيل كل طلب ورصد الأخطاء.


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))
}



الخطوة 4: اختباره؟

للتأكد من أن كل شيء يعمل، قم بتشغيل واجهة برمجة التطبيقات الخاصة بك:


go run main.go


الآن، حاول الضغط على أي من نقاط النهاية الخاصة بك (مثل /books) وتحقق من جهازك. يجب أن تشاهد سجلات مثل:


Started GET /books
Completed in 1.2ms


وإذا كان هناك خطأ، فسترى:


Error occurred: some error details


لكن المستخدم الخاص بك لن يرى سوى رسالة نظيفة "500 خطأ داخلي في الخادم". ?


لماذا هذا مهم؟

  1. يساعدك التسجيل على تعقب الأخطاء ومراقبة سلوك واجهة برمجة التطبيقات (API) الخاصة بك. إذا حدث خطأ ما، فستعرف بالضبط نقطة النهاية التي تم الوصول إليها والمدة التي استغرقها الطلب.

  2. معالجة الأخطاء تمنع واجهة برمجة التطبيقات الخاصة بك من التعطل عند حدوث شيء غير متوقع. وبدلاً من ذلك، فإنه يتعافى بأمان ويرسل رسالة خطأ واضحة إلى العميل.


ما هي الخطوة التالية؟

في المرة القادمة، سننتقل بالأشياء إلى المستوى التالي و نربط واجهة برمجة تطبيقات Go الخاصة بنا! سيؤدي ذلك إلى جعل تطبيقك محمولاً وجاهزًا للنشر على أي جهاز أو خدمة سحابية. استعد لبعض سحر الحاوية! ?

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/neelp03/adding-logging-and-error-handling-middleware-to-your-go-api-2f33?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3