🔥 Chào mừng bạn đến với series khóa học "Lập trình RESTful API với Gin Framework của Golang" cùng giảng viên Vũ Quốc Tuấn! Chúng ta đã tìm hiểu cách validate Path Param và Query Param. Bây giờ, hãy chuyển sang một phần cực kỳ quan trọng khác: Body Request!
Khi client gửi dữ liệu lên server để tạo mới hoặc cập nhật (thường qua method POST hoặc PUT), làm thế nào để đảm bảo dữ liệu trong body của request đó là hợp lệ? Bạn đã sẵn sàng áp dụng package validator cho JSON body chưa?
Trong video này, chúng ta sẽ tập trung vào việc validate Body Request, đặc biệt là khi dữ liệu được gửi dưới dạng JSON. Giảng viên Vũ Quốc Tuấn sẽ hướng dẫn bạn cách sử dụng package validator kết hợp với c.ShouldBindJSON() của Gin để kiểm tra và ràng buộc dữ liệu người dùng gửi lên, đảm bảo tính toàn vẹn và bảo mật cho API của bạn.
📌 Nội dung chính của bài học này:
✅ Ôn lại về HTTP Method POST và vai trò của Body Request trong việc tạo dữ liệu.
✅ Các loại định dạng Body Request phổ biến trong Postman: Form Data, x-www-form-urlencoded, Raw (Text, JSON, XML).
✅ Tập trung vào Raw Data dạng JSON.
✅ Cách lấy dữ liệu Raw từ body request với c.GetRawData() và chuyển sang string (ít dùng cho JSON).
✅ Validate JSON Body Request với c.ShouldBindJSON() và package validator:
✅ Tạo một struct để định nghĩa cấu trúc dữ liệu mong muốn từ JSON body (ví dụ: PostProductV1Params).
✅ Sử dụng struct tag json:"field_name_in_json" để map field của struct với key trong JSON.
✅ Áp dụng các validation tags (required, min, max, custom tags...) vào các field của struct.
✅ Trong handler, gọi c.ShouldBindJSON(¶msStruct).
✅ Sử dụng lại hàm HandleValidationErrors đã tạo ở bài trước để hiển thị lỗi validation.
✅ Ví dụ thực hành:
✅ Validate field name (string): required, min=3, max=100.
✅ Validate field price (int): required, min=10000.
✅ Validate field display (bool): omitempty (nếu không có omitempty, giá trị default false sẽ được binding).
✅ Validate field là một nested struct (struct lồng nhau):
✅ Tạo struct ImageParams (ví dụ: ImageName, ImageLink).
✅ Trong struct PostProductV1Params, khai báo field ProductImage kiểu ImageParams.
✅ Áp dụng validation cho các field bên trong ImageParams.
✅ Tag binding:"required" cho field struct để yêu cầu object đó phải được gửi lên.
✅ Bài tập về nhà:
✅ Custom validation message cho price (thay vì "ký tự", nên là "giá trị").
✅ Xử lý trường display (bool): Nếu không nhập, giá trị mặc định trong code phải là true, nhưng nếu người dùng gửi false thì phải nhận false. (Gợi ý: không dùng omitempty và xử lý logic sau khi bind).
✅ Tầm quan trọng của việc validate kỹ lưỡng Body Request để tránh lỗi và tấn công.
Validate Body Request là một bước không thể thiếu trong quá trình xây dựng API. Việc sử dụng package validator sẽ giúp bạn thực hiện công việc này một cách hiệu quả, nhanh chóng và đáng tin cậy.
🔔 Đừng quên:
🚀 Theo dõi toàn bộ khóa học tại đây: • Master RESTful API với Golang và Gin: Khóa...
👍 Nhấn LIKE video này nếu bạn thấy hữu ích.
🎯 SUBSCRIBE (Đăng ký) kênh và bật chuông thông báo để nhận được những bài học mới nhất về lập trình Golang, Gin Framework và RESTful API.
📩 Tham gia nhóm học tập: / discord
📚 Tài liệu & Source code: https://github.com/quoctuan9901/khoa-...
⏰ Timestamps:
00:00 - Giới thiệu bài học: Validate Body Request
00:27 - Tầm quan trọng của việc bảo mật Body Request
00:40 - Ôn lại HTTP Method POST và tạo dữ liệu
01:20 - Các loại Body Request trong Postman (Form Data, Raw JSON,...)
02:35 - Lấy Raw Data với c.GetRawData() (ví dụ với text)
05:22 - Validate JSON Body Request với c.ShouldBindJSON()
06:37 - Tạo struct cho JSON body (PostProductV1Params)
07:24 - Sử dụng tag json:"field_name" và các validation tags (required, min, max)
08:20 - Áp dụng c.ShouldBindJSON() trong handler PostProductVersion1
09:55 - Test với Postman: Validate name (required, min, max)
12:28 - Validate price (int, required, min)
13:30 - Thảo luận về custom message cho validation min của price (bài tập)
15:23 - Validate display (bool, omitempty)
16:01 - Test display với omitempty và khi không nhập
17:29 - Validate Nested Struct (struct lồng nhau) - Ví dụ ProductImage
17:42 - Tạo struct ImageParams và khai báo trong PostProductV1Params
19:06 - Áp dụng tag binding:"required" cho field struct
19:46 - Test validate nested struct với Postman
21:21 - Bài tập về nhà: Custom message cho price, xử lý display (default true, nhận false nếu gửi)
23:44 - Giới thiệu nội dung clip sau và tầm quan trọng của validate body request
Cảm ơn các bạn đã theo dõi! Việc validate dữ liệu đầu vào, đặc biệt là Body Request, là cực kỳ quan trọng để đảm bảo API của bạn hoạt động ổn định và an toàn.
🔖 Tags:
#BodyRequestValidation #GinFramework #JSONValidation #GoPlaygroundValidator #ShouldBindJSON #RESTfulAPI #Golang #GoGin #HocLapTrinhAPI #LapTrinhAPI #KhoaHocLapTrinh #VuQuocTuan #POSTRequest #DataBinding #StructTagsGo #APISecurity #NestedStructValidation
Информация по комментариям в разработке