ما هي مكتبة chi ولماذا تحتاجها؟
chi هي مكتبة خفيفة وعالية الأداء لتوجيه طلبات HTTP في لغة البرمجة Go. صُممت لتطوير تطبيقات الويب وواجهات API، وتوفر للمطورين أداة قوية ومرنة لتوجيه طلبات HTTP.
على عكس الحزمة القياسية net/http، تقدم chi المزايا التالية:
- التوافق مع
net/http: تطبق chi واجهةhttp.Handlerبالكامل، مما يسهل دمجها مع كود Go الحالي والوسائط (middleware). - التوجيه السياقي: تستخدم chi
context.Contextلتمرير معاملات المسار (مثل معرف المستخدم) بين الوسائط والمعالجات. - المسارات المتداخلة (Subrouters): تتيح تجميع المسارات في كتل منطقية (مثل
/api/v1/users). - تجميع الوسائط (Middleware): يمكن تطبيق الوسائط على الموجه بأكمله أو على مجموعات مسارات محددة.
- دعم مدمج لـ CORS، التسجيل، الضغط، وغيرها من المهام الشائعة.
تعتبر chi مثالية لبناء REST APIs، الخدمات المصغرة، وأي تطبيق ويب يتطلب بنية نظيفة وفعالة وسهلة الاختبار.
تثبيت مكتبة chi
لتثبيت chi، استخدم مدير الحزم القياسي في Go. تأكد من تثبيت Go (الإصدار 1.14 أو أحدث).
go get -u github.com/go-chi/chi/v5
بعد تنفيذ هذا الأمر، ستتم إضافة المكتبة إلى ملف go.mod الخاص بك. إذا كنت تستخدم Go Modules (موصى به)، سيكون الاستيراد كالتالي:
import "github.com/go-chi/chi/v5"
غالبًا ما يتم تثبيت حزمة الوسائط أيضًا:
go get -u github.com/go-chi/cors
go get -u github.com/go-chi/chi/v5/middleware
بداية سريعة مع مثال برمجي
لنقم بإنشاء خادم HTTP بسيط يستجيب لطلبات GET.
package main
import (
"fmt"
"net/http"
"github.com/go-chi/chi/v5"
)
func main() {
r := chi.NewRouter()
// تعريف المسار
r.Get("/hello", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "مرحبًا من chi!")
})
// تشغيل الخادم
http.ListenAndServe(":3000", r)
}
قم بتشغيل هذا الكود وافتح المتصفح على الرابط http://localhost:3000/hello. سترى الرسالة "مرحبًا من chi!".
الدوال الأساسية في مكتبة chi
دعنا نستعرض الدوال الرئيسية في مكتبة chi. جميع الأمثلة تفترض أنك قمت بإنشاء الموجه r := chi.NewRouter().
1. Get(pattern string, handlerFn http.HandlerFunc)
الوظيفة: تسجيل معالج لطريقة HTTP GET وفقًا لنمط المسار المحدد.
المعاملات:
pattern— سلسلة نصية للمسار (مثل/users،/users/{id}).handlerFn— دالة المعالج التي تطابق التوقيعhttp.HandlerFunc.
مثال:
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("الصفحة الرئيسية"))
})
2. Post(pattern string, handlerFn http.HandlerFunc)
الوظيفة: تسجيل معالج لطريقة HTTP POST.
المعاملات: مشابهة لـ Get.
مثال:
r.Post("/users", func(w http.ResponseWriter, r *http.Request) {
// منطق إنشاء مستخدم جديد
w.WriteHeader(http.StatusCreated)
w.Write([]byte("تم إنشاء المستخدم"))
})
3. Put(pattern string, handlerFn http.HandlerFunc)
الوظيفة: تسجيل معالج لطريقة HTTP PUT (تُستخدم عادةً للتحديث الكامل