ربط الطلبات والتحقق من صحتها
ShouldBindJSON ووسوم binding وvalidator
ربط الطلبات والتحقق من صحتها درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ربط جسم الطلب
يمكن لـ Gin ربط JSON وXML وبيانات النماذج وسلاسل الاستعلام بهياكل Go باستخدام وسم البنية binding ودوال c.ShouldBind*:
type CreateUserRequest struct {
Name string `json:"name" binding:"required"`
Email string `json:"email" binding:"required,email"`
Age int `json:"age" binding:"gte=0,lte=150"`
}
func createUser(c *gin.Context) {
var req CreateUserRequest
if err := c.ShouldBindJSON(&req); err != nil {
c.JSON(400, gin.H{"error": err.Error()})
return
}
}المقارنة بين ShouldBind وMustBind
تعيد ShouldBind* الخطأ لتتعامل معه بنفسك. أما Bind* (صيغة Must) فتكتب استجابة 400 تلقائيًا وتوقف التنفيذ عند حدوث خطأ — استخدم ShouldBind للاستجابات المخصصة للأخطاء.
ربط الاستعلام
اربط معلمات سلسلة الاستعلام ببنية باستخدام c.ShouldBindQuery:
type ListRequest struct {
Page int `form:"page" binding:"gte=1"`
Limit int `form:"limit" binding:"gte=1,lte=100"`
}
var q ListRequest
c.ShouldBindQuery(&q)ربط معلمات المسار
اربط معلمات المسار ببنية باستخدام c.ShouldBindUri:
type IDParam struct {
ID int64 `uri:"id" binding:"required,gt=0"`
}
var p IDParam
c.ShouldBindUri(&p)وسوم التحقق
تستخدم Gin المكتبة github.com/go-playground/validator/v10. ومن الوسوم الشائعة: required وemail وmin وmax وgte وlte وlen وoneof.
عمليات التحقق المخصصة
سجّل دالة تحقق مخصصة باستخدام binding.Validator.Engine():
validate := binding.Validator.Engine().(*validator.Validate)
validate.RegisterValidation("username", validateUsername)استجابة أخطاء التحقق
حلّل أخطاء أداة التحقق إلى استجابة سهلة الفهم للمستخدم، تتضمن أسماء الحقول والرسائل:
var ve validator.ValidationErrors
if errors.As(err, &ve) {
errs := make([]string, len(ve))
for i, e := range ve {
errs[i] = fmt.Sprintf("%s: %s", e.Field(), e.Tag())
}
c.JSON(400, gin.H{"errors": errs})
}ملفات نماذج multipart
تعامل مع عمليات رفع الملفات باستخدام c.FormFile:
file, _ := c.FormFile("avatar")
c.SaveUploadedFile(file, "./uploads/"+file.Filename)التفاوض على Content-Type
تختار ShouldBind في Gin نوع الربط تلقائيًا استنادًا إلى Content-Type (JSON بالنسبة إلى application/json، والنموذج بالنسبة إلى application/x-www-form-urlencoded).
الحد الأقصى لحجم جسم الطلب
حدّد حجم جسم الطلب لمنع استنزاف الذاكرة:
r.MaxMultipartMemory = 8 << 20 // 8 MiB for multipartالتحقق من البنى المتداخلة
يُجرى التحقق بشكل تكراري على البنى المتداخلة. استخدم dive للتحقق من عناصر الشرائح:
Tags []string `json:"tags" binding:"required,dive,min=1,max=30"`تحقق سريع
ما الفرق بين c.ShouldBindJSON وc.BindJSON في Gin؟
خلاصة: ربط الطلبات
النقاط الأساسية:
- استخدم ShouldBindJSON وShouldBindQuery وShouldBindUri للربط المعيّن النوع
- استخدم الوسوم binding:"required,email,gte=0" عبر go-playground/validator
- استخدم عمليات التحقق المخصصة عبر binding.Validator.Engine()
- حلّل ValidationErrors للحصول على رسائل أخطاء على مستوى الحقل
الأسئلة الشائعة
هل درس «ربط الطلبات والتحقق من صحتها» مجاني؟
نعم — نص درس «ربط الطلبات والتحقق من صحتها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «ربط الطلبات والتحقق من صحتها»؟
ShouldBindJSON ووسوم binding وvalidator تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «ربط الطلبات والتحقق من صحتها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- موجّه Gin ومجموعات المسارات
- ربط الطلبات والتحقق من صحتها
- مساعدات الاستجابة ورموز الحالة
- Middleware في Gin: المصادقة والتسجيل