рд╣рд╛рд▓ рд╣реА рдореЗрдВ, GraphQL рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ рд▓реЛрдХрдкреНрд░рд┐рдпрддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдЕрдиреБрд░реЛрдз, рдЯрдВрдХрдг рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕реБрдВрджрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ред
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ: "рдпрд╣рд╛рдВ рдпрд╣ рд╣реИ - рд╣рдордиреЗ рдбреЗрдЯрд╛ рд╡рд┐рдирд┐рдордп рдХреЗ рд▓рд┐рдП рдЖрджрд░реНрд╢ рднрд╛рд╖рд╛ рдвреВрдВрдв рд▓реА рд╣реИ!" ...
рдореИрдВ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд╕реЗ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛рдКрдВрдЧрд╛: рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рд╕реБрдЪрд╛рд░реВ рд╣реИред рд░реЗрдЦрд╛рдВрдХрди рдореЗрдВ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд╖рдг рдФрд░ рднрд╛рд╖рд╛ рдбрд┐рдЬрд╛рдЗрди рдореЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореМрд▓рд┐рдХ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред
рджреВрд╕рд░реА рдУрд░, рдЗрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ "рдбрд┐рдЬрд╛рдЗрди рдЪрд╛рд▓" рдПрдХ рдХрд╛рд░рдг рдХреЗ рд▓рд┐рдП рдХрд┐рдП рдЧрдП рдереЗ - рдпрд╣ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдХрд╛рд░рдг рдерд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, GraphQL рд╣рд░ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реИ, рдФрд░ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЙрдкрдХрд░рдг рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рдмрд╛рддреЗрдВ рдкрд╣рд▓реЗред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рдЗрд╕ рднрд╛рд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯреА рд╕реА рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реВрдВред рдпрд╣ рдПрдХ рдЬрдЯрд┐рд▓ рдЬрдЯрд┐рд▓ рдПрд╕рдкреАрдП рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдВрдЪрд╛рд▓рди рдЧреИрд░-рддреБрдЪреНрдЫ CRUD (рдЬрдЯрд┐рд▓ рдирд┐рдХрд╛рдп) рд╣реИрдВред рдЗрд╕ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рддрд░реНрдХ рдХрд╛ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣рд┐рд╕реНрд╕рд╛ рдЖрд╡реЗрджрди рдХреА рдкреНрд░рдХреГрддрд┐ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдбреЗрдЯрд╛ рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рд╕рд╛рде рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ (рдпрд╛ рдбреЗрдЯрд╛ рдХреА рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХреГрддрд┐ рдХреЗ рд╕рд╛рде) рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ, рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
1. NON_NULL
рдпрд╣ рдХреЛрдИ рдЧрдВрднреАрд░ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рдмрд▓реНрдХрд┐, рдпрд╣ рдЗрд╕ рдмрд╛рдд рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдореЗрдВ рдЕрд╢рдХреНрдд рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреИрд╕реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдПрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ (рдФрд░ рди рдХреЗрд╡рд▓) рд╣реИрдВ, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдкреНрд░рддрд┐рдорд╛рди рдорда рд╣реИред рддреЛ, Maybe
(рд╣рд╛рд╕реНрдХреЗрд▓) рдпрд╛ Option
(рд╕реНрдХрд╛рд▓рд╛) рдореЛрдирдб рдХреЗ рд░реВрдк рдореЗрдВ рдРрд╕реА рдЪреАрдЬ рд╣реИред рдирд┐рдЪрд▓рд╛ рд░реЗрдЦрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдореЛрдирдб рдХреЗ рднреАрддрд░ рдирд┐рд╣рд┐рдд рдореВрд▓реНрдп рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ (рдЬреЛ рдХрд┐ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред рдареАрдХ рд╣реИ, рдпрд╛ рдЗрд╕реЗ рдПрдирдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдЬрдВрдЧ рдореЗрдВред
рдПрдХ рддрд░рд╣ рд╕реЗ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп, рдФрд░ рдЕрдзрд┐рдХрд╛рдВрд╢ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдпрд╣ рдорд╛рди, рдЬреЛ рдореВрд▓ рдХреЛ "рд▓рдкреЗрдЯрддрд╛" рд╣реИ, рдореБрдЦреНрдп рдХреЛ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рдХрд▓реНрдк рджреЗрддрд╛ рд╣реИред рдФрд░ рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ - рдпрд╣ рд╣рдореЗрд╢рд╛ рдореБрдЦреНрдп рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ - рдХреБрдЫ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ, рдХреНрдпрд╛ рдпрд╣ рдкреНрд░рддреНрдпрдп рдпрд╛ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд┐рд░реНрдл рдПрдХ рдЬреЛрдбрд╝ рд╣реИ ?
ред
GraqhQL рдореЗрдВ, рд╡рд┐рдкрд░реАрдд рд╕рдЪ рд╣реИред рд╕рднреА рдкреНрд░рдХрд╛рд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╢рдХреНрдд рд╣реИрдВ - рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рдЕрд╢рдХреНрдд рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, Maybe
рдореЛрдирд╛рдб рд╣реИред
рдФрд░ рдЕрдЧрд░ рд╣рдо рдРрд╕реА рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП name
рдХреНрд╖реЗрддреНрд░ рдХреЗ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдЦрдВрдб рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ:
рд╣рдо рдкрд╛рддреЗ рд╣реИрдВ:

String
рдкреНрд░рдХрд╛рд░ NON_NULL
рдореЗрдВ рд▓рд┐рдкрдЯреЗ
1.1ред рдЖрдЙрдЯрдкреБрдЯ
рдРрд╕рд╛ рдХреНрдпреЛрдВ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ "рд╕рд╣рд┐рд╖реНрдгреБ" рднрд╛рд╖рд╛ рдХреЗ рдбрд┐рдЬрд╛рдЗрди (рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реИ) рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИред
рдЗрд╕ "рд╕рд╣рд┐рд╖реНрдгреБрддрд╛" рдХреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдереЛрдбрд╝рд╛ рдФрд░ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рд▓реМрдЯреЗ рдорд╛рдиреЛрдВ рдХреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ NON_NULL рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИ:
type User { name: String!
рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдРрд╕реА рд╕реЗрд╡рд╛ рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд▓реМрдЯрд╛рддреА рд╣реИ, рдФрд░ рдПрдХ рдЕрд▓рдЧ рдорд╛рдЗрдХреНрд░реЛ-рд╕реЗрд╡рд╛ "рдореИрддреНрд░реА" рдЬреЛ рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рджреЛрд╕реНрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдореИрдЪ рд▓реМрдЯрд╛рддреА рд╣реИред рдлрд┐рд░, "рдореИрддреНрд░реА" рд╕реЗрд╡рд╛ рдХреА рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рднреА рд╕реВрдЪреАрдмрджреНрдз рдирд╣реАрдВ рдХрд░ рдкрд╛рдПрдВрдЧреЗред рд╕реНрдерд┐рддрд┐ рдХреЛ рдареАрдХ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
type User { name: String!
рдпрд╣ рдЖрдВрддрд░рд┐рдХ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐ рд╕рд╣рдирд╢реАрд▓рддрд╛ рд╣реИред рдПрдХ рдЙрджрд╛рд╣рд░рдг, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рджреВрд░ рдХреА рдХреМрдбрд╝реА рд╣реИред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рд╕рд╛рд░ рдХреЛ рд╕рдордЭ рд▓рд┐рдпрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдк рдЕрдиреНрдп рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рджреВрд░рд╕реНрде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ, рдФрд░ рджреЛрд╕реНрддреЛрдВ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреБрдЫ рдмрд╛рд╣рд░реА рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрд░рдЪрдирд╛ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рд╕рд┐рд░реНрдл рдмрд╛рд╣рд░ рдирд┐рдХрд▓реЗ рдФрд░ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ рдЙрд╕реЗ рд╡рд╛рдкрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рддрдм рд╣рдо рд╕рдордЭ рдирд╣реАрдВ рдкрд╛рдПрдВрдЧреЗ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
type Query {
рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИред рдФрд░ рдХреНрдпрд╛ рд╕рдорд╕реНрдпрд╛ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╣реБрдд рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ - рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд╛рджред рд▓реЗрдХрд┐рди рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдВрдмрдВрдзрдкрд░рдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдЦрдВрдб рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИ, рддреЛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ рдХрд┐ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реИрдВ, рдФрд░ рдПрдкреАрдЖрдИ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рд╕рдЦреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдирдорд╕реНрддреЗ, рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдЪрд┐рд╣реНрди! рдЬрд╣рд╛рдВ рднреА рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдореИрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рдЙрд▓реНрдЯрд╛" рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдФрд░ рд╡рд┐рд╕реНрдордпрд╛рджрд┐рдмреЛрдзрдХ рдмрд┐рдВрджреБрдУрдВ рдХреЗ рдмрдЬрд╛рдп рдкреНрд░рд╢реНрди рдЪрд┐рд╣реНрди рд▓рдЧрд╛рддрд╛ рд╣реВрдВ) рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рдЕрдзрд┐рдХ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп, рдЕрд╢рдХреНрдд рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдХрд╣рд╛рдиреА рд╣реИред рдпрд╣ HTML рдореЗрдВ рдЪреЗрдХрдмреЙрдХреНрд╕ рд╕реНрддрд░ рдХрд╛ рдПрдХ рдЬрдВрдм рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЗрд╕ рдЧреИрд░-рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд рдЪреЗрдХрдмреЙрдХреНрд╕ рдХрд╛ рдХреНрд╖реЗрддреНрд░ рдмрд╕ рд╡рд╛рдкрд╕ рдирд╣реАрдВ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
type Post { id: ID! title: String!
рдЕрдм рддрдХ, рдЗрддрдирд╛ рдЕрдЪреНрдЫрд╛ред рдЕрдкрдбреЗрдЯ рдЬреЛрдбрд╝реЗрдВ:
type Mutation { createPost(post: PostInput!): Post! updatePost(id: ID!, post: PostInput!): Post! }
рдФрд░ рдЕрдм рд╕рд╡рд╛рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдкреЛрд╕реНрдЯ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╕рдордп рд╣рдо рд╡рд┐рд╡рд░рдг рдХреНрд╖реЗрддреНрд░ рд╕реЗ рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдХреНрд╖реЗрддреНрд░ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдпрджрд┐ рдлрд╝реАрд▓реНрдб рдЧрд╛рдпрдм рд╣реИ, рддреЛ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдЗрд╕реЗ рдЕрдкрдбреЗрдЯ рди рдХрд░реЗрдВ? рдпрд╛ рдЗрд╕реЗ рд╢реВрдиреНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрдЯ рдХрд░реЗрдВ? рд▓рдмреНрдмреЛрд▓реБрдЖрдм рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╢рдХреНрдд рд╣реЛрдиреЗ рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЪреАрдЬреЗрдВ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, GraphQL рдПрдХ рд╣реА рдмрд╛рдд рд╣реИред
2. рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдкреГрдердХреНрдХрд░рдг
рдпрд╣ рд╕рд┐рд░реНрдл рджрд░реНрдж рд╣реИред CRUD рд╡рд░реНрдХ рдореЙрдбрд▓ рдореЗрдВ, рдЖрдкрдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ "рдЯреНрд╡рд┐рд╕реНрдЯ" рдмреИрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╡рд╛рдкрд╕ рднреЗрдЬрддреЗ рд╣реИрдВред рдореЛрдЯреЗ рддреМрд░ рдкрд░, рдпрд╣ рдПрдХ рдФрд░ рдПрдХ рд╣реА рд╡рд╕реНрддреБ рд╣реИред рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдмрд╕ рдЗрд╕рдХрд╛ рджреЛ рдмрд╛рд░ рд╡рд░реНрдгрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ - рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдПред рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд┐рд╡рд╛рдп рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рдХреЛрдб рдЬрдирд░реЗрдЯрд░ рд▓рд┐рдЦрдиреЗ рдХреЗред рдореИрдВ "рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ" рдХреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдЕрд▓рдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рдВрд╢реЛрдзрдХ:
type Post { input output text: String! output updatedAt(format: DateFormat = W3C): Date! }
рдпрд╛ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ:
type Post { text: String! @input @output updatedAt(format: DateFormat = W3C): Date! @output }
3. рдмрд╣реБрд░реВрдкрддрд╛
рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛рдПрдВ рдПрдХ рджреЛрд╣рд░реЗ рд╡рд┐рд╡рд░рдг рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИрдВред рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ, рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрдк рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
interface Commentable { comments: [Comment!]! } type Post implements Commentable { text: String! comments: [Comment!]! } type Photo implements Commentable { src: URL! comments: [Comment!]! }
рдпрд╛ рдпреВрдирд┐рдпрдиреЛрдВ
type Person { firstName: String, lastName: String, } type Organiation { title: String } union Subject = Organiation | Person type Account { login: String subject: Subject }
рдЖрдк рдЗрдирдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдИ рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд╣рди рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд░реВрдк рдореЗрдВ json рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ, рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП __typename
рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рд╡реЗрд╢ рдХрд░рддреЗ рд╕рдордп рднреА рдРрд╕рд╛ рдХрд░рдирд╛ рдЕрд╕рдВрднрд╡ рдХреНрдпреЛрдВ рдерд╛ - рдмрд╣реБрдд рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкрд░рд┐рд╡рд╣рди рдХреЗ рджреМрд░рд╛рди рдЬреЛрдВрд╕ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдФрд░ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдврдВрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЖрддреНрдорд╛ рдореЗрдВ рдХреБрдЫ:
union Subject = OrganiationInput | PersonInput input AccountInput { login: String! password: String! subject: Subject! }
рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рдЗрд╕ рд╡реНрдпрд╡рд╕рд╛рдп рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рд░реНрд╕рд░ рд▓рд┐рдЦрдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
4. рдкреАрдврд╝реА
рдЬреЗрдиреЗрд░рд┐рдХ рдХреЗ рд╕рд╛рде GraphQL рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХреНрдпрд╛ рд╣реИ? рдФрд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ - рд╡реЗ рдирд╣реАрдВ рд╣реИрдВред рдЖрдЗрдП рдПрдХ рдкреГрд╖реНрдард╛рдВрдХрди рдпрд╛ рдХрд░реНрд╕рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ CRUD рдЗрдВрдбреЗрдХреНрд╕ рдХреНрд╡реЗрд░реА рд▓реЗрдВ - рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИред рдореИрдВ рдкреЗрдЬреЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреВрдВрдЧрд╛ред
input Pagination { page: UInt, perPage: UInt, } type Query { users(pagination: Pagination): PageOfUsers! } type PageOfUsers { total: UInt items: [User!]! }
рдФрд░ рдЕрдм рд╕рдВрдЧрдардиреЛрдВ рдХреЗ рд▓рд┐рдП
type Query { organizations(pagination: Pagination): PageOfOrganizations! } type PageOfOrganizations { total: UInt items: [Organization!]! }
рдФрд░ рдЗрд╕реА рддрд░рд╣ ... рдореИрдВ рдХреИрд╕реЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЬреЗрдирд░рд┐рдХ рд░рдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛
type PageOf<T> { total: UInt items: [T!]! }
рддрдм рдореИрдВ рд╕рд┐рд░реНрдл рд▓рд┐рдЦреВрдВрдЧрд╛
type Query { users(page: UInt, perPage: UInt): PageOf<User>! }
рд╣рд╛рдБ рдЯрди рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ! рдХреНрдпрд╛ рдореБрдЭреЗ рдЖрдкрдХреЛ рдЬреЗрдирд░рд┐рдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
5. рдирд╛рдо рд╕реНрдерд╛рди
рд╡реЗ рд╡рд╣рд╛рдВ рднреА рдирд╣реАрдВ рд╣реИрдВред рдЬрдм рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдбреЗрдврд╝ рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЬрд╛рддреА рд╣реИ, рддреЛ рдирд╛рдо рдЯрдХрд░рд╛рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдПрдХ рд╕реМ рдкреНрд░рддрд┐рд╢рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдФрд░ рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ Service_GuideNDriving_Standard_Model_Input
рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдореИрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдкрд░ рдкреВрд░реНрдг рдирд╛рдорд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬреИрд╕реЗ SOAP (рд╣рд╛рдБ, рд╣рд╛рдБ, рдпрд╣ рднрдпрд╛рдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рдирд╛рдорд╕реНрдерд╛рди рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрдиреЗ рд╣реИрдВ)ред рдФрд░ рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ "рдЧрдбрд╝рдЧрдбрд╝рд╛рд╣рдЯ" рдкреНрд░рдХрд╛рд░ рдХреА рдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдкрд░ рдХрдо рд╕реЗ рдХрдо рдХрдИ рдпреЛрдЬрдирд╛рдПрдВред
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░
GraphQL рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдПрдХ рд╕рд╣рд┐рд╖реНрдгреБ, рд╕реВрдХреНрд╖реНрдорджрд░реНрд╢реА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЬреЛ рдЙрдиреНрдореБрдЦ рд╣реИ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕реВрдЪрдирд╛ рдЖрдЙрдЯрдкреБрдЯ рдФрд░ рд╕рд░рд▓, рдирд┐рд░реНрдзрд╛рд░рдХ рдЗрдирдкреБрдЯред
рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрд░реВрдкреА рд╕рдВрд╕реНрдерд╛рдПрдВ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рдЗрдирдкреБрдЯ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬреБрджрд╛рдИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЬреЗрдирд░рд┐рдХ рдХреА рдХрдореА - рдЦрд░реЛрдВрдЪ рд╕реЗ рд╕реНрдХреНрд░рд┐рдмрд▓ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред
рдЧреНрд░реЗрдлреНрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ (рдФрд░ рдХрднреА-рдХрднреА рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ ) рд╕реАрдЖрд░рдпреВрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИред
рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдЦрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ :)
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рд▓рдбрд╝рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдХрднреА-рдХрднреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ) рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред