L45 — Request Validation
Validation là rào chắn đầu tiên của mọi HTTP handler. Ba module dưới đây cho bạn
nghịch trực tiếp: (1) gõ struct tag + JSON rồi xem lỗi từng field như
go-playground/validator làm; (2) dựng response lỗi chuẩn
RFC 7807 Problem Details; (3) so sánh số dòng code giữa manual validation
và dùng lib.
1. Validation tag playground
Engine ở đây mô phỏng validator.Struct(): đọc tag
validate:"rule1,rule2" của từng field rồi áp lên giá trị trong JSON.
Hỗ trợ: required, email, min, max,
gt, oneof, alphanum, gtfield=Field,
và custom vnphone.
Định dạng: tên_field rule1,rule2,... — ví dụ email required,email
2. RFC 7807 Problem Details builder
Chọn kịch bản lỗi, chỉnh các trường, rồi xem response chuẩn IETF kèm header
Content-Type: application/problem+json. Validation fail dùng
422, JSON malformed dùng 400.
3. Manual vs library — đếm dòng code
Cùng một struct với 5 field. Kéo thanh trượt số field để
thấy manual if/else phình ra tuyến tính, còn lib chỉ thêm 1 dòng tag mỗi field.
| Manual (if/else) | go-playground/validator | |
|---|---|---|
| Dòng code (ước tính) | ~32 | ~7 |
| Gom hết lỗi 1 lần | phải tự thu vào slice | tự động |
| i18n message | tự viết bảng dịch | translations/vi sẵn |
| Cross-field | tự so sánh tay | gtfield, eqfield |
| Phụ thuộc | không | thêm 1 module |
Quy tắc README: ≤ 3 request type, < 5 field → manual OK. ≥ 5 type hoặc cần i18n → dùng lib.