Прочитать JSON-объект заказа, выбрать типы для денег, дат и статусов и описать правила объекта в JSON Schema так, чтобы сервер проверял запрос автоматически.
JSON: что передаём и по каким правилам
JSON: что передаём и по каким правилам
JSON (RFC 8259) — текстовый формат обмена данными. Объект {} — пары "ключ": значение, массив [] — список. Типов шесть: строка, число, логическое (true или false), null, объект и массив. Ключи и строки — только в двойных кавычках; комментариев и запятой после последнего элемента нет.
{
"orderId": 9001,
"status": "paid",
"totalAmount": 17980,
"currency": "RUB",
"createdAt": "2026-10-19T14:30:00+03:00",
"comment": null,
"items": [{"productId": 501, "quantity": 2, "price": 8990}]
}
Это заказ 9001 «Ромашки» в статусе paid (оплачен) на 179,80 ₽: товар 501, две штуки по 89,90 ₽.
Решения, которые принимает аналитик:
• деньги — целым числом в копейках (реже — строкой "179.80"), валюта — отдельным полем; не дробью: в двоичной дроби 0,1 + 0,2 ≠ 0,3;
• дата и время — строкой ISO 8601 (RFC 3339) с часовым поясом;
• статус — строкой из фиксированного списка (enum), а не числовым кодом;
• телефон и индекс — строками: число теряет «+» и ведущие нули;
• null — «значения нет», а это не то же, что «поля нет».
JSON Schema (версия 2020-12, на ней построен OpenAPI 3.1) — машиночитаемые правила формы: какие поля обязательны, какого типа и в каких границах. Сервер проверяет по ним запрос до бизнес-логики.
Ловушка required: он проверяет только, что ключ есть. "comment": null пройдёт, если тип допускает null ("type": ["string", "null"]), а пустая строка "" — если не задан minLength.
Ключевые слова JSON Schema
| Слово | Что проверяет | Пример |
|---|---|---|
| type | тип значения | "integer" |
| required | какие ключи обязаны быть | ["storeId", "items"] |
| enum | значение из списка | ["changed_mind", "other", …] |
| minimum / maximum | границы числа | limit от 1 до 100 |
| minLength / maxLength / pattern | длина и вид строки | телефон по шаблону |
| format | известный формат строки | "date-time" |
| items / minItems | элементы массива | хотя бы одна позиция |
| additionalProperties | можно ли лишние поля | false — лишние запрещены |
Статусы заказа «Ромашки» — значения enum
| Значение | По-русски |
|---|---|
| created | создан |
| paid | оплачен |
| assembling | в сборке |
| in_delivery | в доставке |
| delivered | доставлен |
| cancelled | отменён |
Конспект урока
JSON: что передаём и по каким правилам
JSON (RFC 8259) — текстовый формат обмена данными. Объект {} — пары "ключ": значение, массив [] — список. Типов шесть: строка, число, логическое (true или false), null, объект и массив. Ключи и строки — только в двойных кавычках; комментариев и запятой после последнего элемента нет.
{
"orderId": 9001,
"status": "paid",
"totalAmount": 17980,
"currency": "RUB",
"createdAt": "2026-10-19T14:30:00+03:00",
"comment": null,
"items": [{"productId": 501, "quantity": 2, "price": 8990}]
}
Это заказ 9001 «Ромашки» в статусе paid (оплачен) на 179,80 ₽: товар 501, две штуки по 89,90 ₽.
Решения, которые принимает аналитик:
• деньги — целым числом в копейках (реже — строкой "179.80"), валюта — отдельным полем; не дробью: в двоичной дроби 0,1 + 0,2 ≠ 0,3;
• дата и время — строкой ISO 8601 (RFC 3339) с часовым поясом;
• статус — строкой из фиксированного списка (enum), а не числовым кодом;
• телефон и индекс — строками: число теряет «+» и ведущие нули;
• null — «значения нет», а это не то же, что «поля нет».
JSON Schema (версия 2020-12, на ней построен OpenAPI 3.1) — машиночитаемые правила формы: какие поля обязательны, какого типа и в каких границах. Сервер проверяет по ним запрос до бизнес-логики.
Ловушка required: он проверяет только, что ключ есть. "comment": null пройдёт, если тип допускает null ("type": ["string", "null"]), а пустая строка "" — если не задан minLength.