
рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рдХрдИ рддрд░реАрдХреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдЯреАрдо рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдПрдХ рд╣реА рд╕реЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдордирд╛ рдХрд░рддреА рд╣реИ: рд╕рд╛рдордиреЗ рдФрд░ рдкреАрдЫреЗ рдХреА рдЬрд┐рдореНрдореЗрджрд╛рд░рд┐рдпреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рддрд░реНрдХ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдП - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдЯрд╛ рдХреЛ рдорд╛рдиреНрдп рдХрд░рддреЗ рд╕рдордп, рдЬреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдХреИрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреЗ рдмреАрдЪ рдкрд╛рд░рджрд░реНрд╢реА рдкрд░рд┐рд╡рд╣рди рдФрд░ рдХреЛрдб рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ред
рд╣рдорд╛рд░реА рд░рд╛рдп рдореЗрдВ, рд╣рдо рдЬрдЯрд┐рд▓рддрд╛ рдФрд░ рд▓рд╛рдн рдореЗрдВ рд╕рдВрддреБрд▓рд┐рдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗ, рдЬрд┐рд╕реЗ рд╣рдо рд╕рд┐рдореНрдлрдиреА рдФрд░ рд░рд┐рдПрдХреНрдЯ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЙрддреНрдкрд╛рджрди рдореЗрдВ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдПрдХ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╡реЗрдм рдЙрддреНрдкрд╛рдж рдореЗрдВ рдмреИрдХрдПрдВрдб рдПрдкреАрдЖрдИ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдкреНрд░рд╛рд░реВрдк рд╣рдо рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЬрдЯрд┐рд▓ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╢рд╛рдорд┐рд▓ рд╣реИрдВ?
- SWAGGER рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдФрд░ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдбрд┐рдмрдЧрд┐рдВрдЧ рдЙрдкрдХрд░рдг рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд┐рдореНрдлрдиреА рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ рдЬреЛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ JSON рд╕реНрдХреАрдорд╛ рдмреЗрд╣рддрд░ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓реЗ;
- JSON рд╕реНрдХреАрдорд╛ - рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдлреНрд░рдВрдЯ-рдПрдВрдб рдбреЗрд╡рд▓рдкрд░реНрд╕ рджреНрд╡рд╛рд░рд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЙрдирдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдереЗ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рдереЗред рдЗрд╕рд╕реЗ рд╣рдорд╛рд░реА рдкрд╕рдВрдж рддрдп рд╣реБрдИред рдкреНрд░рд╛рд░реВрдк рдЖрдкрдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдХреА рдЬрд╛ рд╕рдХрдиреЗ рд╡рд╛рд▓реА рдкреНрд░рд╛рдердорд┐рдХ рдЬрд╛рдВрдЪ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдкреНрд░рд▓реЗрдЦрди рднреА рд╣реИ рдЬреЛ рдпреЛрдЬрдирд╛ рдХреЗ рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ;
- GraphQL рдмрд╣реБрдд рдпреБрд╡рд╛ рд╣реИред рдЗрддрдиреЗ рд╕рд╛рд░реЗ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдФрд░ рдлреНрд░рдВрдЯреЗрдВрдб рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдирд╣реАрдВред рдЬрд┐рд╕ рд╕рдордп рдкреНрд░рдгрд╛рд▓реА рдмрдирд╛рдИ рдЧрдИ рдереА, рдЙрд╕ рд╕рдордп рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛, рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рд▓реЗрдЦ рд╣реЛрдЧрд╛;
- SOAP - рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рд╕рдЦреНрдд рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╣реИ, рдкреНрд░рд▓реЗрдЦрди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореЛрд░реНрдЪреЗ рдХреЗ рд╕рд╛рде рджреЛрд╕реНрдд рдмрдирд╛рдирд╛ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИред рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╣реА рдкреНрд░рдпреЛрдЧ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рд░рд╛рд╢рд┐ рдХреЗ рд▓рд┐рдП SOAP рдореЗрдВ рдЕрдзрд┐рдХ рдУрд╡рд░рд╣реЗрдб рднреА рд╣реИ;
рдЗрди рд╕рднреА рд╕реНрд╡рд░реВрдкреЛрдВ рдиреЗ рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдХрд╡рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЕрдкрдирд╛ рд╣рд╛рд░реНрд╡реЗрд╕реНрдЯрд░ рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред рдПрдХ рд╕рдорд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рднрд╛рд╡реА рд╕рдорд╛рдзрд╛рди рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЬреЛрдЦрд┐рдо рд╡рд╣рди рдХрд░рддрд╛ рд╣реИ:
- рдХреАрдбрд╝реЗ рдХреА рдЙрдЪреНрдЪ рд╕рдВрднрд╛рд╡рдирд╛;
- рдЕрдХреНрд╕рд░ 100% рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╡рд░реЗрдЬ рдирд╣реАрдВ;
- рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдПрдкреАрдЖрдИ рдХреА рдирд┐рдХрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг рдирд┐рдореНрди "рдкреНрд░рддрд┐рд░реВрдкрдХрддрд╛"ред рдЖрдорддреМрд░ рдкрд░, рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рдорд╛рдзрд╛рди рдПрдХ рдореЛрдиреЛрд▓рд┐рде рдХреЗ рддрд╣рдд рд▓рд┐рдЦреЗ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдШрдЯрдХреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рд╕реНрддреБ рдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ (рд╡рд┐рдХрд╛рд╕ рдХреА рд▓рд╛рдЧрдд рдкрдврд╝реЗрдВ);
- рдирдП рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдХрд╛ рдЙрдЪреНрдЪ рд╕реНрддрд░ред рдПрдХ рд╕рд╛рдЗрдХрд┐рд▓ рдХреА рд╕рднреА рд╢реАрддрд▓рддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ;
рдЗрд╕рд▓рд┐рдП, рдирд┐рдпрдо рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдФрд░ рд╕реНрдерд┐рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ (рдЬреИрд╕реЗ npm рд╕реЗ рдмрд╛рдПрдВ-рдкреИрдб) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реИ - рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХреЛрдб рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдХрднреА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рд╣реИред рд░рд╛рдордмрд▓рд░ рдЧреНрд░реБрдк рдХреА рд╡рд┐рдЬреНрдЮрд╛рдкрди рддрдХрдиреАрдХреЛрдВ рдореЗрдВ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмреИрдХрдПрдВрдб рдХрд╛ рд╡рд┐рдХрд╛рд╕ рд╕рд┐рдореНрдлрдиреА рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдврд╛рдВрдЪреЗ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдШрдЯрдХреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдиреАрдЪреЗ рд╣рдо рдореБрдЦреНрдп рднрд╛рдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд╛рд░реНрдп рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ -
рд╕рд┐рдореНрдлрдиреА рд░реВрдк ред рдлреНрд░рдВрдЯ рд░рд┐рдПрдХреНрдЯ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ WEB рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП JSON рд╕реНрдХреАрдорд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рддрд╛ рд╣реИ -
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ JSON рд╕реНрдХреАрдорд╛ рдлреЙрд░реНрдо ред
рдХрд╛рдо рдХреА рд╕рд╛рдорд╛рдиреНрдп рдпреЛрдЬрдирд╛:

рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрдИ рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рдкреНрд░рд▓реЗрдЦрди рдмреЙрдХреНрд╕ рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ - рдлрд┐рд░ рд╕реЗ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░;
- рд╕рднреА рдкреНрд░реЗрд╖рд┐рдд рдбреЗрдЯрд╛ рдЯрд╛рдЗрдк рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ;
- рдмреБрдирд┐рдпрд╛рджреА рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ;
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдХрд╛ рддреЗрдЬреА рд╕реЗ рдПрдХреАрдХрд░рдг - рдореЛрдЬрд╝рд┐рд▓рд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ JSON рд╕реНрдХреАрдорд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдХрд╛рд░рдг; - рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдПрдХреАрдХрд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреЙрдХреНрд╕ рд╕реЗ рдлреНрд░рдВрдЯ-рдПрдВрдб рд╡реЗрдм рдШрдЯрдХреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛;
- рддрд╛рд░реНрдХрд┐рдХ рд╕рдореВрд╣реАрдХрд░рдг, HTML рддрддреНрд╡реЛрдВ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рдФрд░ рд╕рдВрднрд╛рд╡рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рднреА рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдПрдХ рдмрд┐рдВрджреБ рдкрд░ рдирд┐рдпрдВрддреНрд░рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ - рдмреИрдХрдПрдВрдб рдкрд░, рдХреЛрдб рдХрд╛ рдХреЛрдИ рджреЛрд╣рд░рд╛рд╡ рдирд╣реАрдВ рд╣реИ;
- рдпрд╣ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рд░рд▓ рд╣реИ - рд╡реНрдпреВ рднрд╛рдЧ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг (рдкрд┐рдЫрд▓реЗ рдкреИрд░рд╛ рджреЗрдЦреЗрдВ) рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рд┐рдПрдХреНрдЯ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рдмрдЬрд╛рдп, рдПрдВрдбреНрд░реЙрдЗрдб рдпрд╛ рдЖрдИрдУрдПрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ;
рдЖрдЗрдП рдШрдЯрдХреЛрдВ рдФрд░ рдЙрдирдХреА рдмрд╛рддрдЪреАрдд рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рджреЗрдЦреЗрдВред
рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ,
JSON рд╕реНрдХреАрдорд╛ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдЖрджрд┐рдо рдЬрд╛рдВрдЪреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпреЛрдЬрдирд╛ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧреЛрдВ рдХреЛ рдмрд╛рдВрдзрдирд╛ рдпрд╛ рдЯрд╛рдЗрдк рдХрд░рдирд╛:
const schema = { "title": "A registration form", "description": "A simple form example.", "type": "object", "required": [ "firstName", "lastName" ], "properties": { "firstName": { "type": "string", "title": "First name" }, "lastName": { "type": "string", "title": "Last name" }, "password": { "type": "string", "title": "Password", "minLength": 3 }, "telephone": { "type": "string", "title": "Telephone", "minLength": 10 } } }
рдлреНрд░рдВрдЯ-рдПрдВрдб рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд▓реЛрдХрдкреНрд░рд┐рдп
рд░рд┐рдПрдХреНрд╢рди JSON рд╕реНрдХреАрдорд╛ рдлреЙрд░реНрдо рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП
JSON рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдРрдб-рдСрди рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИ:
uiSchema - JSON рд╕реНрдХреАрдорд╛ рд╕реНрд╡рдпрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреЛ <input ... /> рдпрд╛ <textarea ... /> рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпреЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВ, рдЗрд╕ рдмрд╛рдд рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЪрд┐рддреНрд░ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред UiSchema рдЗрди рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЛ рднреА рдмрддрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд JSON рд╕реНрдХреАрдорд╛ рдХреЗ рд▓рд┐рдП, рдЖрдк рдирд┐рдореНрди uiSchema рдХреЗ рд╡рд┐рдЬрд╝реБрдЕрд▓ рд╡реЗрдм рдШрдЯрдХ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
const uiSchema = { "firstName": { "ui:autofocus": true, "ui:emptyValue": "" }, "age": { "ui:widget": "updown", "ui:title": "Age of person", "ui:description": "(earthian year)" }, "bio": { "ui:widget": "textarea" }, "password": { "ui:widget": "password", "ui:help": "Hint: Make it strong!" }, "date": { "ui:widget": "alt-datetime" }, "telephone": { "ui:options": { "inputType": "tel" } } }
рд▓рд╛рдЗрд╡ рдкреНрд▓реЗрдЧреНрд░рд╛рдЙрдВрдб рдХрд╛ рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред
рдпреЛрдЬрдирд╛ рдХреЗ рдЗрд╕ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде, рдлреНрд░рдВрдЯ-рдПрдВрдб рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЛ рдорд╛рдирдХ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдШрдЯрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрдИ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
render(( <Form schema={schema} uiSchema={uiSchema} /> ), document.getElementById("app"));
рдпрджрд┐ рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдХреЗ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдирдХ рд╡рд┐рдЬреЗрдЯ рдЖрдкрдХреЛ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЛ рдЕрдиреБрдХреВрд▓рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдХреБрдЫ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк uiSchema рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдЦрди рдХреЗ рд╕рдордп,
рд╕реНрдЯреНрд░рд┐рдВрдЧ ,
рд╕рдВрдЦреНрдпрд╛ ,
рдкреВрд░реНрдгрд╛рдВрдХ ,
рдмреВрд▓рд┐рдпрди рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред
рдлреЙрд░реНрдордбреЗрдЯрд╛ - рдореЗрдВ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
{ "firstName": "Chuck", "lastName": "Norris", "age": 78, "bio": "Roundhouse kicking asses since 1940", "password": "noneed" }
рдкреНрд░рддрд┐рдкрд╛рджрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╡рд┐рдЧреЗрдЯреНрд╕ рдЗрд╕ рдбреЗрдЯрд╛ рд╕реЗ рднрд░ рдЬрд╛рдПрдВрдЧреЗ - рд╕рдВрдкрд╛рджрди рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА, рд╕рд╛рде рд╣реА рдХреБрдЫ рдХрд╕реНрдЯрдо рддрдВрддреНрд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ рд╕рдВрдмрдВрдзрд┐рдд рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЬрдЯрд┐рд▓ рд░реВрдкреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдерд╛, рдЬреЛ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рд╣реИрдВред
рдЖрдк
рдкреНрд▓рдЧрдЗрди рдкреГрд╖реНрда рдкрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рднреА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЗрди рддреАрди рд╡рд░реНрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдкреВрд░реНрдг рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХрдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
рддреНрд░реБрдЯрд┐рдпрд╛рдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдмреИрдХрдПрдВрдб рдЪреЗрдХ рдХреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рднреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдФрд░ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдпрд╛ рддреЛ рд╕рд░рд▓ рд╕рддреНрдпрд╛рдкрди рд╡рд╛рд▓реЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╕рдордп рд▓реЙрдЧрд┐рди рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛, рдпрд╛ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╡рд╛рд▓реЗ - рдЕрд░реНрдерд╛рддред рд╣рдореЗрдВ рдЙрдирдХреА (рддреНрд░реБрдЯрд┐рдпреЛрдВ) рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╕реВрдЪрдирд╛рдУрдВ рдХреЗ рдЧреНрд░рдВрдереЛрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рд▓реЛрдЧреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рддреНрд░реБрдЯрд┐рдпрд╛рдВ рдЕрдиреБрднрд╛рдЧ рдбреЗрдЯрд╛ рд╕реЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ - рдкреНрд░рддреНрдпреЗрдХ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП, рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдпрд╣рд╛рдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ
рдХреНрд░рд┐рдпрд╛ ,
рд╡рд┐рдзрд┐ - рдмреИрдХрдПрдВрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ HTTP рд╡рд┐рддрд░рдг рдкрджреНрдзрддрд┐ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдмреИрдХрдПрдВрдб рдХрд╛ URL рдерд╛ред
рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЖрдЧреЗ рдФрд░ рдкреАрдЫреЗ рдХреЗ рдмреАрдЪ рд╕рдВрдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрднрд╛рдЧреЛрдВ рдХреЗ рд╕рд╛рде json рдорд┐рд▓рд╛:
{ "action": "https://...", "method": "POST", "errors":{}, "schema":{}, "formData":{}, "uiSchema":{} }
рд▓реЗрдХрд┐рди рдмреИрдХрдПрдВрдб рдкрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд░реЗрдВ? рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд╕рдордп, рдХреЛрдИ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдирд╣реАрдВ рдереЗ рдЬреЛ рдЖрдкрдХреЛ рд╕рд┐рдореНрдлрдиреА рдлреЙрд░реНрдо рдХреЛ JSON рд╕реНрдХреАрдорд╛ рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рдереЗред рдЕрдм рд╡реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджрд┐рдЦрд╛рдИ рджрд┐рдП рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рдХрдорд┐рдпрд╛рдВ рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
LiformBundle JSON рд╕реНрдХреАрдорд╛ рдХреА рдХрд╛рдлреА рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреЗ рд╡рд┐рд╡реЗрдХ рдкрд░ рдорд╛рдирдХ рдХреЛ рдмрджрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореБрдЭреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд▓рд┐рдЦрдирд╛ рдкрдбрд╝рд╛ред
рдкреАрдврд╝реА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдорд╛рдирдХ
рд╕рд┐рдореНрдлрдиреА рдлреЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдпрд╣ рдмрд┐рд▓реНрдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:
рдлрд╛рд░реНрдо рдХрд╛ рдЙрджрд╛рд╣рд░рдг $builder ->add('title', TextType::class, [ 'label' => 'label.title', 'attr' => [ 'title' => 'title.title', ], ]) ->add('description', TextareaType::class, [ 'label' => 'label.description', 'attr' => [ 'title' => 'title.description', ], ]) ->add('year', ChoiceType::class, [ 'choices' => range(1981, 1990), 'choice_label' => function ($val) { return $val; }, 'label' => 'label.year', 'attr' => [ 'title' => 'title.year', ], ]) ->add('genre', ChoiceType::class, [ 'choices' => [ 'fantasy', 'thriller', 'comedy', ], 'choice_label' => function ($val) { return 'genre.choice.'.$val; }, 'label' => 'label.genre', 'attr' => [ 'title' => 'title.genre', ], ]) ->add('available', CheckboxType::class, [ 'label' => 'label.available', 'attr' => [ 'title' => 'title.available', ], ]);
рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рдпрд╣ рдлрд╝реЙрд░реНрдо рдлрд╝реЙрд░реНрдо рдХреЗ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:
JsonSchema рдЙрджрд╛рд╣рд░рдг { "action": "//localhost/create.json", "method": "POST", "schema": { "properties": { "title": { "maxLength": 255, "minLength": 1, "type": "string", "title": "label.title" }, "description": { "type": "string", "title": "label.description" }, "year": { "enum": [ "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990" ], "enumNames": [ "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990" ], "type": "string", "title": "label.year" }, "genre": { "enum": [ "fantasy", "thriller", "comedy" ], "enumNames": [ "genre.choice.fantasy", "genre.choice.thriller", "genre.choice.comedy" ], "type": "string", "title": "label.genre" }, "available": { "type": "object", "title": "label.available" } }, "required": [ "title", "description", "year", "genre", "available" ], "type": "object" }, "formData": { "title": "", "description": "", "year": "", "genre": "" }, "uiSchema": { "title": { "ui:help": "title.title", "ui:widget": "text" }, "description": { "ui:help": "title.description", "ui:widget": "textarea" }, "year": { "ui:widget": "select", "ui:help": "title.year" }, "genre": { "ui:widget": "select", "ui:help": "title.genre" }, "available": { "ui:help": "title.available", "ui:widget": "checkbox" }, "ui:widget": "mainForm" } }
рд╕рднреА рдХреЛрдб рдЬреЛ JSON рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреЛ рдХрдирд╡рд░реНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХреЗрд╡рд▓ рд░рд╛рдордмреНрд▓рд░ рдЧреНрд░реБрдк рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╕рдореБрджрд╛рдп рдХреА рдЗрд╕ рд╡рд┐рд╖рдп рдореЗрдВ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ
рдЧрд┐рддреНреВрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдмрдВрдбрд▓ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ
рд░рд┐рдлреНрд▓реЗрдХреНрдЯрд░ рдХрд░реЗрдВрдЧреЗ ред
рдЖрдЗрдП рдХреБрдЫ рдФрд░ рдкрд╣рд▓реБрдУрдВ рдкрд░ рдЧреМрд░ рдХрд░реЗрдВ рдЬрд┐рдирдХреЗ рдмрд┐рдирд╛ рдЖрдзреБрдирд┐рдХ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ:
рдХреНрд╖реЗрддреНрд░ рд╕рддреНрдпрд╛рдкрди
рдпрд╣
рд╕рд┐рдореНрдлрдиреА рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рдорд╛рдиреНрдп рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИ, рдПрдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХрд╛ рдЙрджрд╛рд╣рд░рдг:
<property name="title"> <constraint name="Length"> <option name="min">1</option> <option name="max">255</option> <option name="minMessage">title.min</option> <option name="maxMessage">title.max</option> </constraint> <constraint name="NotBlank"> <option name="message">title.not_blank</option> </constraint> </property>
рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЯрд╛рдЗрдк рдиреЛрдЯрдмреИрдВрдХ рдХреА рдПрдХ рдХрдореА рдпреЛрдЬрдирд╛ рдХреЗ рдЖрд╡рд╢реНрдпрдХ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рд╕рд░рдгреА рдореЗрдВ рдПрдХ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рдХрд░ рдпреЛрдЬрдирд╛ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреА рд╣реИ, рдФрд░ рдкреНрд░рдХрд╛рд░ рдХреА рдПрдХ рд▓рдВрдмрд╛рдИ рд╕реНрдХреАрдорд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЛ рдЬреЛрдбрд╝рддреА рд╣реИ-> рдЧреБрдг-> рд╢реАрд░реНрд╖рдХ-> рдЕрдзрд┐рдХрддрдо рдЧрддрд┐ рдФрд░ рдпреЛрдЬрдирд╛> рдЧреБрдг-> рд╢реАрд░реНрд╖рдХ-> minLength, рдЬреЛ рд╕рддреНрдпрд╛рдкрди рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ред
рдЖрдЗрдЯрдо рд╕рдореВрд╣реАрдХрд░рдг
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рдореЗрдВ, рд╕рд░рд▓ рд░реВрдкреЛрдВ рдореЗрдВ рдирд┐рдпрдо рдХреЗ рдЕрдкрд╡рд╛рдж рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдЕрдзрд┐рдХ рд╣реЛрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрд┐рд╕реА рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдбреНрд╕ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рдареЛрд╕ рд╕реВрдЪреА рдореЗрдВ рд╕рдм рдХреБрдЫ рджреЗрдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИ - рд╣рдореЗрдВ рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

рд╕реНрдкрд╖реНрдЯ рдирд┐рд░реНрдгрдп рдкреНрд░рдкрддреНрд░ рдХреЛ рдирд┐рдпрдВрддреНрд░рдг рддрддреНрд╡реЛрдВ рдХреЗ рддрд╛рд░реНрдХрд┐рдХ рд╕рдореВрд╣реЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдирд╛ рдФрд░ рдХрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ:

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, рдмреЙрдХреНрд╕ рд╕реЗ рдмрд╛рд╣рд░ рд╕рд┐рдореНрдлрдиреА рдлреЙрд░реНрдо рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рдХрд╛рдлреА рдмрдбрд╝реА рд╣реИрдВ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд░реВрдкреЛрдВ рдХреЛ рдЕрдиреНрдп рд░реВрдкреЛрдВ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╣ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ, JSON рд╕реНрдХреАрдорд╛ рдореЗрдВ рдЖрджреЗрд╢ рдЙрд╕ рдХреНрд░рдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдлрд╛рд░реНрдо рддрддреНрд╡ рдЦреАрдВрдЪрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдЗрд╕ рдЖрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╕рдореВрд╣ рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдерд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
рдиреЗрд╕реНрдЯреЗрдб рдлреЙрд░реНрдо рдЙрджрд╛рд╣рд░рдг $info = $builder ->create('info',FormType::class,['inherit_data'=>true]) ->add('title', TextType::class, [ 'label' => 'label.title', 'attr' => [ 'title' => 'title.title', ], ]) ->add('description', TextareaType::class, [ 'label' => 'label.description', 'attr' => [ 'title' => 'title.description', ], ]); $builder ->add($info) ->add('year', ChoiceType::class, [ 'choices' => range(1981, 1990), 'choice_label' => function ($val) { return $val; }, 'label' => 'label.year', 'attr' => [ 'title' => 'title.year', ], ]) ->add('genre', ChoiceType::class, [ 'choices' => [ 'fantasy', 'thriller', 'comedy', ], 'choice_label' => function ($val) { return 'genre.choice.'.$val; }, 'label' => 'label.genre', 'attr' => [ 'title' => 'title.genre', ], ]) ->add('available', CheckboxType::class, [ 'label' => 'label.available', 'attr' => [ 'title' => 'title.available', ], ]);
рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рдлреЙрд░реНрдо рдХреЗ рдПрдХ рд╕рд░реНрдХрд┐рдЯ рдореЗрдВ рдмрджрд▓рд╛ рдЬрд╛рдПрдЧрд╛:
рдиреЗрд╕реНрдЯреЗрдб JsonSchema рдЙрджрд╛рд╣рд░рдг "schema": { "properties": { "info": { "properties": { "title": { "type": "string", "title": "label.title" }, "description": { "type": "string", "title": "label.description" } }, "required": [ "title", "description" ], "type": "object" }, "year": { "enum": [ "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990" ], "enumNames": [ "1981", "1982", "1983", "1984", "1985", "1986", "1987", "1988", "1989", "1990" ], "type": "string", "title": "label.year" }, "genre": { "enum": [ "fantasy", "thriller", "comedy" ], "enumNames": [ "genre.choice.fantasy", "genre.choice.thriller", "genre.choice.comedy" ], "type": "string", "title": "label.genre" }, "available": { "type": "object", "title": "label.available" } }, "required": [ "info", "year", "genre", "available" ], "type": "object" }
рдФрд░ рдЗрд╕реА uiSchema "uiSchema": { "info": { "title": { "ui:help": "title.title", "ui:widget": "text" }, "description": { "ui:help": "title.description", "ui:widget": "textarea" }, "ui:widget": "form" }, "year": { "ui:widget": "select", "ui:help": "title.year" }, "genre": { "ui:widget": "select", "ui:help": "title.genre" }, "available": { "ui:help": "title.available", "ui:widget": "checkbox" }, "ui:widget": "group" }
рдпрд╣ рд╕рдореВрд╣реАрдХрд░рдг рд╡рд┐рдзрд┐ рд╣рдореЗрдВ рд╕реВрдЯ рдирд╣реАрдВ рдХрд░рддреА рдереА рдХреНрдпреЛрдВрдХрд┐ рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдпрд╛ рдЕрдиреНрдп рд░реВрдкреЛрдВ рдореЗрдВред рд╡рд░реНрддрдорд╛рди JSON рд╕реНрдХреАрдорд╛ рдорд╛рдирдХ рдХреЛ рддреЛрдбрд╝рдиреЗ рдХреЗ рдмрд┐рдирд╛ uiSchema рдореЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕рд┐рдореНрдлрдиреА рдлреЙрд░реНрдо рдореЗрдВ рдирд┐рдореНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝реЗ рдЧрдП:
'fieldset' => [ 'groups' => [ [ 'type' => 'base', 'name' => 'info', 'fields' => ['title', 'description'], 'order' => ['title', 'description'] ] ], 'type' => 'base' ]
рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреЛрдЬрдирд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
"ui:group": { "type": "base", "groups": [ { "type": "group", "name": "info", "title": "legend.info", "fields": [ "title", "description" ], "order": [ "title", "description" ] } ], "order": [ "info" ] },
рд╕реНрдХреАрдорд╛ рдФрд░ uiSchema рдХрд╛ рдкреВрд░реНрдг рд╕рдВрд╕реНрдХрд░рдг "schema": { "properties": { "title": { "maxLength": 255, "minLength": 1, "type": "string", "title": "label.title" }, "description": { "type": "string", "title": "label.description" }, "year": { "enum": [ "1989", "1990" ], "enumNames": [ "1989", "1990" ], "type": "string", "title": "label.year" }, "genre": { "enum": [ "fantasy", "thriller", "comedy" ], "enumNames": [ "genre.choice.fantasy", "genre.choice.thriller", "genre.choice.comedy" ], "type": "string", "title": "label.genre" }, "available": { "type": "boolean", "title": "label.available" } }, "required": [ "title", "description", "year", "genre", "available" ], "type": "object" }
"uiSchema": { "title": { "ui:help": "title.title", "ui:widget": "text" }, "description": { "ui:help": "title.description", "ui:widget": "textarea" }, "year": { "ui:widget": "select", "ui:help": "title.year" }, "genre": { "ui:widget": "select", "ui:help": "title.genre" }, "available": { "ui:help": "title.available", "ui:widget": "checkbox" }, "ui:group": { "type": "base", "groups": [ { "type": "group", "name": "info", "title": "legend.info", "fields": [ "title", "description" ], "order": [ "title", "description" ] } ], "order": [ "info" ] }, "ui:widget": "fieldset" }
рдЪреВрдБрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ
рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА
рд░рд┐рдПрдХреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдмреЙрдХреНрд╕ рдХреЗ рдмрд╛рд╣рд░ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЗрд╕ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдирдП рддрддреНрд╡ "ui: рд╕рдореВрд╣" рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рддрддреНрд╡реЛрдВ рдФрд░ рд░реВрдкреЛрдВ рдХреЛ рд╕рдореВрд╣реАрдХреГрдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рдорд┐рд▓рддрд╛ рд╣реИред
рдЧрддрд┐рд╢реАрд▓ рд░реВрдк
рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдПрдХ рдХреНрд╖реЗрддреНрд░ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдХреА рдПрдХ рдбреНрд░реЙрдк-рдбрд╛рдЙрди рд╕реВрдЪреА рдЪрдпрдирд┐рдд рд╢реНрд░реЗрдгреА рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИ?

рд╕рд┐рдореНрдлрдиреА рдлрд╛рд░реНрдо рд╣рдореЗрдВ рдШрдЯрдирд╛рдХреНрд░рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ
рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, JSON рд╕реНрдХреАрдорд╛ рдиреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рдордп рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд┐рдпрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐
рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рд╣рд╛рд▓ рдХреЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдореЗрдВ
рджрд┐рдЦрд╛рдИ рджреА ред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рд╕реВрдЪреА рдПрдХ Enum рдФрд░ EnumNames рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рджреЗрдирд╛ рдерд╛, рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдорд╛рдиреЛрдВ рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╣реИ:
{ "properties": { "genre": { "enum": [ "fantasy", "thriller", "comedy" ], "enumNames": [ "genre.choice.fantasy", "genre.choice.thriller", "genre.choice.comedy" ], "type": "string", "title": "label.genre" }, "sgenre": { "enum": [ "eccentric", "romantic", "grotesque" ], "enumNames": [ { "title": "sgenre.choice.eccentric", "genre": "comedy" }, { "title": "sgenre.choice.romantic", "genre": "comedy" }, { "title": "sgenre.choice.grotesque", "genre": "comedy" } ], "type": "string", "title": "label.genre" } }, "type": "object" }
рд▓реЗрдХрд┐рди рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рдРрд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЗрди рд╡рд╕реНрддреБрдУрдВ рдореЗрдВ рд╕реЗ рдХрдИ рд╣реЛрдиреЗ рдкрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рдПрдХ рддрддреНрд╡ рдХрдИ рд╕реВрдЪрд┐рдпреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рднреА рдирд┐рд░реНрднрд░рддрд╛ рдХреЗ рд╕рд╣реА рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдпрдкрдЯрд▓ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдХрд╛рдлреА рд╡реГрджреНрдзрд┐ рд╣реЛ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддреАрди рдХреНрд╖реЗрддреНрд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реЗ рд╣реБрдП рдПрдХ рд░реВрдк рдХреА рдбреНрд░рд╛рдЗрдВрдЧ рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ - рджреЗрд╢, рд╢рд╣рд░, рд╕рдбрд╝рдХред рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдорд╛рддреНрд░рд╛ рдЬрд┐рд╕реЗ рдмреИрдХрдПрдВрдб рдкрд░ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╡рд╣ рдкрддрд▓реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдФрд░, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреЛ рдпрд╛рдж рд╣реИ, рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рдХрд╕реНрдЯрдо рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЧрддрд┐рд╢реАрд▓рддрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛ рдЧрдпрд╛:
- рд╕реНрдХреАрдорд╛рдПрдб - рдпреЛрдЬрдирд╛ рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛, рдЗрд╕рдореЗрдВ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдлреЙрд░реНрдо рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╡рд░реНрддрдорд╛рди рддрд░реНрдХ рдХреА рдпреЛрдЬрдирд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдХ рдХрд╛ рдкрддрд╛ рд╢рд╛рдорд┐рд▓ рд╣реИ, рдпрджрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ;
- рд░рд┐рд▓реЛрдб - рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛ рджреГрд╢реНрдпрдкрдЯрд▓ рдХреЛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдмреИрдХреЗрдВрдб рдХреЛ рдлреЙрд░реНрдо рдбреЗрдЯрд╛ рднреЗрдЬрдХрд░ рд╕рд░реНрдХрд┐рдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ;
рдПрдХ
рд╕реНрдХреАрдорд╛ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рджреЛрд╣рд░рд╛рд╡ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддреА рд╣реИ - рдЖрдЦрд┐рд░рдХрд╛рд░, рдПрдХ
рдПрдХреНрд╢рди рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рд╣рдо рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдХреЗ рд╡рд┐рднрд╛рдЬрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ -
рд╕реНрдХреАрдорд╛ рдирд┐рдпрдВрддреНрд░рдХ
рдпреВрдЖрдИрдПрд╕рд╕реАрдПрдордП рдХреЗ рдордзреНрдпрд╡рд░реНрддреА рдЕрджреНрдпрддрди рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИ, рдФрд░
рдПрдХреНрд╢рди рдХрдВрдЯреНрд░реЛрд▓рд░ рдЖрд╡рд╢реНрдпрдХ рд╡реНрдпрд╡рд╕рд╛рдп рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд░рддрд╛ рд╣реИ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддрд╛ рд╣реИ рдпрд╛ рдЕрдкрдбреЗрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдлреЙрд░реНрдо рдХреЗ рднрд╛рдЧ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╕рддреНрдпрд╛рдкрди рдЬрд╛рдБрдЪреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░рддрд╛ рд╣реИред рдЗрди рдкрд░рд┐рд╡рд░реНрдзрди рдХреЗ рд╕рд╛рде, рдпреЛрдЬрдирд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ:
{ "schemaId": "//localhost/schema.json", "properties": { "genre": { "enum": [ "fantasy", "thriller", "comedy" ], "enumNames": [ "genre.choice.fantasy", "genre.choice.thriller", "genre.choice.comedy" ], "type": "string", "title": "label.genre" }, "sgenre": { "enum": [], "enumNames": [], "type": "string", "title": "label.sgenre" } }, "uiSchema": { "genre": { "ui:options": { "reload": true }, "ui:widget": "select", "ui:help": "title.genre" }, "sgenre": { "ui:widget": "select", "ui:help": "title.sgenre" }, "ui:widget": "mainForm" }, "type": "object" }
"рд╢реИрд▓реА" рдлрд╝реАрд▓реНрдб рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдлреНрд░рдВрдЯрдПрдВрдб рд╡рд░реНрддрдорд╛рди рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреВрд░реЗ рдлреЙрд░реНрдо рдХреЛ рдмреИрдХрдПрдВрдб рдкрд░ рднреЗрдЬрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдлреЙрд░реНрдо рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрднрд╛рдЧреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ:
{ action: тАЬhttps://...тАЭ, method: "POST", schema:{} formData:{} uiSchema:{} }
рдФрд░ рд╡рд░реНрддрдорд╛рди рдлреЙрд░реНрдо рдХреЗ рдмрдЬрд╛рдп рд░реЗрдВрдбрд░ рдХрд░реЗрдВред рднреЗрдЬрдиреЗ рдХреЗ рдмрд╛рдж рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдмрджрд▓реЗрдЧрд╛, рдпрд╣ рдкреАрда рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд░рдЪрдирд╛ рдпрд╛ рдлрд╝реАрд▓реНрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓ рд╕рдХрддреА рд╣реИ, рдЖрджрд┐ред - рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐ рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдирд┐рд╖реНрдХрд░реНрд╖
рдорд╛рдирдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдХрд╛рд░рдг, рд╣рдореЗрдВ рдХрдИ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рдорд┐рд▓реАрдВ, рдЬреЛ рд╣рдореЗрдВ рдлреНрд░рдВрдЯ-рдПрдВрдб рд░рд┐рдПрдХреНрдЯ рдШрдЯрдХреЛрдВ рдХреЗ рдЧрдарди рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ, рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЧрддрд┐рд╢реАрд▓ рд╕рд░реНрдХрд┐рдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреА рд╣реИрдВ, рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдХреЗ рдЧрдарди рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рд╣реИ, рдФрд░ рдЬрд▓реНрджреА рдФрд░ рд▓рдЪреАрд▓реЗ рдврдВрдЧ рд╕реЗ рдирдП рд╡реНрдпреВ рдкрд╛рд░реНрдЯреНрд╕ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ - рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдореЛрдмрд╛рдЗрд▓ рдпрд╛ рдбреЗрд╕реНрдХрдЯреЙрдкред рдЖрд╡реЗрджрдиред рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рд╣рд╕рд┐рдХ рдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдЖрдХрд░, рдЖрдкрдХреЛ рдЙрд╕ рдорд╛рдирдХ рдХреЛ рдпрд╛рдж рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдк рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред рд░рд┐рдПрдХреНрдЯ рдХреЗ рдмрдЬрд╛рдп, рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдлреНрд░рдВрдЯрдПрдВрдб рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдореБрдЦреНрдп рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ JSON рд╕реНрдХреАрдорд╛ рдХреЛ рдПрдХ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдПрдбреЙрдкреНрдЯрд░ рд▓рд┐рдЦрдирд╛ рд╣реИ рдФрд░ рдХреБрдЫ рдлреЙрд░реНрдо рд░реЗрдВрдбрд░рд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИред рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдиреЗ рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реНрдЯреИрдХ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдЕрдиреБрднрд╡ рдерд╛, рд▓реЗрдХрд┐рди рдЬрд┐рд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдордиреЗ рдмрд╛рдд рдХреА рдереА рд╡рд╣ рдЖрдкрдХреЛ рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдореЗрдВ рд╕реАрдорд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рд┐рдореНрдлрдиреА рдХреЗ рд╕реНрдерд╛рди рдкрд░, рдХреЛрдИ рдЕрдиреНрдп рдврд╛рдВрдЪрд╛ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдлреЙрд░реНрдо рдХреЛ JSON рд╕реНрдХреАрдорд╛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдмрджрд▓рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдкрдбреЗрдЯ: рдЖрдк 1:15:00 рд╕реЗ рд╕рд┐рдореНрдлрдиреА рдореЙрд╕реНрдХреЛ рдореАрдЯрдЕрдк
# 14 рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдорд╛рд░реА рд░рд┐рдкреЛрд░реНрдЯ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред