Json схСма Π΄Π°Π½Π½Ρ‹Ρ…: ОписаниС ΠΈ валидация Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½Ρ‹Ρ… структур Π΄Π°Π½Π½Ρ‹Ρ…. JSON-Schema / Π₯Π°Π±Ρ€

Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅

JSON Schema. Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ? / Π₯Π°Π±Ρ€

АрхитСктура: искусство Π΄Π΅Π»Π°Ρ‚ΡŒ излишнСС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ΠΌ.

Π€Ρ€Π΅Π΄Π΅Ρ€ΠΈΠΊ ΠšΠΈΡΠ»Π΅Ρ€


Ни для ΠΊΠΎΠ³ΠΎ Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ Π½Π΅ сСкрСт, Ρ‡Ρ‚ΠΎ для любого web-сСрвиса Π½Π° ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π΅ SOAP с сообщСниями Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML Π²Π΅Ρ€Π½Ρ‹ΠΌ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ являСтся ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° XML Schema (xsd-схСмы), ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ структуру XML сообщСний. ΠŸΡ€ΠΈ этом ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π΅ Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² сущСствуСт явноС прСимущСство: Ρƒ Π½ΠΈΡ… Π΅ΡΡ‚ΡŒ строгиС стандартизированныС ΠΏΡ€Π°Π²ΠΈΠ»Π° ΠΏΠΎ структурС сообщСний, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π·Π°Π΄Π°Π½Ρ‹ Π² схСмС, число ΠΏΡ€Π°Π²ΠΈΠ» ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ любого Π½ΠΎΠ²ΠΎΠ³ΠΎ сообщСния Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ XML.


Но Ρ‚Π°ΠΊΠΆΠ΅ извСстно, Ρ‡Ρ‚ΠΎ язык XML потСснился языком Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ JSON (JavaScript Object Notation) Π² Π²ΠΈΠ΄Ρƒ Π΅Π³ΠΎ большСй тяТСловСсности (тяТСловСсности XML), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π² Π²ΠΈΠ΄Ρƒ распространСния Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½ΠΎΠ³ΠΎ стиля REST (REpresentational State Transfer) Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния для распрСдСлСнных систСм. Π₯отя сам REST-ΡΡ‚ΠΈΠ»ΡŒ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ использования JSON (ΠΎΠ½ Π²ΠΎΠΎΠ±Ρ‰Π΅, ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Π° Β«Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅Ρ‚Β»), Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°, Ρ‡Π°Ρ‰Π΅ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ REST API всС-Ρ‚Π°ΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JSON для описания Ρ‚Π΅Π»Π° сообщСний.

Π’Π°ΠΊ Π²ΠΎΡ‚, ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ° Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ REST API с JSON–сообщСниями ΠΏΡ€ΠΎΡ‡Π½ΠΎ вошла Π² Тизнь ИВ Π² России (ΠΈ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρƒ нас), хотя ΠΎΠΏΡ‹Ρ‚ ΠΏΡ€ΠΈ этом ΠΏΠΎ описанию структуры сообщСний Π² Π²ΠΈΠ΄Π΅ XML Schema, Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΠ²ΡˆΠΈΠΉ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² web-слуТб Π² своС врСмя, ΡƒΠΏΠΎΡ€Π½ΠΎ игнорируСтся Π² случаС c JSON–сообщСниями. Но Π½Π΅ всСми, Ρ‡Ρ‚ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π΅ Ρ€Π°Π΄ΠΎΠ²Π°Ρ‚ΡŒ.

Когда Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ, Π·Π½Π°ΠΊΠΎΠΌΡ‹Π΅ с XML Schema, ΡΡ‚ΠΎΠ»ΠΊΠ½ΡƒΠ»ΠΈΡΡŒ с Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π· Π·Π°Π½ΠΎΠ²ΠΎ ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ вСлосипСд с Ρ€Π°Π·Π±ΠΎΡ€ΠΎΠΌ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈ ΠΏΠ΅Ρ€Π΅ΠΈΠ·ΠΎΠ±Ρ€Π΅Ρ‚Π°Ρ‚ΡŒ Π»ΠΎΠ³ΠΈΠΊΡƒ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ, сформировался Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ΠΉ Π΄Ρ€Π°Ρ„Ρ‚ JSON Schema. Он доступСн ΠΏΠΎ адрСсу json-schema.org, Π° Ρ‚Π°ΠΊΠΆΠ΅ ряд Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΏΠΎ истории ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования. И нСсмотря Π½Π° Ρ‚ΠΎ Ρ‡Ρ‚ΠΎ ΠΎΠ½ публикуСтся Π² статусС Β«draftΒ», Π΅Π³ΠΎ Π΄Π°Π²Π½ΠΎ ΡƒΠΆΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ всС популярныС ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΡ‹ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках.

Π‘Π°ΠΌΠ° JSON Schema прСдоставляСт мСньшС возмоТностСй ΠΏΠΎ структуризации сообщСний, Ρ‡Π΅ΠΌ XML Schema. Π’ΠΎ, Ρ‡Ρ‚ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· XML Schema, Π½Π΅ всСгда Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π·Π°Π΄Π°Ρ‡Π΅ΠΉ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON Schema, Ссли Π²ΠΎΠΎΠ±Ρ‰Π΅ это Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Но здСсь ΠΆΠ΅ я Π±Ρ‹ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΊΡ‚ стала Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ ΠΈ ΠΊΠ°ΠΊ прСимущСство. ΠŸΠΎΡ‡Π΅ΠΌΡƒ?

Π˜Π·Π²Π΅ΡΡ‚Π½ΠΎ, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Π΅Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ систСмы, Ρ‚Π΅ΠΌ ΠΎΠ½Π° ΠΈ Π½Π°Π΄Π΅ΠΆΠ½Π΅Π΅, Ρ‡Ρ‚ΠΎ Ρ‡Π΅ΠΌ ΠΏΡ€ΠΎΡ‰Π΅ структура Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°, Ρ‚Π΅ΠΌ Π»Π΅Π³Ρ‡Π΅ ΠΎΠ½ для восприятия ΠΈ Ρ‚.Π΄.

НС ΠΌΠΎΠ³Ρƒ ΡƒΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΠΏΡ€ΠΎΡ†ΠΈΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ: «Всё гСниальноС просто, ΠΈ всё простоС гСниально». И Ссли Π½Π΅ удаСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ схСмы ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ ΡΠ»ΠΎΠΆΠ½ΡƒΡŽ структуру Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ мноТСство допустимых Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², Ρ‚ΠΎ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, стоит ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π² сторону упрощСния самой структуры ΠΈ Π»ΠΎΠ³ΠΈΠΊΠΈ формирования этого Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°?

ΠŸΡ€Π΅Π΄ΠΈΡΠ»ΠΎΠ²ΠΈΠ΅


Π˜Ρ‚Π°ΠΊ, ΠΎ Ρ‡Π΅ΠΌ ΠΆΠ΅ эта ΡΡ‚Π°Ρ‚ΡŒΡ?

Π― Π±Ρ‹ Ρ…ΠΎΡ‚Π΅Π»Π° ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡ΡŒ большС внимания ΠΊ прСимущСствам описания ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Π΅ΠΌΡ‹Ρ… JSON сообщСний схСмой JSON Schema. НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Β«Π½Π° Π²Ρ…ΠΎΠ΄Π΅Β» Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° REST API Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ JSON-схСмы всСгда ΠΏΡ€ΠΎΡ‰Π΅ ΠΈ быстрСС, Π½ΠΎ с ростом систСмы, Π΅Π΅ отсутствиС Ρ‚Π°ΠΊ ΠΈΠ»ΠΈ ΠΈΠ½Π°Ρ‡Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ΄ΠΎΡ€ΠΎΠΆΠ°Π½ΠΈΡŽ сопровоТдСния ΠΈ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ систСмы. Π’Π°ΠΊΠΆΠ΅ любая ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ ΠΏΡ€ΠΎΡ€Π°Π±ΠΎΡ‚ΠΊΠ° структуры сообщСний способствуСт Π±ΠΎΠ»Π΅Π΅ качСствСнной ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΠΌΠ΅Π½Π° сообщСниями, Π±Π΅Π· лишнСго дублирования ΠΏΡ€ΠΈ ΠΎΠ±ΠΌΠ΅Π½Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ ΠΎΠ±Ρ‰ΠΈΠΌΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ.

Π’Π°ΠΊΠΆΠ΅ Π² цСлях распространСния ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ Π² русскоязычном сообщСствС ΠΎ возмоТностях JSON Schema ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π½Π΅ΠΉ я подСлюсь своим Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ Π½Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

ΠŸΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π΄Π°Ρ‡ΠΈ


ΠŸΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ ΠΏΡ€ΠΈΡΡ‚ΡƒΠΏΠΈΡ‚ΡŒ ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ JSON ΠΈ JSON Schema, ΠΎΠΏΠΈΡˆΡƒ Π·Π°Π΄Π°Ρ‡Ρƒ, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ всС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π°Π»Π΅Π΅.

Рассмотрим Ρ€ΠΎΠ»Π΅Π²ΡƒΡŽ модСль управлСния Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΡΠΏΡ€Π°Π²ΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΏΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΉ Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΡ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² зависимыС систСмы Π² сообщСниях Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON посрСдством Π²Ρ‹Π·ΠΎΠ²Π° REST-сСрвиса.

ОписаниС Π·Π°Π΄Π°Ρ‡ΠΈ:

Π’ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΅ΡΡ‚ΡŒ сотрудники, ΠΈΠΌ часто приходится Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Π² Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… систСмах. ΠŸΡ€ΠΈ этом ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ доступа (ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ) ΠΊ Ρ‚Π΅ΠΌ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹ΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ систСмы (рСсурсам) для Ρ€Π°Π·Π½Ρ‹Ρ… сотрудников Π² зависимости ΠΎΡ‚ ΠΈΡ… Ρ€ΠΎΠ»ΠΈ Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π² систСмС.

НапримСр, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ (Ρ€ΠΎΠ»ΡŒ) Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ/полномочия) ΠΊ расчСтным листкам (рСсурс) ΠΏΠΎ Π·Π°Ρ€Π°Π±ΠΎΡ‚Π½ΠΎΠΉ ΠΏΠ»Π°Ρ‚Π΅ всСх сотрудников, Π° Ρƒ Π°Π½Π°Π»ΠΈΡ‚ΠΈΠΊΠ° (Ρ€ΠΎΠ»ΡŒ), ΠΊ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρƒ, Π±ΡƒΠ΄Π΅Ρ‚ доступ Π½Π° Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ (опСрация/полномочия) Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎ своСму расчСтному листку (рСсурс).

НСобходимо ΡΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Ρ€ΠΎΠ»Π΅Π²ΡƒΡŽ модСль управлСния Π² ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ. ДоступныС Ρ€ΠΎΠ»ΠΈ, Π½Π°Π±ΠΎΡ€ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов Π² систСмС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠΌ систСмам ΠΏΠΎ запросу.

Рисунок 1. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ΠΎΠ² Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ

Бпособы описания ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ, Π½ΠΎ нСзависимо ΠΎΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Ρ‡Π°Ρ‰Π΅ всСго Π² Ρ€ΠΎΠ»Π΅Π²ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π² Ρ‚Π°ΠΊΠΎΠΌ случаС ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠ΅:

  1. Роль (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ ΠΈ Ρ‚. Π΄.).
  2. РСсурс (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ нСдвиТимости ΠΈ Ρ‚.Π΄.).
  3. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΡ/полномочия (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ, Ρ€Π°ΡΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ Ρ‚.Π΄.).


ΠŸΡ€ΠΈ описании Ρ€ΠΎΠ»Π΅Π²ΠΎΠ³ΠΎ доступа (ΠΊΠ°ΠΊ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ²) ΠΏΡ€ΠΈΠ±Π΅Π³Π°ΡŽΡ‚ ΠΊ созданию дискрСтной ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ доступа Π½Π° основС Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… сущностСй, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€:

Π’Π°Π±Π»ΠΈΡ†Π° 1. ДискрСтная ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π° доступов.




РСсурс: documents РСсурс: objects
Роль: manager read, printread, create
Роль: accountant read, create read


Π”Π°Π»Π΅Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ ознакомимся сначала с тСорСтичСской ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ тСкстового Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ JSON ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»Π°ΠΌΠΈ ΠΈΡ… структурирования с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON Schema, Π° Π² качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ описаниС сущностСй-справочников для Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π½Π° языкС JSON ΠΈ ΠΈΡ… JSON–схСм Π² Ρ€Π°ΠΌΠΊΠ°Ρ… нашСй поставлСнной Π·Π°Π΄Π°Ρ‡ΠΈ.

JavaScript Object Notation (JSON)

JSON (Π°Π½Π³Π». JavaScript Object Notation) β€” тСкстовый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, основанный Π½Π° JavaScript.

ВСория


Π―Π·Ρ‹ΠΊ Ρ€Π°Π·ΠΌΠ΅Ρ‚ΠΊΠΈ JSON Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…. Для ΠΏΠ°Ρ€Ρ‹ {β€œΠΊΠ»ΡŽΡ‡β€: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅} для Β«ΠΊΠ»ΡŽΡ‡Π°Β» всСгда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Ρ‚ΠΈΠΏ string, для «значСния» ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Ρ‚ΠΈΠΏΡ‹: string, number, object (Ρ‚ΠΈΠΏ JSON), array, boolean (true ΠΈΠ»ΠΈ false) ΠΈ null.

Рисунок 2. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON

На рисункС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π±Π°Π·ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΈΡ… использования. Достаточно просто всС, Π½Π° ΠΌΠΎΠΉ взгляд.

Бинтаксис JSON являСтся подмноТСством синтаксиса JavaScript, Π³Π΄Π΅:

  1. Π”Π°Π½Π½Ρ‹Π΅ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ {β€œΠΊΠ»ΡŽΡ‡β€: Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅}.
  2. Π”Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ΡΡ запятыми.
  3. Π’ Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.
  4. Π’ ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π½Ρ‹Ρ… скобках Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ массивы.
  5. НаимСнования Β«ΠΊΠ»ΡŽΡ‡Π΅ΠΉΒ» рСгистрозависимы.

Рисунок 3. Бинтаксис JSON

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°


Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€ справочника Ρ€ΠΎΠ»Π΅ΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π² сСрвисС:

Рисунок 4. ОписаниС справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ json

Из ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π²ΠΈΠ΄Π½ΠΎ, Ρ‡Ρ‚ΠΎ Π΄Π°ΠΆΠ΅ нСсмотря Π½Π° ΡΡ‚ΠΎΠ»ΡŒ нСбольшоС число Π±Π°Π·ΠΎΠ²Ρ‹Ρ… Ρ‚ΠΈΠΏΠΎΠ², ΠΏΡ€ΠΈ ΠΈΡ… ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ слоТныС структуры сообщСний ΠΏΡ€ΠΈ нСобходимости. Π—Π΄Π΅ΡΡŒ, Π² частности, я ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽ справочник Ρ€ΠΎΠ»Π΅ΠΉ Ρ‡Π΅Ρ€Π΅Π· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массивов, содСрТащих Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (Π½Π° рисункС 4 Π²Ρ‹Π΄Π΅Π»Π΅Π½Ρ‹ двумя ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠ°ΠΌΠΈ).

Π’ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ срСдств Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ json-сообщСний справочник ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСн ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

Рисунок 5. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊ, условно говоря, прСдставляСт собой 3 Β«Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹Β» для задания Ρ€ΠΎΠ»Π΅ΠΉ Π² Π³Ρ€ΡƒΠΏΠΏΠ΅ администраторов, Π±ΡƒΡ…Π³Π°Π»Ρ‚Π΅Ρ€ΠΎΠ² ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΡ…. Бостав Β«Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²Β» ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½, ΠΏΡ€ΠΈ нСобходимости.

Π’ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС, Π½Π° ΠΌΠΎΠΉ взгляд, ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ восприятиС тСкстового описания. ΠΠ½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ структуру Π·Π°Π΄Π°Π΄ΠΈΠΌ ΠΈ для Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… справочников. ΠŸΡ€ΠΈΠ²Π΅Π΄Ρƒ Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ прСдставлСния для справочника ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ) ΠΈ рСсурсов.

Рисунок 6. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Рисунок 7. Π’ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ справочника рСсурсов Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹Π΅ сообщСния Π² тСкстовом Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON для справочника Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Ρ‡Π°Ρ‚ΡŒ/ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΏΠΎ ссылкС.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠ΅Ρ€Π΅ΠΉΠ΄Π΅ΠΌ ΠΊ самому интСрСсному: ΠΊ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΡŽ JSON Schema ΠΈ созданию схСмы ΠΏΠΎΠ΄ наши справочники!

JSON Schema

ВСория


ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ схСма json написана Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΎΠ½Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ всС Ρ‚ΠΈΠΏΡ‹ JSON плюс Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅: Ρ‚ΠΈΠΏ integer, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ являСтся ΠΏΠΎΠ΄Ρ‚ΠΈΠΏΠΎΠΌ Ρ‚ΠΈΠΏΠ° number. Π‘Π°ΠΌΠ° схСма являСтся JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для описания Π΄Π°Π½Π½Ρ‹Ρ… Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. НиТС приводится схСма Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ создании самой схСмы:

Рисунок 8. Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON Schema

Как Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· рисунка, для схСмы ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ всС Ρ‚Π΅ ΠΆΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, Π° Ρ‚Π°ΠΊΠΆΠ΅ всС Ρ‚Π΅ ΠΆΠ΅ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ‹ синтаксиса, Ρ‡Ρ‚ΠΎ ΠΈ для ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON, ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ Π½Π° рисункС 3.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ рассмотрим самоС Π²Π°ΠΆΠ½ΠΎΠ΅ β€” ΠΏΡ€Π°Π²ΠΈΠ»Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² схСмС для задания ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΈ структурирования JSON-сообщСний.

JSON Schema позволяСт:

  1. ΠžΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для элСмСнтов Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON.
  2. Π’ зависимости ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° провСряСмых Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΡ‹ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π°Π²ΠΈΠ»Π° β€” Β«keywordsΒ», начиная с корня схСмы Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈ ΡΠΏΡƒΡΠΊΠ°ΡΡΡŒ ΠΊ ΠΈΡ… Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΌ элСмСнтам.


НСкоторыС Β«ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова» ΡΠ²Π»ΡΡŽΡ‚ΡΡ чисто ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: Β«titleΒ», Β«descriptionΒ» ΠΈ Π΄Ρ€., ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ просто ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ схСмы. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°: Β«$schemaΒ». Π­Ρ‚ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания ΠΆΠ΅Π»Π°Π΅ΠΌΠΎΠΉ вСрсии схСмы. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ этого ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ строкой, ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‰Π΅ΠΉ URI, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€: «$schema»: Β«json-schema.org/draft-04/schema#Β».

Π—Π΄Π΅ΡΡŒ ΠΎΡ‡Π΅Π½ΡŒ Π²Π°ΠΆΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ Π½Π΅ всС вСрсии ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ вашим инструмСнтом Ρ€Π°Π±ΠΎΡ‚Ρ‹ со схСмой. Но 4-ΠΉ Π΄Ρ€Π°Ρ„Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ практичСски всС. О послСдних измСнСниях (JSON Schema 2019-09 Release Notes) для Ρ€Π°Π·Π½Ρ‹Ρ… вСрсий ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ ΠΏΠΎ ссылкС json-schema.org/draft/2019-09/release-notes.html.

ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСпосрСдствСнно для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π° JSON. Π˜Ρ… ΠΌΡ‹ сСйчас ΠΈ рассмотрим.

Π’Π°Π±Π»ΠΈΡ†Π° 2. Анализ структуры JSON Schema. ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΈ ΠΈΡ… ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ использования.


ΠœΡ‹ рассмотрСли ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова схСмы JSON, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ ΠΎΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π°ΠΌ Π±ΡƒΠ΄ΡƒΡ‰ΡƒΡŽ структуру Π½Π°ΡˆΠΈΡ… сообщСний Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON.

Π—Π΄Π΅ΡΡŒ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π½Π°ΠΉΡ‚ΠΈ большС ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов.

ΠŸΡ€Π°ΠΊΡ‚ΠΈΠΊΠ°


ΠŸΡ€ΠΈ рассмотрСнии ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹Ρ… JSON-схСм ΠΌΡ‹ поступим Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ с самими сообщСниями Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON. Π’.Π΅. ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠ΅ прСдставлСниС Π² Π΄Ρ€Π΅Π²ΠΎΠ²ΠΈΠ΄Π½ΠΎΠΌ ΠΈ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅ для Π½Π°ΡˆΠΈΡ… схСм справочников Ρ€ΠΎΠ»Π΅ΠΉ, рСсурсов ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ (ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ), Π° с тСкстом схСм ΠΏΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π·Π°ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΠΎΠ²Π°Π²ΡˆΠΈΡ…ΡΡ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Π² git.

НиТС приводится схСма для справочника Ρ€ΠΎΠ»Π΅ΠΉ.

Рисунок 9. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema для справочника Ρ€ΠΎΠ»Π΅ΠΉ

Как ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ Π½Π° рисункС, схСма прСдставляСт собой JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈ описываСт нашС сообщСниС для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ справочника Ρ€ΠΎΠ»Π΅ΠΉ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ JSON, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ Π½Π° рисункС 4. На Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСдставлСно ΠΊΠ°ΠΊ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ JSON схСмы ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ описан ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ массивов, состоящий ΠΈΠ· ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

Π‘Ρ…Π΅ΠΌΡ‹ Π΄Π²ΡƒΡ… Π΄Ρ€ΡƒΠ³ΠΈΡ… справочников (ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов) ΠΏΠΎ своСй структурС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ‡Π½Ρ‹ со схСмой для справочника Ρ€ΠΎΠ»Π΅ΠΉ, поэтому Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡ… здСсь ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ΡŒ, Π° ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ схСму, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΡƒΡŽ Π² сСбС всС 3 справочника.

К соТалСнию, схСма всСго справочника ΠΏΡ€ΠΈ раскрытии Π½Π΅ помСстится Π½Π° экранС, поэтому рассмотрим Π΅Π΅ Ρ‡Π°ΡΡ‚ΡŒ.

Рисунок 10. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema справочника, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ Π² сСбС справочник Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов

На рисункС ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ Ρ‡Π°ΡΡ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² массива справочников ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π° с использованиСм ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова Β«anyOfΒ».

Π’Π°ΠΊΠΆΠ΅, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, нагляднСС Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ΅ прСдставлСниС справочника.

Рассмотрим Π΅Ρ‰Π΅ ΠΎΠ΄Π½Ρƒ Π²Π°ΠΆΠ½ΡƒΡŽ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ нашСй схСмы:

Рисунок 11. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ JSON Schema справочника, ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰Π΅Π³ΠΎ Π² сСбС справочник Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов Π² Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠΌ прСдставлСнии

Из рисунка ΠΌΡ‹ Π²ΠΈΠ΄ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΡŽΡ‰ΠΈΠΉ справочник Π½Π΅ Π΄ΡƒΠ±Π»ΠΈΡ€ΡƒΠ΅Ρ‚ Π² сСбС ΠΊΠΎΠ΄ ΠΈΠ· Ρ€Π°Π½Π΅Π΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹Ρ… справочников Ρ€ΠΎΠ»Π΅ΠΉ, ΠΏΠΎΠ»Π½ΠΎΠΌΠΎΡ‡ΠΈΠΉ ΠΈ рСсурсов, Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово «$ref».

Π‘ΠΏΡ€Π°Π²ΠΎΡ‡Π½ΠΈΠΊΠΈ, рассматриваСмыС Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ…, находятся Π² ΠΎΠ΄Π½ΠΎΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ, Π½ΠΎ, ΠΏΡ€ΠΈ нСобходимости, это ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ ΡΠΎΠ±Π»ΡŽΠ΄Π°Ρ‚ΡŒ, Π° Ρ€Π°Π·ΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ Π² Ρ€Π°Π·Π½Ρ‹Ρ… дирСкториях, ΡƒΠΊΠ°Π·Π°Π² ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎ ΠΏΡƒΡ‚ΡŒ ΠΊ Π½ΠΈΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ. Данная Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‡Π΅Π½ΡŒ ΠΏΠΎΠ»Π΅Π·Π½Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ позволяСт ΠΏΠ΅Ρ€Π΅ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π½Π΅Π΅ созданныС схСмы, лишь ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΈΡ… Π² Π½ΡƒΠΆΠ½Ρ‹Π΅ структуры.

На этом ΠΌΠΎΠΉ ΠΎΠ±Π·ΠΎΡ€ JSON ΠΈ JSON Schema я Π·Π°Π²Π΅Ρ€ΡˆΠ°ΡŽ. НадСюсь, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹ΠΉ здСсь ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π» ΠΈ рассмотрСнныС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹, окаТутся ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΈ ΠΈΠ·ΡƒΡ‡Π΅Π½ΠΈΠΈ возмоТностСй JSON Sсhema.

ВмСсто Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ


Π”ΡƒΠΌΠ°ΡŽ, ΠΏΠΎΡ€Π° ΠΏΠΎΠ΄Π²ΠΎΠ΄ΠΈΡ‚ΡŒ ΠΈΡ‚ΠΎΠ³ΠΈ. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΆΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ JSON Schema Π² ΠΈΡ‚ΠΎΠ³Π΅ Π½Π°ΠΌ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°Ρ‚ΡŒ?

  1. ΠœΠΎΠΆΠ΅Ρ‚ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Тизнь Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΠΈ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ ΠΊΠΎΠ΄ ΠΏΠΎ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ JSON -сообщСний.
    Π˜Π½Ρ‹ΠΌΠΈ словами, это ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ ПО.
  2. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ сСрвисы, прорабатывая Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ ΠΈ состав Π΄Π°Π½Π½Ρ‹Ρ… с Β«Π·Π°Π΄Π΅Π»ΠΎΠΌΒ» Π½Π° Π±ΡƒΠ΄ΡƒΡ‰Π΅Π΅ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ систСмы.
  3. ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΡƒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…, ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎ-ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Π‘Π”.
  4. JSON-Schema ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΡΠΊΠΎΠ½ΠΎΠΌΠΈΡ‚ΡŒ врСмя Π½Π° тСстировании ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ API.
  5. Π£ΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ совмСстимости API.
  6. ΠŸΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ….
  7. Π“ΠΈΠ±ΠΊΡƒΡŽ Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΡŽ ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ JSON Schema Π² run-time со значСниями Π² Β«enumΒ», ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌΡ‹ΠΌΠΈ Π½Π° этапС выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.
    Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ для ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠ³ΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚Π° ΠΈΠ»ΠΈ workflow со статусами Π² Β«enumΒ» (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ примСнСния ΠΎΡ‚ NtsDK ΠΈ VolCh).
  8. JSON Schema ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½Π° ΠΏΡ€ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ DTO
    (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ использования ΠΎΡ‚ amarkevich)


ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· нас сам Ρ€Π΅ΡˆΠ°Π΅Ρ‚, Β«Π‘Ρ‹Ρ‚ΡŒ ΠΈΠ»ΠΈ Π½Π΅ Π±Ρ‹Ρ‚ΡŒ JSON SchemaΒ» Π² Π½Π°ΡˆΠΈΡ… IT -ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ…. Π’Ρ‹ΡˆΠ΅ я ΠΏΡ€ΠΈΠ²Π΅Π»Π° список Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ я ΡΡ‡ΠΈΡ‚Π°ΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ прСимущСством примСнСния схСм, ΠΈ Ρ€Π°Π΄ΠΈ Ρ‡Π΅Π³ΠΎ ΡƒΠΆΠ΅ стоит Π·Π°Π΄ΡƒΠΌΠ°Ρ‚ΡŒΡΡ ΠΎ Π΅Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π² ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°Ρ….

Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ захотят ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΌΠ½Π΅ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ этот список?

Π― Π±ΡƒΠ΄Ρƒ ΠΏΡ€ΠΈΠ·Π½Π°Ρ‚Π΅Π»ΡŒΠ½Π° πŸ™‚

Π’Π°ΠΊΠΆΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρƒ список ссылок, Π½Π° ΠΌΠΎΠΉ взгляд, ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Ρ… для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с JSON ΠΈ JSON Schema

  1. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ источник с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов схСмы.
  2. Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ с большим числом ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² использования ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов схСмы.
  3. ΠžΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½Π°Ρ страница стандарта (Π΄Ρ€Π°Ρ„Ρ‚Π°).
  4. Бписок Ρ€Π΅Π»ΠΈΠ·ΠΎΠ² (ΠΏΠΎΠ»Π΅Π·Π½ΠΎ для понимания Π΄ΠΈΠ½Π°ΠΌΠΈΠΊΠΈ развития стандарта).
  5. Онлайн-Π²Π°Π»ΠΈΠ΄Π°Ρ‚ΠΎΡ€ с Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒΡŽ Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ Π΄Ρ€Π°Ρ„Ρ‚Π° JSON-Schema.
  6. ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ JSON Schema
  7. JSON Schema для создания динамичСских интСрфСйсов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒΡΡ самим Π·Π°ΠΊΠ°Π·Ρ‡ΠΈΠΊΠΎΠΌ (ΠΏΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎΡ‚ alemiks), Π° Ρ‚Π°ΠΊΠΆΠ΅ Π°Π½Π°Π»ΠΎΠ³ΠΈ ΠΈΠ· ΠΌΠΈΡ€Π° angular ngx-schema-form, AJSF (ΠΏΠΎ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°Ρ†ΠΈΠΈ ΠΎΡ‚ anotherpit).


И ссылку Π½Π° git-Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ, Π³Π΄Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ, ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠΌΡ‹ΠΌΠΈ для ознакомлСния Π² Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅: Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ с исходными Ρ„Π°ΠΉΠ»Π°ΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ².

БистСмный Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΠΎΡ€,
Β© Π˜Ρ€ΠΈΠ½Π° Π‘Π»Π°ΠΆΠΈΠ½Π°

JSON Schema | WebReference

Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ JSON-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

{
  "artists" : [
    { 
      "artistname" : "Deep Purple",
      "formed" : "1968"
    },
    { 
      "artistname" : "Joe Satriani",
      "born" : "1956-07-15" 
    },
    { 
      "artistname" : "Maroon 5",
      "formed" : "1994" 
    }
  ]
}

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ примСняСтся Ρ€Π°Π·Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹ Ρƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΎΠ΄ΠΈΠ½ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ born (ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠΎΠ³Π΄Π° родился ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ), Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ formed (ΠΊΠΎΠ³Π΄Π° ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π»Π°ΡΡŒ Π³Ρ€ΡƒΠΏΠΏΠ°/ΠΈΡΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒ).

Π’ JSON Π½Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ», согласно ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ»ΠΈ Π΄Π°ΠΆΠ΅ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ поля. Им Π΄Π°ΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ количСство ΠΏΠΎΠ»Π΅ΠΉ. НапримСр, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π΅ favoritecolor ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ, Π½Π΅ добавляя Π΅Π³ΠΎ ΠΊ Π΄Ρ€ΡƒΠ³ΠΈΠΌ.

ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅Ρ‚ ΠΏΡ€Π°Π²ΠΈΠ»Π°, согласно ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. НапримСр, ΠΏΠΎΠ»Π΅ born ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ прСдставлСно Π»ΡŽΠ±Ρ‹ΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… способов.

"born" : "1956"
"born" : 1956
"born" : "Июль 15, 1956"
"born" : "1956-07-15"
"born" : "07/15/1956"
"born" : "15/07/1956"
"born" : "Π― люблю Π°ΠΏΠ΅Π»ΡŒΡΠΈΠ½Ρ‹!"
"born" : [
  {
    "albumname" : "Flying in a Blue Dream",
    "year" : "1989",
    "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
  }, 
  {
    "albumname" : "The Extremist",
    "year" : "1992",
    "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
  },
  {
    "albumname" : "Shockwave Supernova",
    "year" : "2015",
    "genre" : "Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€ΠΎΠΊ"
  }
]
"born" : "Упс!!!"

Π”Π°, Π²Π΅Ρ€Π½ΠΎ β€” «Упс!!!Β». Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΡƒΠ΄Π° Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ.

Π­Ρ‚Π° Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒ β€” ΠΎΠ΄Π½Π° ΠΈΠ· Π²Π΅Ρ‰Π΅ΠΉ, которая Π΄Π΅Π»Π°Π΅Ρ‚ JSON Ρ‚Π°ΠΊΠΈΠΌ простым Π² использовании. Но ΠΎΠ½Π° ΠΆΠ΅ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹, ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π²Ρ‹ΡˆΠ΅. МногиС прилоТСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ JSON-Ρ„Π°ΠΉΠ»Ρ‹, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ Π±Ρ‹Π»ΠΈ Π² стандартном Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅. Но Π΄Π°ΠΆΠ΅ Ссли прилоТСния это ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°ΡŽΡ‚, людям Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π°Ρ‚ΠΎΠΉ являСтся Β«Π― люблю Π°ΠΏΠ΅Π»ΡŒΡΠΈΠ½Ρ‹!Β».

ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с JSON часто трСбуСтся Π·Π°Π΄Π°Ρ‚ΡŒ ограничСния для Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Ρ„Π°ΠΉΠ». НапримСр, Ρ‡Ρ‚ΠΎΠ±Ρ‹ всС Π΄Π°Ρ‚Ρ‹ вводились Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, скаТСм, Π“Π“Π“Π“-ММ-Π”Π”. Или ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ вводят Ρ‚ΠΎΠ»ΡŒΠΊΠΎ число Π² ΠΏΠΎΠ»Π΅ возраста.

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ схСмы

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»Π° для своих JSON-Ρ„Π°ΠΉΠ»ΠΎΠ², создав схСму, которая позволяСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, ΠΊΠ°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒΡΡ Π² ваши Ρ„Π°ΠΉΠ»Ρ‹. Π’Π°ΠΊΠΆΠ΅ схСма ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ JSON-Ρ„Π°ΠΉΠ»Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ содСрТит Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ….

НапримСр, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ΄, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΡ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ строкой.

{ "type": "string" }

Π’ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π±Π°Π·ΠΎΠ²ΠΎΠΉ схСмы JSON Schema (взят с json-schema.org).

{
  "title": "Example Schema",
  "type": "object",
  "properties": {
    "firstName": {
      "type": "string"
    },
    "lastName": {
      "type": "string"
    },
    "age": {
      "description": "Age in years",
      "type": "integer",
      "minimum": 0
    }
  },
  "required": ["firstName", "lastName"]
}

ΠœΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ эту схСму для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²Π²ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΈ возраста.

Как Π²ΠΈΠ΄ΠΈΡ‚Π΅, JSON Schema Π½Π° Π΄Π΅Π»Π΅ являСтся Ρ‚Π΅ΠΌ ΠΆΠ΅ JSON. Π’Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ всСгда Π»Π΅Π³ΠΊΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π²Π°ΠΌΠΈ: JSON Schema ΠΈΠ»ΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ JSON-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Ρ…ΠΎΡ€ΠΎΡˆΠ΅ΠΉ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΎΠΉ считаСтся Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ описания Π² Π²Π΅Ρ€Ρ…Π½Π΅ΠΉ части схСмы. Π’ΠΎΠ³Π΄Π° описаниС ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π΄ Π½Π°ΠΌΠΈ схСма JSON ΠΈ ΠΎΠ½ΠΎ ΠΏΠΎΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ, JSON Schema это ΠΈΠ»ΠΈ просто ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ JSON-Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ JSON Schema, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово $schema.

{ "$schema": "http://json-schema.org/schema#" }

Π’ Π΄Π°Π½Π½ΠΎΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ JSON Schema, написанная для Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии спСцификации.

Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ явно, ΠΊΠ°ΠΊΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ спСцификации ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅. Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ΡΡ JSON Schema, написанная для JSON Schema, чСрновая вСрсия 4.

{ "$schema": "http://json-schema.org/draft-04/schema#" }

Для создания JSON Schema ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с JSONSchema.net. Π­Ρ‚ΠΎ ΠΎΠ½Π»Π°ΠΉΠ½-инструмСнт, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ автоматичСски Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ JSON Schema ΠΈΠ· любого Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ Π²Π°ΠΌΠΈ JSON.

Автор ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹

Автор: Π™Π΅Π½ Диксон

ПослСднСС измСнСниС: 11.10.2019

Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹: Π’Π»Π°Π΄ ΠœΠ΅Ρ€ΠΆΠ΅Π²ΠΈΡ‡

Π’ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ… JSON
Ctrl+←

JSON ΠΈ XML
Ctrl+β†’

Π‘Ρ…Π΅ΠΌΠ° JSON | Π”ΠΎΠΌ JSON Schema

JSON Schema β€” это ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ позволяСт Π²Π°ΠΌ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² JSON.

ΠŸΡ€Π΅ΠΈΠΌΡƒΡ‰Π΅ΡΡ‚Π²Π° #

  • ΠžΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ….
  • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ‡Π΅Ρ‚ΠΊΡƒΡŽ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ, ΡƒΠ΄ΠΎΠ±ΠΎΡ‡ΠΈΡ‚Π°Π΅ΠΌΡƒΡŽ Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊΠΎΠΌ ΠΈ машиной.
  • ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ для:
    • АвтоматизированноС тСстированиС.
    • ΠžΠ±Π΅ΡΠΏΠ΅Ρ‡Π΅Π½ΠΈΠ΅ качСства прСдоставляСмых ΠΊΠ»ΠΈΠ΅Π½Ρ‚ΠΎΠΌ Π΄Π°Π½Π½Ρ‹Ρ….

ОбъявлСния ΠΈ запрос ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ связи: процСсс спСцификации #

  • Π’ΠΈΠΏΡ‹ носитСлСй JSON Schema ( application/schema+json ΠΈ application/schema-instance+json ) Π±ΡƒΠ΄ΡƒΡ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Ρ‹ ΠΊΠ°ΠΊ IETF RFC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΡƒΠΆΠ΅ принят Ρ€Π°Π±ΠΎΡ‡Π΅ΠΉ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ HTTP API.
  • Π‘ΡƒΠ΄ΡƒΡ‡ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ OpenJS Foundation со статусом ΠΈΠ½ΠΊΡƒΠ±Π°Ρ†ΠΈΠΈ, ΠΌΡ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ Π½Π°Π΄ нашим списком Π·Π°Π΄Π°Ρ‡ управлСния, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ€Π΅ΠΉΡ‚ΠΈ ΠΊ статусу At-Large ΠΈΠ»ΠΈ Impact.
  • Основная Ρ‡Π°ΡΡ‚ΡŒ нашСй спСцификации Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π½ΠΎΠ²ΠΎΠ³ΠΎ процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ сСйчас находится Π½Π° стадии ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ обсуТдСния. ВсСм прСдлагаСтся ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΎΡ‚Π·Ρ‹Π²! Наши Ρ†Π΅Π»ΠΈ Π² этом процСссС Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π² сСбя:
    • Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ выпускС ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΡŒΡ‚Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΠΈ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΠΈ для Π΄Π°Π²Π½ΠΎ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… аспСктов схСмы JSON.
    • Π”Π°ΠΉΡ‚Π΅ ΡΡΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ аспСкты Π±Π»ΠΈΠ·ΠΊΠΈ ΠΊ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅, Π° ΠΊΠ°ΠΊΠΈΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ.
    • ΠžΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠΉΡ‚Π΅ наши спСцификации Ρ‚Π°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ OpenAPI ΠΈ AsyncAPI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‡Π°ΡΡ‚ΡŒΡŽ Linux Foundation (Π±ΠΎΠ»Π΅Π΅ ΠΊΡ€ΡƒΠΏΠ½ΠΎΠ³ΠΎ Π·ΠΎΠ½Ρ‚ΠΈΠΊΠ°, ΠΏΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ сущСствуСт OpenJS Foundation).
  • ΠœΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°Π΅ΠΌ Π½Π°Π΄ Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°ΠΉΡ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ для стандартизации ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ указатСля JSON Π² блиТайшСм Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ. RFC IETF Π² настоящСС врСмя остаСтся Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ вСроятным ΠΏΡƒΡ‚Π΅ΠΌ, хотя Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄Π΅Ρ‚Π°Π»ΠΈ всС Π΅Ρ‰Π΅ ΠΏΡ€ΠΎΡ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ.

Π§Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ? #

Π£Ρ‡ΠΈΡ‚Π΅ΡΡŒ, ΠΏΠΎΠ»ΡƒΡ‡Π°ΠΉΡ‚Π΅ ΠΏΠΎΠΌΠΎΡ‰ΡŒ, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠΉΡ‚Π΅ сообщСство, ΠΎΠ±Ρ‰Π°ΠΉΡ‚Π΅ΡΡŒ Π² Ρ‡Π°Ρ‚Π΅ с ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ JSON Schema ΠΈ сообщСством!

πŸ‘‹ Начало Ρ€Π°Π±ΠΎΡ‚Ρ‹ Open JSON Schema SlackπŸ’¬ ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡ сообщСства

РСгулярныС занятия #

ΠœΡ‹ СТСнСдСльно ΠΏΡ€ΠΎΠ²ΠΎΠ΄ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ часы ΠΈ Π΄Π²Π° Ρ€Π°Π·Π° Π² мСсяц ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ собрания сообщСства.

πŸ§‘β€πŸ’» Часы Ρ€Π°Π±ΠΎΡ‚Ρ‹
πŸ‘· ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ собрания сообщСства

Часы Ρ€Π°Π±ΠΎΡ‚Ρ‹ β€” ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‚ΠΎΡ€Π½ΠΈΠΊ мСсяца Π² 15:00 BST ΠΈ ΠΏΠΎ ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ записи.

ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ собрания сообщСства проводятся ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ понСдСльник Π² 14:00 ΠΏΠΎ тихоокСанскому Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Если ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΈΠ· Π½ΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΡ‚ΠΌΠ΅Π½Π΅Π½ ΠΈΠ»ΠΈ пСрСнСсСн ΠΏΠΎ ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΌΡ‹ постараСмся ΠΎΠ±ΡŠΡΠ²ΠΈΡ‚ΡŒ ΠΎΠ± этом Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°Π½Π°Π» объявлСний Slack ΠΈ Twitter.
Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ наш ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ сообщСства (ΠΈ Π½Π΅ Π·Π°Π±ΡƒΠ΄ΡŒΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ часовой пояс).

НуТно большС? #

Π£ нас Π΅ΡΡ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΡ‡Π΅Π±Π½Ρ‹Π΅ рСсурсы, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡŽ Understanding JSON Schema.

Π£ нас Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ΅ ΠΈ растущСС сообщСство. ВсС ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡ‚Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒΡŽ нашСго сообщСства, ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΡΡ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΈΠ»ΠΈ просто ΠΏΠΎΠ½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ.

ΠœΡ‹ Ρ…ΠΎΡ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ нашС сообщСство Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ²Π΅Ρ‚Π»ΠΈΠ²Ρ‹ΠΌ ΠΈ ΠΈΠ½ΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΌ, поэтому, поТалуйста, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ с нашим КодСксом ΠΊΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½ΠΎΠΉ этики JSON Schema. (Π­Ρ‚ΠΎ комбинация Contributor Covenant ΠΈ IETF BCP 54.)

Команда JSON Schema ΠΈ сообщСство Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ!

Π’ любой ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒΡΡ ΠΊ Π½Π°ΡˆΠ΅ΠΌΡƒ сСрвСру Slack.

Наш сСрвСр Slack ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ, поэтому ΠΌΡ‹ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ обсуТдСния GitHub.

ΠœΡ‹ отслСТиваСм Ρ‚Π΅Π³ jsonschema Π½Π° StackOverflow.

10.06.2022: Π’Ρ‹ΠΏΡƒΡ‰Π΅Π½ выпуск исправлСния Draft 2020-12 Π±Π΅Π· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ.

НовыС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² IETF ΠΈΠΌΠ΅ΡŽΡ‚ Π²ΠΈΠ΄ draft-bhutton-*-01 .

01.02.2021: ΠžΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ 2020-12!

Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² IETF ΠΈΠΌΠ΅ΡŽΡ‚ Ρ„ΠΎΡ€ΠΌΡƒ draft-bhutton-*-00 .

ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π΄Π°Ρ‚Ρ‹ для мСтасхСм, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для опрСдСлСния повСдСния,
поэтому ΠΌΡ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΡƒΠ΄Π΅ΠΌ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° 2020-12 (Π±Π΅Π· слова Β«Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΒ») Π½Π° этом Π²Π΅Π±-сайтС.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ ΠΎΠ± ΠΈΠΌΠ΅Π½Π°Ρ… ΠΈ Π½ΡƒΠΌΠ΅Ρ€Π°Ρ†ΠΈΠΈ см. Π½Π° страницС «ВСхничСскиС характСристики».

Быстрый старт #

ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌΡ‹ΠΉ ΠΈΠ»ΠΈ описываСмый Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ JSON ΠΌΡ‹ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌ экзСмпляр , Π° Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚, содСрТащий описаниС, называСтся схСмой .

Бамая простая схСма β€” это пустой ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚, Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ ΠΈ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅ описываСт:

Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ ограничСния ΠΊ экзСмпляру, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π² схСму ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. НапримСр, ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Β«Ρ‚ΠΈΠΏΒ» ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ограничСния экзСмпляра ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, массивом, строкой, числом, логичСским Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΈΠ»ΠΈ Π½ΡƒΠ»Π΅Π²Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

 { Β«Ρ‚ΠΈΠΏΒ»: «строка» }
 

Π‘Ρ…Π΅ΠΌΠ° JSON Π³ΠΎΡ‚ΠΎΠ²Π° ΠΊ Π³ΠΈΠΏΠ΅Ρ€ΠΌΠ΅Π΄ΠΈΠ° ΠΈ идСально ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ для аннотирования ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ HTTP API Π½Π° основС JSON. Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹ схСмы JSON ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΡŽΡ‚ΡΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ URI, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ… ссылок HTTP ΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² схСмы JSON, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ рСкурсивныС опрСдСлСния.

ГипСрсхСма JSON #

Π“ΠΈΠΏΠ΅Ρ€-схСма JSON находится Π½Π° ΠΏΠ°ΡƒΠ·Π΅ / Π² настоящСС врСмя Π½Π΅ поддСрТиваСтся с 2021 Π³ΠΎΠ΄Π°.

Π­Ρ‚ΠΎ позволяСт ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎΠ΅ врСмя, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ½ΠΈ ΠΆΠ΅Ρ€Ρ‚Π²ΡƒΡŽΡ‚, Π½Π° ядрС ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ схСмы JSON.

ΠœΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ гипСрсхСмС JSON ΠΏΠΎΠ·Π΄Π½Π΅Π΅.

ЗаинтСрСсованы? ΠžΡ‚ΡŠΠ΅Π·Π΄:

  • ПониманиС схСмы JSON
  • БпСцификация
  • Π£Ρ‡Π΅Π±Π½Ρ‹Π΅ рСсурсы
  • растущий список ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ обСспСчСния JSON Schema

ΠœΡ‹ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌ ΠΏΠΎ возмоТности ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Π΄ΠΎ послСднСй спСцификации, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π΄ΠΎ вСрсии 2020-12.

Вопросы? ЧувствуСтС сСбя ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΌ? ΠŸΡ€ΠΈΡΠΎΠ΅Π΄ΠΈΠ½ΡΠΉΡ‚Π΅ΡΡŒ:

  • GitHub
  • ΠžΠ±ΡΡƒΠΆΠ΄Π΅Π½ΠΈΡ GitHub
  • Π“Ρ€ΡƒΠΏΠΏΡ‹ Google
  • Π‘Π»Π°Π±Ρ‹ΠΉ
  • ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²

ПошаговоС руководство ΠΏΠΎ Π½Π°Ρ‡Π°Π»Ρƒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ | Π‘Ρ…Π΅ΠΌΠ° JSON

  • Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅
  • Запуск схСмы
  • ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойств
  • Π£Π³Π»ΡƒΠ±Π»Π΅Π½ΠΈΠ΅ свойств
  • Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ…
  • Бсылки Π²Π½Π΅ схСмы
  • ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ Π΄Π°Π½Π½Ρ‹Ρ… для нашСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ схСмы JSON

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ #

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½ΠΈ Π² ΠΊΠΎΠ΅ΠΌ случаС Π½Π΅ являСтся ΠΎΠΊΠΎΠ½Ρ‡Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ для всСх Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ схСма JSON. Для этого Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΡƒΠ³Π»ΡƒΠ±ΠΈΡ‚ΡŒΡΡ Π² саму ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ β€” ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ Π½Π° https://json-schema.org/specification.html.

Π”Π°Π²Π°ΠΉΡ‚Π΅ прСдставим, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ взаимодСйствуСм с ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ΠΎΠΌ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚ΠΎΠ² Π½Π° основС JSON. Π’ этом ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π΅Ρ‚:

  • Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€: productId
  • НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°: productName
  • Π‘Ρ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ΄Π°ΠΆΠΈ для потрСбитСля: Ρ†Π΅Π½Π°
  • Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ Ρ‚Π΅Π³ΠΎΠ²: Ρ‚Π΅Π³ΠΎΠ² .

НапримСр:

 {
  "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°": 1,
  "productName": "ЗСлСная Π΄Π²Π΅Ρ€ΡŒ",
  "Ρ†Π΅Π½Π°": 12.50,
  "Ρ‚Π΅Π³ΠΈ": [ "Π΄ΠΎΠΌ", "Π·Π΅Π»Π΅Π½Ρ‹ΠΉ" ]
}
 

НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π² Ρ†Π΅Π»ΠΎΠΌ прост, Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ вопросы ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌΠΈ. Π’ΠΎΡ‚ лишь Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ…:

  • Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ productId ?
  • ВрСбуСтся Π»ΠΈ productName ?
  • ΠœΠΎΠΆΠ΅Ρ‚ Π»ΠΈ Ρ†Π΅Π½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π²Π½ΠΎΠΉ Π½ΡƒΠ»ΡŽ (0)?
  • Π―Π²Π»ΡΡŽΡ‚ΡΡ Π»ΠΈ всС Ρ‚Π΅Π³ΠΎΠ² строковыми значСниями ?

Когда Π²Ρ‹ Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚Π΅ ΠΎ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡ΠΈ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ допустимыС Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ для этих ΠΊΠ»ΡŽΡ‡Π΅ΠΉ. JSON-схСма β€” это ΠΏΡ€Π΅Π΄Π»Π°Π³Π°Π΅ΠΌΡ‹ΠΉ стандарт IETF, ΠΊΠ°ΠΊ ΠΎΡ‚Π²Π΅Ρ‡Π°Ρ‚ΡŒ Π½Π° эти вопросы для Π΄Π°Π½Π½Ρ‹Ρ….

Запуск схСмы #

Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ схСмы, Π΄Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Ρ‡Π½Π΅ΠΌ с Π±Π°Π·ΠΎΠ²ΠΎΠΉ схСмы JSON.

ΠœΡ‹ Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΠΌ с Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… свойств, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Ρ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами , ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½Ρ‹ Π² Π²ΠΈΠ΄Π΅ ΠΊΠ»ΡŽΡ‡Π΅ΠΉ JSON.

Π”Π°. стандарт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ Π΄Π°Π½Π½Ρ‹Ρ… JSON для описания Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‡Π°Ρ‰Π΅ всСго, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ… JSON, Π½ΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Π² любом количСствС Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² ΠΊΠΎΠ½Ρ‚Π΅Π½Ρ‚Π°, Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ тСкст/xml .

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово $schema ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ эта схСма написана Π² соотвСтствии с ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠΌ стандарта ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΠΎ Ρ€Π°Π·Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ для контроля вСрсий.
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово $id опрСдСляСт URI для схСмы ΠΈ Π±Π°Π·ΠΎΠ²Ρ‹ΠΉ URI, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°ΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ссылки URI Π² схСмС.
  • ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈ описания Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠΏΠΈΡΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Они Π½Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ ΠΊ провСряСмым Π΄Π°Π½Π½Ρ‹ΠΌ. НазначСниС схСмы указываСтся с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этих Π΄Π²ΡƒΡ… ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов.
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° опрСдСляСт ΠΏΠ΅Ρ€Π²ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ для Π½Π°ΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ… JSON, ΠΈ Π² этом случаС это Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ JSON.
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚"
}
 

ΠŸΡ€ΠΈ запускС схСмы ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Ρ‹:

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово схСмы: $schema ΠΈ $id .
  • Аннотации схСмы: Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΈ описаниС .
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: Π²Π²Π΅Π΄ΠΈΡ‚Π΅ .

ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ свойств #

productId β€” числовоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ΄Π½ΠΎΠ·Π½Π°Ρ‡Π½ΠΎ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π’Π°ΠΊ ΠΊΠ°ΠΊ это каноничСский ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°, Π±Π΅Π· Π½Π΅Π³ΠΎ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ смысла ΠΈΠΌΠ΅Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚, поэтому ΠΎΠ½ обязатСлСн.

Π’ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… схСмы JSON ΠΌΡ‹ обновляСм Π½Π°ΡˆΡƒ схСму, добавляя:

  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ свойств .
  • ΠšΠ»ΡŽΡ‡ productId .
    • описаниС аннотация схСмы ΠΈ Ρ‚ΠΈΠΏ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ β€” ΠΌΡ‹ рассмотрСли ΠΎΠ±Π° ΠΈΠ· Π½ΠΈΡ… Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ Ρ€Π°Π·Π΄Π΅Π»Π΅.
  • трСбуСтся ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, ΠΏΠ΅Ρ€Π΅Ρ‡ΠΈΡΠ»ΡΡŽΡ‰Π΅Π΅ productId .
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
    }
  },
  "трСбуСтся": [ "ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°" ]
}
 
  • productName β€” строковоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰Π΅Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚. Π’Π°ΠΊ ΠΊΠ°ΠΊ Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π΅ ΠΌΠ°Π»ΠΎ Ρ‡Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π±Π΅Π· ΠΈΠΌΠ΅Π½ΠΈ, ΠΎΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ.
  • ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ прСдставляСт собой массив строк, ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ нСсколько ΠΊΠ»ΡŽΡ‡Π΅ΠΉ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ нСобходимости; Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ productName .
  • На самом Π΄Π΅Π»Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ productId ΠΈ productName β€” ΠΌΡ‹ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ ΠΎΠ±Π° для ΠΏΠΎΠ»Π½ΠΎΡ‚Ρ‹ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρ‹, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹, Π° люди ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΎΠ±Ρ€Π°Ρ‰Π°ΡŽΡ‚ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΈΠΌΠ΅Π½Π°.
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
    },
    "Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°",
      "Ρ‚ΠΈΠΏ": "строка"
    }
  },
  "трСбуСтся": [ "productId", "productName" ]
}
 

УглубляСмся Π² свойства #

По словам Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° бСсплатных Ρ‚ΠΎΠ²Π°Ρ€ΠΎΠ² Π½Π΅Ρ‚. πŸ˜‰

  • ΠšΠ»ΡŽΡ‡ Ρ†Π΅Π½Π° добавляСтся с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌ описаниСм Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠ΅ΠΉ схСмы ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, рассмотрСнных Ρ€Π°Π½Π΅Π΅. Он Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ Π² массив ΠΊΠ»ΡŽΡ‡Π΅ΠΉ, опрСдСляСмый ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌ словом required validation.
  • Π£ΠΊΠ°Π·Ρ‹Π²Π°Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ†Π΅Π½Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Ρ‡Π΅ΠΌ-Ρ‚ΠΎ ΠΎΡ‚Π»ΠΈΡ‡Π½Ρ‹ΠΌ ΠΎΡ‚ нуля, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉΠœΠΈΠ½ΠΈΠΌΡƒΠΌ .
    • Если Π±Ρ‹ ΠΌΡ‹ Ρ…ΠΎΡ‚Π΅Π»ΠΈ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ноль Π² качСствС Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ†Π΅Π½Ρ‹, ΠΌΡ‹ Π±Ρ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ минимальноС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ .
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
    },
    "Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°",
      "Ρ‚ΠΈΠΏ": "строка"
    },
    "Ρ†Π΅Π½Π°": {
      "description": "Π¦Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "число",
      "ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ": 0
    }
  },
  "ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ": [ "productId", "productName", "price" ]
}
 

Π”Π°Π»Π΅Π΅ ΠΌΡ‹ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΠΌ ΠΊ Ρ‚Π΅Π³Π°ΠΌ ΠΊΠ»ΡŽΡ‡Ρƒ.

Π’Π»Π°Π΄Π΅Π»Π΅Ρ† ΠΌΠ°Π³Π°Π·ΠΈΠ½Π° сказал ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅:

  • Если Π΅ΡΡ‚ΡŒ Π±ΠΈΡ€ΠΊΠΈ, Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄Π½Π° Π±ΠΈΡ€ΠΊΠ°,
  • ВсС Ρ‚Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ; отсутствиС дублирования Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°.
  • ВсС Ρ‚Π΅Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ тСкстовыми.
  • Π’Π΅Π³ΠΈ

  • Ρ…ΠΎΡ€ΠΎΡˆΠΈ, Π½ΠΎ ΠΈΡ… Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ:

  • ΠšΠ»ΡŽΡ‡ tags добавляСтся с ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΌΠΈ аннотациями ΠΈ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹ΠΌΠΈ словами.
  • На этот Ρ€Π°Π· ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ type β€” array .
  • ΠœΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ элСмСнтов , Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΡ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ появляСтся Π² массивС. Π’ этом случаС: строк Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° .
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ minItems ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ±Π΅Π΄ΠΈΡ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ Π² массивС Π΅ΡΡ‚ΡŒ хотя Π±Ρ‹ ΠΎΠ΄ΠΈΠ½ элСмСнт.
  • ΠšΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ uniqueItems ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС элСмСнты Π² массивС Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°.
  • ΠœΡ‹ Π½Π΅ Π΄ΠΎΠ±Π°Π²ΠΈΠ»ΠΈ этот ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Ρ€Π΅Π±ΡƒΠ΅ΠΌΡ‹ΠΉ массив ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Ρ… слов ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ , ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ являСтся Π½Π΅ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ.
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
    },
    "Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°",
      "Ρ‚ΠΈΠΏ": "строка"
    },
    "Ρ†Π΅Π½Π°": {
      "description": "Π¦Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "число",
      "ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ": 0
    },
    "Ρ‚Π΅Π³ΠΈ": {
      "description": "Π’Π΅Π³ΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "массив",
      "ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": {
        "Ρ‚ΠΈΠΏ": "строка"
      },
      "ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡ‹": 1,
      "ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": ΠΏΡ€Π°Π²Π΄Π°
    }
  },
  "ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ": [ "productId", "productName", "price" ]
}
 

Π’Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ… #

Π”ΠΎ этого ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΌΡ‹ ΠΈΠΌΠ΅Π»ΠΈ Π΄Π΅Π»ΠΎ с ΠΎΡ‡Π΅Π½ΡŒ плоской схСмой β€” всСго ΠΎΠ΄ΠΈΠ½ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ. Π’ этом Ρ€Π°Π·Π΄Π΅Π»Π΅ Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ структуры Π΄Π°Π½Π½Ρ‹Ρ….

  • ΠšΠ»ΡŽΡ‡ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ с использованиСм ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΠ»ΠΈ Ρ€Π°Π½Π΅Π΅. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Ρ‚ΠΈΠΏΠ° являСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ , ΠΌΡ‹ ΠΌΠΎΠΆΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ свойств для опрСдСлСния Π²Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠΉ структуры Π΄Π°Π½Π½Ρ‹Ρ….
    • ΠœΡ‹ опустили описаниС ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово Π°Π½Π½ΠΎΡ‚Π°Ρ†ΠΈΠΈ для краткости Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅. Π₯отя ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚ΠΈΡ‚Π΅Π»ΡŒΠ½Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ Π°Π½Π½ΠΎΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Π² этом случаС структура ΠΈ ΠΈΠΌΠ΅Π½Π° ΠΊΠ»ΡŽΡ‡Π΅ΠΉ Ρ…ΠΎΡ€ΠΎΡˆΠΎ Π·Π½Π°ΠΊΠΎΠΌΡ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ².
  • Π’Ρ‹ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ³ΠΎ слова ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΏΡ€ΠΈΠΌΠ΅Π½ΠΈΠΌΠ° ΠΊ ΠΊΠ»ΡŽΡ‡Ρƒ ΠΈΠ·ΠΌΠ΅Ρ€Π΅Π½ΠΈΠΉ ΠΈ Π½Π΅ Π²Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ Π·Π° Π΅Π³ΠΎ ΠΏΡ€Π΅Π΄Π΅Π»Ρ‹.
 {
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://example.com/product.schema.json",
  "Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
  "description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
    },
    "Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°": {
      "description": "НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°",
      "Ρ‚ΠΈΠΏ": "строка"
    },
    "Ρ†Π΅Π½Π°": {
      "description": "Π¦Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "число",
      "ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ": 0
    },
    "Ρ‚Π΅Π³ΠΈ": {
      "description": "Π’Π΅Π³ΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°",
      "Ρ‚ΠΈΠΏ": "массив",
      "ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": {
        "Ρ‚ΠΈΠΏ": "строка"
      },
      "ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡ‹": 1,
      "ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": ΠΏΡ€Π°Π²Π΄Π°
    },
    "Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹": {
      "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
      "характСристики": {
        "Π΄Π»ΠΈΠ½Π°": {
          "Ρ‚ΠΈΠΏ": "число"
        },
        "ΡˆΠΈΡ€ΠΈΠ½Π°": {
          "Ρ‚ΠΈΠΏ": "число"
        },
        "высота": {
          "Ρ‚ΠΈΠΏ": "число"
        }
      },
      «трСбуСтся»: [ Β«Π΄Π»ΠΈΠ½Π°Β», Β«ΡˆΠΈΡ€ΠΈΠ½Π°Β», «высота»]
    }
  },
  "ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ": [ "productId", "productName", "price" ]
}
 

Бсылки Π²Π½Π΅ схСмы #

Π”ΠΎ сих ΠΏΠΎΡ€ наша схСма JSON Π±Ρ‹Π»Π° ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ Π°Π²Ρ‚ΠΎΠ½ΠΎΠΌΠ½ΠΎΠΉ. ΠžΡ‡Π΅Π½ΡŒ распространСно совмСстноС использованиС схСмы JSON Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… структурах Π΄Π°Π½Π½Ρ‹Ρ… для ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎΠ³ΠΎ использования, удобства чтСния ΠΈ обслуТивания, срСди ΠΏΡ€ΠΎΡ‡ΠΈΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½.

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΌΡ‹ Π²Π²ΠΎΠ΄ΠΈΠΌ Π½ΠΎΠ²Ρ‹ΠΉ рСсурс схСмы JSON ΠΈ для ΠΎΠ±ΠΎΠΈΡ… свойств Π² Π½Π΅ΠΌ:

  • ΠœΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ , ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Π½ΠΎΠ΅ Ρ€Π°Π½Π΅Π΅.
  • ДобавляСм максимум ΠΊΠ»ΡŽΡ‡Π΅Π²ΠΎΠ΅ слово ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.
  • Π’ совокупности ΠΎΠ½ΠΈ Π΄Π°ΡŽΡ‚ Π½Π°ΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ.
 {
  "$id": "https://example.com/geographical-location.schema.json",
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "title": "Π”ΠΎΠ»Π³ΠΎΡ‚Π° ΠΈ ΡˆΠΈΡ€ΠΎΡ‚Π°",
  "description": "ГСографичСская ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Π° Π½Π° ΠΏΠ»Π°Π½Π΅Ρ‚Π΅ (Ρ‡Π°Ρ‰Π΅ всСго ЗСмля).",
  «трСбуСтся»: [ Β«ΡˆΠΈΡ€ΠΎΡ‚Π°Β», Β«Π΄ΠΎΠ»Π³ΠΎΡ‚Π°Β» ],
  "Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
  "характСристики": {
    "ΡˆΠΈΡ€ΠΎΡ‚Π°": {
      "Ρ‚ΠΈΠΏ": "число",
      "ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ": -90,
      "максимум": 90
    },
    "Π΄ΠΎΠ»Π³ΠΎΡ‚Π°": {
      "Ρ‚ΠΈΠΏ": "число",
      Β«ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΒ»: -180,
      "максимум": 180
    }
  }
}
 

Π—Π°Ρ‚Π΅ΠΌ ΠΌΡ‹ добавляСм ссылку Π½Π° эту Π½ΠΎΠ²ΡƒΡŽ схСму, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π±Ρ‹Π»ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ.

 {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"Π½Π°Π·Π²Π°Π½ΠΈΠ΅": "Π’ΠΎΠ²Π°Ρ€",
"description": "Π’ΠΎΠ²Π°Ρ€ ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° Acme",
"Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
"характСристики": {
"Код Ρ‚ΠΎΠ²Π°Ρ€Π°": {
"description": "Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‚ΠΎΠ²Π°Ρ€Π°",
"Ρ‚ΠΈΠΏ": "Ρ†Π΅Π»ΠΎΠ΅ число"
},
"Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ Ρ‚ΠΎΠ²Π°Ρ€Π°": {
"description": "НазваниС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Π°",
"Ρ‚ΠΈΠΏ": "строка"
},
"Ρ†Π΅Π½Π°": {
"description": "Π¦Π΅Π½Π° Ρ‚ΠΎΠ²Π°Ρ€Π°",
"Ρ‚ΠΈΠΏ": "число",
"ΡΠΊΡΠΊΠ»ΡŽΠ·ΠΈΠ²Π½Ρ‹ΠΉ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ": 0
},
"Ρ‚Π΅Π³ΠΈ": {
"description": "Π’Π΅Π³ΠΈ Ρ‚ΠΎΠ²Π°Ρ€Π°",
"Ρ‚ΠΈΠΏ": "массив",
"ΠŸΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": {
"Ρ‚ΠΈΠΏ": "строка"
},
"ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡ‹": 1,
"ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€Π΅Π΄ΠΌΠ΅Ρ‚Ρ‹": ΠΏΡ€Π°Π²Π΄Π°
},
"Π“Π°Π±Π°Ρ€ΠΈΡ‚Π½Ρ‹Π΅ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹": {
"Ρ‚ΠΈΠΏ": "ΠΎΠ±ΡŠΠ΅ΠΊΡ‚",
"характСристики": {
"Π΄Π»ΠΈΠ½Π°": {
"Ρ‚ΠΈΠΏ": "число"
},
"ΡˆΠΈΡ€ΠΈΠ½Π°": {
"Ρ‚ΠΈΠΏ": "число"
},
"высота": {
"Ρ‚ΠΈΠΏ": "число"
}
},
«трСбуСтся»: [ Β«Π΄Π»ΠΈΠ½Π°Β», Β«ΡˆΠΈΡ€ΠΈΠ½Π°Β», «высота»]
},
"ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ склада": {
"description": "ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ склада, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ находится Ρ‚ΠΎΠ²Π°Ρ€.

This entry was posted in ΠŸΠΎΠΏΡƒΠ»ΡΡ€Π½ΠΎΠ΅