Pepelen
← Системный анализ: API, интеграции и данные

Урок

JSON и JSON Schema: форма данных и её правила

Прочитать JSON-объект заказа, выбрать типы для денег, дат и статусов и описать правила объекта в JSON Schema так, чтобы сервер проверял запрос автоматически.

1 / 7

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.