JSON Schema: Từ cơ bản đến triển khai thực tế
Từ khóa thì nhiều, nhưng hằng ngày chỉ dùng hơn chục cái. Nắm đúng type/properties/required/$ref, xử lý tốt thông báo lỗi là đã phủ được tám mươi phần trăm tình huống thực tế.
Mô tả hình dạng dữ liệu bằng JSON Schema, biến những thỏa thuận miệng thành xác thực có thể thực thi, rồi để nó dẫn dắt việc sinh kiểu TypeScript và form.
7 bài viếtTừ khóa thì nhiều, nhưng hằng ngày chỉ dùng hơn chục cái. Nắm đúng type/properties/required/$ref, xử lý tốt thông báo lỗi là đã phủ được tám mươi phần trăm tình huống thực tế.
Kiểu và schema mỗi thứ phủ một đoạn: một bên ở thời điểm biên dịch, một bên ở thời điểm chạy. Vấn đề không phải chọn bên nào, mà là làm sao giữ hai bên đồng bộ một cách tự động.
Schema sinh ra thường chặn dữ liệu hợp lệ. Hãy hiểu tại sao mẫu càng đầy đủ lại cho schema càng tệ, rồi làm theo quy trình: lấy mẫu nhiều bản ghi, bổ sung ngữ nghĩa, chỉ ra lỗi chính xác.
$ref giải quyết tái sử dụng, allOf và oneOf giải quyết kết hợp, còn xếp chồng cả hai chính là chỗ mọi thứ vỡ. Bài viết bao gồm $id, $defs, điều kiện, đệ quy, bundle và debug.
Trình xác thực phát ra lỗi cho máy đọc; người dùng lại muốn biết ô nhập nào sai. Bài viết bao gồm mảng errors của Ajv, phân biệt instancePath và schemaPath, nhóm lỗi và cách diễn đạt thông báo.
Xác thực thành công không đồng nghĩa dữ liệu sạch. Pydantic mặc định bỏ qua trường lạ, Zod gỡ bỏ chúng, Ajv cho qua — tham số bịa và khóa gõ sai lọt thẳng. Bài viết chỉ ra ba dạng chấp nhận im lặng và đưa ra cách làm đầy đủ: đóng đối tượng, kiểm soát ép kiểu, siết từng tầng lồng nhau.
Schema không kết thúc khi viết xong — đó là nơi thoái hóa bắt đầu. Một lỗi chính tả âm thầm nới lỏng xác thực, một lần refactor làm hỏng mọi fixture. Hướng dẫn này trình bày bộ khung kiểm thử hợp đồng khả thi: fixture dương, âm và snapshot, lint chính schema, biên dịch một lần tái sử dụng, và bốn cổng CI biến vỡ hợp đồng thành build đỏ.