Ngồi viết tay JSON Schema từ một phản hồi API dài là việc nhọc và rất dễ sai một cách khó thấy. Trang này làm phần máy móc: đọc tài liệu mẫu rồi viết ra cấu trúc và kiểu dữ liệu quan sát được, để lại cho bạn phần phán đoán mà một tài liệu mẫu không cung cấp nổi.
Mẫu chứng minh được gì và không chứng minh được gì
Ranh giới này chính là toàn bộ câu chuyện dùng schema sinh tự động cho đúng:
| Mẫu chứng minh được | Mẫu không chứng minh được |
|---|---|
| Có những khóa này | Có được phép thêm khóa khác không |
| Giá trị này là chuỗi | Nó có phải khớp mẫu hay format nào không |
| Giá trị này bằng 42 | Khoảng hợp lệ là 1–100 hay không giới hạn |
| Khóa này có mặt | Nó bắt buộc, hay chỉ tình cờ có mặt lần này |
| Mảng này chứa object | Nó có được rỗng không, có giới hạn độ dài không |
Công cụ cố ý chỉ đứng ở cột bên trái. Mọi thứ ở cột phải để dành cho bạn thêm vào, vì bịa ra ràng buộc chính là cách một schema sinh tự động bắt đầu từ chối tài liệu hợp lệ sau đó ba tháng.
Integer và number
Kiểu được quyết bởi cách con số được viết, không phải bởi giá trị của nó:
42thànhinteger42.0thànhnumber4.2e1thànhnumber123456789012345678901234567890thànhinteger
Trường hợp cuối là chỗ tách công cụ này khỏi phần lớn công cụ khác. Vì số giữ nguyên văn bản gốc thay vì bị parse sang double trước, một mã định danh 30 chữ số vẫn được nhận là số nguyên, thay vì bị hạ cấp ngay khi nó không còn vừa.
Mảng có phần tử lẫn lộn
Mọi phần tử đều được mô tả, rồi các mô tả được gộp thành một schema items duy nhất:
- Object hợp nhất thuộc tính. Khóa xuất hiện ở vài phần tử mà không có ở phần tử khác vẫn được ghi nhận, nên không mất gì.
- Danh sách bắt buộc chỉ giữ khóa có mặt ở mọi phần tử. Vắng một lần là bằng chứng khóa đó tùy chọn, và đó là suy luận mạnh nhất mà một tài liệu mẫu cho phép.
- Giá trị thường khác kiểu thì nới thành kiểu hợp, nên
[1, "two"]ra{"type": ["integer", "string"]}chứ không đoán theo phần tử đầu. - Mảng rỗng không sinh ra
itemsnào cả.
Về công tắc bắt buộc, và khi nào nên tắt
Công tắc quyết định mọi khóa có mặt trong mẫu có được liệt vào required hay không:
- Bật khi tài liệu mẫu chính là hợp đồng — một file cấu hình, một fixture, một request body do bạn kiểm soát.
- Tắt khi mẫu chỉ là một phản hồi trong vô số phản hồi. Một khóa tình cờ lần này không nhận được sẽ vĩnh viễn thành bắt buộc nếu không tắt.
Bên trong mảng, công cụ tự áp luật chặt hơn bất kể công tắc: khóa nào vắng ở dù chỉ một phần tử thì không bao giờ bị đánh dấu bắt buộc cho phần tử đó.
Rồi đem ra đối chiếu
Một schema sinh tự động chỉ đáng giá sau khi bạn đã sửa nó — thêm format, siết khoảng giá trị, quyết định cái gì thật sự tùy chọn. Trang kiểm tra bên cạnh sẽ đối chiếu tài liệu với nó và báo mọi luật bị vi phạm, cũng hoàn toàn trong trình duyệt của bạn.