рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ, рдЧреЛ рдкрд░ рд╕реВрдХреНрд╖реНрдо рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЙрдкрдХрд░рдгреЛрдВ рдФрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ред рдпрд╣ рд▓реЗрдЦ рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдкрд░рд┐рдЪрд╛рдпрдХ рд╣реИред рдореЗрд░реЗ рдмреНрд▓реЙрдЧ рдкрд░ рдкрд╣рд▓рд╛ рднрд╛рдЧ, рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИ ред
рдЖрдзреБрдирд┐рдХ рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЧреЛ рдХреЛ рддреЗрдЬреА рд╕реЗ рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдЬрдм рдЖрдк рдХреНрд▓рд╛рдЙрдб-рдЖрдзрд╛рд░рд┐рдд рд╡рд┐рддрд░рд┐рдд рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ: рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ ( рдЖрджрд┐ред рдЕрдиреБрд╡рд╛рдж HTTP, gRPC, рдЖрджрд┐ ) рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рд╕рдВрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк, RPC рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛, рд▓реЙрдЧрд┐рдВрдЧред , рдЕрдиреБрд░реЗрдЦрдг, рдореИрдЯреНрд░рд┐рдХреНрд╕ рдФрд░ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛, рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдореЗрдВ рдПрдХреАрдХрд░рдг рдФрд░ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдирд╛ред рдЧреЛ рдЕрдкрдиреА рд╕рд╛рджрдЧреА рдФрд░ "рдХреЛрдИ рдЬрд╛рджреВ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рдХрд╛рд░рдг рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рднрд╛рд╖рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЧреЛ рд╕рдВрдХреБрд▓, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдЙрдкрдпреБрдХреНрдд рд╣реИ, рдЬрд┐рд╕рдореЗрдВ "рд╣реБрдб рдХреЗ рдиреАрдЪреЗ рдЬрд╛рджреВ" рдХреЗ рд╕рд╛рде рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдлреНрд░реЗрдорд╡рд░реНрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореИрдВ [ рд▓рдЧрднрдЧред рдкреНрд░рддрд┐ред рд╢рд┐рдЬреВ рд╡рд░реНрдЧреАрд╕ ] рдореИрдВ рдкреВрд░реНрдг рд╡рд┐рдХрд╕рд┐рдд рдврд╛рдВрдЪреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛, рдореИрдВ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЕрдзрд┐рдХ рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рджреЗрддреЗ рд╣реИрдВред рдЧреЛ рдХрд┐рдЯ рдиреЗ рдЧреЛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЧреИрдк рдХреЛ рднрд░ рджрд┐рдпрд╛, рдЬрд┐рд╕рд╕реЗ рдорд╛рдЗрдХреНрд░реЛрд╕рд┐рд╕реНрдЯрд░реНрд╕ рдмрдирд╛рддреЗ рд╕рдордп рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЧрдпрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдкрд░рд┐рдЪрдп
рдЧреЛ рдХрд┐рдЯ рдЧреЛ рдкреИрдХреЗрдЬ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ рдЬреЛ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдФрд░ рд╕рдорд░реНрдерд┐рдд рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рдмрдирд╛рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдкрд░рддреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдкрд╛рд░рджрд░реНрд╢реА рдФрд░ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд╡рд┐рднрд┐рдиреНрди рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреИрд╕реЗ: рд▓реЙрдЧрд┐рдВрдЧ, рдореЗрдЯреНрд░рд┐рдХреНрд╕, рдЯреНрд░реЗрд╕рд┐рдВрдЧ, рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдФрд░ рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдирд╛ рдЬреЛ рдХрд┐ рдареЗрд╕ рдкрд░ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред рдЧреЛ рдХрд┐рдЯ рдЕрдЪреНрдЫреА рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░, рд╕рдВрджреЗрд╢ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдкреНрд░рд╛рд░реВрдк рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдкрд░рддреЛрдВ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдЙрдкрдХрд░рдг рд╣реИрдВред
рд╡рд┐рдХрд╛рд╕рд╢реАрд▓ рд╡рд┐рд╢реНрд╡ рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕реЗрдЯ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЖрдкрдХреА рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдЖрдкрдХреЛ SOLID рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ, рд╡рд┐рд╖рдп-рдЙрдиреНрдореБрдЦ рджреГрд╖реНрдЯрд┐рдХреЛрдг (DDD), рдФрд░ рд╣реЗрдХреНрд╕рд╛рдЧреЛрдирд▓ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдПрд▓рд┐рд╕реНрдЯреЗрдпрд░ рдХреЙрдХрдмрд░реНрди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рд╣реИ рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЬрд┐рд╕реЗ рдЬреЗрдлрд░реА рдкрд▓реЗрд░реНрдореЛ рджреНрд╡рд╛рд░рд╛ " рдкреНрдпрд╛рдЬ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ " рдФрд░ рд░реЙрдмрд░реНрдЯ рд╕реА рдорд╛рд░реНрдЯрд┐рди рджреНрд╡рд╛рд░рд╛ " рдХреНрд▓реАрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ " рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджреНрдпрдкрд┐ рдЧреЛ рдХрд┐рдЯ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрд╕ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреИрдХреЗрдЬ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдпрд╣ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдореЛрдиреЛрд▓рд┐рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИред
рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдЧреЛ рдХрд┐рдЯ
рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдореЗрдВ рддреАрди рдореБрдЦреНрдп рд╕реНрддрд░ рд╣реИрдВ:
- рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░
- рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реНрддрд░
- рд╕реЗрд╡рд╛ рд╕реНрддрд░
рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░
рдЬрдм рдЖрдк рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдореЗрдВ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЕрдХреНрд╕рд░ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдирд╛ рдкрдбрд╝рддрд╛ рд╣реИ, рдЬреИрд╕реЗ: HTTP рдпрд╛ gRPC, рдпрд╛ NAT / рдЬреИрд╕реЗ рдкрдм / рдЙрдк рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдкрд░рд┐рд╡рд╣рди рдкрд░рдд рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ (рдЗрд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рд╡рд╣рди) рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред рдЧреЛ рдХрд┐рдЯ рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреА рд╣реИ, рдЬреИрд╕реЗ: HTTP, gRPC, NATS, AMQP рдФрд░ рдерд┐рд░рдлрд╝реНрдЯ ( рд▓рдЧрднрдЧред рдЖрдк рдЕрдкрдиреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ рдкрд░рд┐рд╡рд╣рди рднреА рд╡рд┐рдХрд╕рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ )ред рдЗрд╕рд▓рд┐рдП, рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд▓рд┐рдЦреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕реЗрд╡рд╛рдПрдВ рдЕрдХреНрд╕рд░ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡реНрдпрд╡рд╕рд╛рдп рддрд░реНрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рддреА рд╣реИрдВ рдЬреЛ рдХрд┐ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд╣рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рдЬрд╛рдирддреА рд╣реИрдВ, рдЖрдк рдПрдХ рд╣реА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рд▓рд┐рдЦреА рдЧрдИ рдПрдХ рд╕реЗрд╡рд╛ HTTP рдФрд░ gRPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╕рд╛рде рдЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреА рд╣реИред
Endpointy
рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдпрд╛ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдореМрд▓рд┐рдХ рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдореЗрдВ, рдореБрдЦреНрдп рд╕рдВрдЪрд╛рд░ рдкреИрдЯрд░реНрди рдЖрд░рдкреАрд╕реА рд╣реИред рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЛ рдПрдХ рдЕрд▓рдЧ RPC рд╡рд┐рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдЖрд░рд╕реАрдкреА рд╢реИрд▓реА рдореЗрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рд╕рдВрд╡рд╛рдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдкрд░рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ HTTP рдпрд╛ gRPC рдЬреИрд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдПрдХ рдЕрд▓рдЧ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдХрдИ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ ( рд▓рдЧрднрдЧ рд▓реЗрди HTTP рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдкрд░ рдЬреАрдЖрд░рдкреАрд╕реА ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рде рд╕реЗрд╡рд╛ рд╕реЗ рдмрд╛рд╣рд░ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕реЗрд╡рд╛рдПрдВ
рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдХреЛ рд╕реЗрд╡рд╛ рд╕реНрддрд░ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рд▓рд┐рдЦреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░реНрд╡рд┐рд╕ рд▓реЗрдпрд░ рдореЗрдВ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рдореЗрдВ рдмрд┐рдЬрдиреЗрд╕ рд▓реЙрдЬрд┐рдХ рдХрд╛ рдореБрдЦреНрдп рдЖрдзрд╛рд░ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЧрдП рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдпрд╛ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдЬреИрд╕реЗ HTTP рдпрд╛ gRPC рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдпрд╛ рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рднреА рдЬрд╛рдирдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЧреЛ рдХрд┐рдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд┐рдЦреА рдЧрдИ рд╕реЗрд╡рд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдПрдХ рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрд╛рд╣рд░ рдЙрдЬрд╛рдЧрд░ рд╣реЛрддреА рд╣реИред рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдХрдИ рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдПрдХрд▓ рд╡рд┐рдзрд┐ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
рдЙрджрд╛рд╣рд░рдг
рдФрд░ рдЕрдм рдПрдХ рд╕рд░рд▓ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдкрд░рддреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред
рд╕реЗрд╡рд╛ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ
рд╕реЗрд╡рд╛ рдореЗрдВ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╣рдо рдИ-рдХреЙрдорд░реНрд╕ рдореЗрдВ рдПрдХ рдЖрджреЗрд╢ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВрдЧреЗ:
рдСрд░реНрдбрд░ рд╕реЗрд╡рд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдСрд░реНрдбрд░ рдбреЛрдореЗрди рдЗрдХрд╛рдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:
рдпрд╣рд╛рдБ рд╣рдо рдЖрджреЗрд╢ рд╕реЗрд╡рд╛ рдХреЗ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
package implementation import ( "context" "database/sql" "time" "github.com/go-kit/kit/log" "github.com/go-kit/kit/log/level" "github.com/gofrs/uuid" ordersvc "github.com/shijuvar/gokit-examples/services/order" )
рдЖрд░рдкреАрд╕реА рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдФрд░ рдЙрддреНрддрд░
рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЖрд░рдкреАрд╕реА рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ ( рд▓рдЧрднрдЧ рдкреНрд░рддрд┐ рдбреАрдЯреАрдУ - рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдСрдмреНрдЬреЗрдХреНрдЯ ) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрд░рдкреАрд╕реА рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬрдиреЗ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдЗрдП рдЕрдм рдСрд░реНрдбрд░ рд╕рд░реНрд╡рд┐рд╕ рдореЗрдВ RPC рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
рдЖрд░рдкреАрд╕реА рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЬреИрд╕реА рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЧреЛ рдХрд┐рдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕
рд╣рдорд╛рд░реЗ рд╡реНрдпрд╛рдкрд╛рд░ рддрд░реНрдХ рдХрд╛ рдореВрд▓ рдХреЛрдб рдХреЗ рдмрд╛рдХреА рд╣рд┐рд╕реНрд╕реЛрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реЗрд╡рд╛ рдкрд░рдд рдореЗрдВ рдбрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрд░рдкреАрд╕реА рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ Endpoint
рдирд╛рдордХ рдЧреЛ рдХрд┐рдЯ рдПрдмреНрд╕реНрдЯреНрд░рдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдБ рдЧреЛ рдХрд┐рдЯ рд╕реЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реИ:
type Endpoint func(ctx context.Context, request interface{}) (response interface{}, err error)
рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдКрдкрд░ рдХрд╣рд╛, рдПрдВрдбрдкреЙрдЗрдВрдЯ рдПрдХ рдЕрд▓рдЧ рдЖрд░рдкреАрд╕реА рд╡рд┐рдзрд┐ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдХреЛ endpoint.Endpoint
рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдбреЗрдкреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗред рдЖрдЗрдпреЗ рдЬрд╛рдиреЗ рдЧреЛ рдХрд┐рдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдлреЙрд░ рдСрд░реНрдбрд░ рд╕рд░реНрд╡рд┐рд╕ рдореЗрдердб:
import ( "context" "github.com/go-kit/kit/endpoint" "github.com/shijuvar/gokit-examples/services/order" )
рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдПрдбрд╛рдкреНрдЯрд░ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ рдПрдХ рдЕрдореВрд░реНрдд рдЧреЛ рдХрд┐рдЯ endpoint.Enpoint
рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐ рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣ рдПрдбреЙрдкреНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рддреБрд▓рдирд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд░реВрдкрд╛рдВрддрд░рдг рдЯрд╛рдЗрдк рдХрд░рддрд╛ рд╣реИ, рд╕реЗрд╡рд╛ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдВрджреЗрд╢ рджреЗрддрд╛ рд╣реИред
func makeCreateEndpoint(s order.Service) endpoint.Endpoint { return func(ctx context.Context, request interface{}) (interface{}, error) { req := request.(CreateRequest) id, err := s.Create(ctx, req.Order) return CreateResponse{ID: id, Err: err}, nil } }
HTTP рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╕реЗрд╡рд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди
рд╣рдордиреЗ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдмрдирд╛рдИ рдФрд░ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд░рдкреАрд╕реА рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ред рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЛ рдмрд╛рд╣рд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдиреНрдп рд╕реЗрд╡рд╛рдПрдВ рдЖрд░рд╕реАрдкреА рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХрд╣ рд╕рдХреЗрдВред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд╣рди рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдЧрд╛ред рдЧреЛ рдХрд┐рдЯ рд╡рд┐рднрд┐рдиреНрди рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдЬреИрд╕реЗ рдХрд┐ HTTP, gRPC, NATS, AMQP рдФрд░ рдереНрд░рд┐рдлреНрдЯ рдЖрдЙрдЯ рдСрдлрд╝ рдж рдмреЙрдХреНрд╕ рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рддреА рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдкрдиреА рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП HTTP рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЧреЛ рдХрд┐рдЯ рдкреИрдХреЗрдЬ github.com/go-kit/kit/transport/http HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕реЗрд╡рд╛ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдФрд░ transport/http
рдкреИрдХреЗрдЬ рд╕реЗ NewServer
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирдпрд╛ http рд╕рд░реНрд╡рд░ рдмрдирд╛рдПрдЧрд╛ рдЬреЛ http.Handler
рдХреЛ рд▓рд╛рдЧреВ http.Handler
рдФрд░ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред
рдиреАрдЪреЗ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬреЛ рдЧреЛ рдХрд┐рдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдХреЛ рдПрдХ HTTP рдЯреНрд░рд╛рдВрд╕рдкреЛрд░реНрдЯ рдореЗрдВ рдХрдирд╡рд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдЬреЛ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкрд░реЛрд╕рддрд╛ рд╣реИ:
package http import ( "context" "encoding/json" "errors" "github.com/shijuvar/gokit-examples/services/order" "net/http" "github.com/go-kit/kit/log" kithttp "github.com/go-kit/kit/transport/http" "github.com/gorilla/mux" "github.com/shijuvar/gokit-examples/services/order/transport" ) var ( ErrBadRouting = errors.New("bad routing") )
рд╣рдо transport/http
рдкреИрдХреЗрдЬ рд╕реЗ NewServer
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ http.Handler
рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдФрд░ рдЕрдиреБрд░реЛрдз рдбрд┐рдХреЛрдбрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рдВрд╕ ( type DecodeRequestFunc func
) рдХрд╛ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ (рдЙрджрд╛ред type EncodeReponseFunc func
)ред
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд DecodeRequestFunc
рдФрд░ EncodeResponseFunc
рдЙрджрд╛рд╣рд░рдг рд╣реИрдВ:
HTTP рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рдирд╛
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдкрдирд╛ HTTP рд╕рд░реНрд╡рд░ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВред рдКрдкрд░ рд╡рд░реНрдгрд┐рдд NewService
рдлрд╝рдВрдХреНрд╢рди http.Handler
рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ http.Handler
рдЬреЛ рд╣рдореЗрдВ рдЗрд╕реЗ HTTP рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд▓рд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:
func main() { var ( httpAddr = flag.String("http.addr", ":8080", "HTTP listen address") ) flag.Parse() var logger log.Logger { logger = log.NewLogfmtLogger(os.Stderr) logger = log.NewSyncLogger(logger) logger = level.NewFilter(logger, level.AllowDebug()) logger = log.With(logger, "svc", "order", "ts", log.DefaultTimestampUTC, "caller", log.DefaultCaller, ) } level.Info(logger).Log("msg", "service started") defer level.Info(logger).Log("msg", "service ended") var db *sql.DB { var err error
рдЕрдм рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рд▓реЙрдиреНрдЪ рд╣реЛ рдЧрдИ рд╣реИ рдФрд░ рдкрд░рд┐рд╡рд╣рди рд╕реНрддрд░ рдкрд░ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрд╕реА рд╕реЗрд╡рд╛ рдХреЛ рджреВрд╕рд░реЗ рдкрд░рд┐рд╡рд╣рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреАрдЖрд░рдкреАрд╕реА рдпрд╛ рдЕрдкрд╛рдЪреЗ рдереНрд░рд┐рдлреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реЗрд╡рд╛ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рд▓реЗрдЦ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЧреЛ рдХрд┐рдЯ рдкреНрд░рд╛рдЗрдореЗрдЯрд░реА рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкрд╛рд░рджрд░реНрд╢реА, рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкреИрдЯрд░реНрди, рд╕реЗрд╡рд╛ рдЦреЛрдЬ, рд▓реЛрдб рд╕рдВрддреБрд▓рди, рдЖрджрд┐ рдХреЗ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдЗрди рдФрд░ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХрд░реЗрдВрдЧреЗред
рд╕реНрд░реЛрдд рдХреЛрдб
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ GitHub рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдордзреНрдпрд╡рд░реНрдЧ
рдЧреЛ рдХрд┐рдЯ рд╕рд┐рд╕реНрдЯрдо рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЗ рдЕрдЪреНрдЫреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рдкреВрд░реНрд╡рд╛рднрд╛рд╕ рджреЗрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рд▓реЗрдпрд░рд┐рдВрдЧред рдордзреНрдпрд╡рд░реНрддрд┐рдпреЛрдВ ( рд▓рдЧрднрдЧред рдордзреНрдпрд╕реНрде рдордзреНрдпрд╕реНрде рдкреИрдЯрд░реНрди ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрд╡рд╛ рдШрдЯрдХреЛрдВ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХрд╛ рдЕрд▓рдЧрд╛рд╡ рд╕рдВрднрд╡ рд╣реИред рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдорд┐рдбрд▓рд╡реЗрд░реНрд╕ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрдВрддреНрд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рд╕реЗрд╡рд╛рдУрдВ рдФрд░ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ (рдЕрд▓рдЧ-рдерд▓рдЧ рдШрдЯрдХреЛрдВ) рдХреЛ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рд▓реЙрдЧрд┐рдВрдЧ, рдЕрдиреБрд░реЛрдз рд░реБрдХрд╛рд╡рдЯ, рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛, рд╕рдВрддреБрд▓рди рд╕рд╛рдзрдирд╛ рдпрд╛ рд╡рд┐рддрд░рд┐рдд рдЕрдиреБрд░реЗрдЦрдгред
рдиреАрдЪреЗ рдЧреЛ рдХрд┐рдЯ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдХреА рдПрдХ рддрд╕реНрд╡реАрд░ рд╣реИ, рдЬрд┐рд╕реЗ рдЧреЛ рдХрд┐рдЯ рдореЗрдВ рдордзреНрдпрд╡рд░реНрддрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ "рдкреНрдпрд╛рдЬ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛" рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕реЗрдЬ рд╕рд┐рдВрдбреНрд░реЛрдо рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ
рдЧреЛ рдХрд┐рдЯ рдХреА рддрд░рд╣, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдЬрд╛рд╡рд╛ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реИрд╕ рдЯреВрд▓рдХрд┐рдЯ рд╣реИред рд▓реЗрдХрд┐рди, рдЧреЛ рдХрд┐рдЯ рдХреЗ рд╡рд┐рдкрд░реАрдд, рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдПрдХ рдмрд╣реБрдд рд╣реА рдкрд░рд┐рдкрдХреНрд╡ рдврд╛рдВрдЪрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдИ рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде рдЬрд╛рд╡рд╛ рд╕реНрдЯреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рд╢реНрд╡ рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдХрд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдлрд░реНрд╕ рдХреЗрд╡рд▓ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИрдВред рдореИрдВ рдХрдИ рд╡рд┐рдХрд╛рд╕ рдЯреАрдореЛрдВ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЙрд░реНрдлрд╝рд┐рд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЧрд▓рдд рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреЗ рд╣реИрдВ, рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдХреЗрд╡рд▓ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдФрд░ рдиреЗрдЯрдлреНрд▓рд┐рдХреНрд╕ рдУрдПрд╕рдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рд╡рд┐рддрд░рд┐рдд рд╕рд┐рд╕реНрдЯрдо рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рдХреЛ рдПрдХ рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реИред
рдЗрд╕рд▓рд┐рдП рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде, рдЬреИрд╕реЗ рдХрд┐ рдЧреЛ рдХрд┐рдЯ рдпрд╛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреА рд░реВрдкрд░реЗрдЦрд╛, рдЖрдк рдЕрдкрдиреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд░рд┐рдЬрд╝ рдХреА рдУрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рдкреИрдЯрд░реНрди рдХреЗ рд░реВрдк рдореЗрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлрд╝реНрдЯ рдХрдорд╛рдВрдб рдФрд░ рд╕рд┐рд╕реНрдЯрдо рджреЛрдиреЛрдВ рдХреА рдХрдИ рд╕реНрдХреЗрд▓рд┐рдВрдЧ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдБ рднреА рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрд╡рд╛ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдбреЗрдЯрд╛ рд╡рд┐рднрд┐рдиреНрди рдбреЗрдЯрд╛рдмреЗрд╕реЛрдВ рдореЗрдВ рдмрд┐рдЦрд░реЗ рд░рд╣рддреЗ рд╣реИрдВ, рдЬреЛ рдХрднреА-рдХрднреА рд▓реЗрди-рджреЗрди рдпрд╛ рдбреЗрдЯрд╛ рдХреНрд╡реЗрд░реАрдЬрд╝ рдмрдирд╛рддреЗ рд╕рдордп рдХрдИ рд╕рдорд╕реНрдпрд╛рдПрдВ рдкреИрджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╕рдм рд╡рд┐рд╖рдп рдХреНрд╖реЗрддреНрд░ рдХреА рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╕рдВрджрд░реНрдн рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рдЕрдЪреНрдЫреА рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдЗрдХреНрд░реЛ рдХрд┐рдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрдкрдХрд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рддреИрдпрд╛рд░ рдХреА рдЧрдИ рдЧреЛ рдХрд┐рдЯ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдореЛрдиреЛрд▓рд┐рде рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреБрдХреНрдд рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдбрд┐рдЬрд╛рдЗрди рдХреЗ рд╕рд╛рде рдмрдирд╛рдИ рдЧрдИ рд╣реИред
рдФрд░ рдХреБрдЫ рдЧреЛ рдХрд┐рдЯ рд╕реБрд╡рд┐рдзрд╛рдПрдБ, рдЬреИрд╕реЗ рдХрд┐ рджрдЦрд▓ рджреЗрдирд╛ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдХрд░рдирд╛, рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рднреА рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рдЗрд╕реНрддрд┐рдпреЛред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдпрд░реНрд╕ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддрд┐рдпреЛ рдЬреИрд╕реА рдХрд┐рд╕реА рдЪреАрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЧреЛ рдХрд┐рдЯ рд╕реЗ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рднреА рдХреЗ рдкрд╛рд╕ рдЪреМрд░рд╛рд╣реЗ рдХрд╛ рд╕рдВрдЪрд╛рд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛ рдЬрд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдЪреИрдирд▓ рдЪреМрдбрд╝рд╛рдИ рдирд╣реАрдВ рд╣реЛрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдФрд░ рдЕрдзрд┐рдХ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдПрдХ рд╕реНрддрд░ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЬрдЯрд┐рд▓рддрд╛ред
рдкреБрдирд╢реНрдЪ
рдЕрдиреБрд╡рд╛рдж рдХрд╛ рд▓реЗрдЦрдХ рдореВрд▓ рдкрд╛рда рдХреЗ рд▓реЗрдЦрдХ рдХреА рд░рд╛рдп рдХреЛ рд╕рд╛рдЭрд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдХреЗрд╡рд▓ рд░реВрд╕реА рд░реВрд╕реА рд╕рдореБрджрд╛рдп рдХреЗ рд▓рд┐рдП рд╢реИрдХреНрд╖рд┐рдХ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдпреБрдкреАрдбреА
рдпрд╣ рдЕрдиреБрд╡рд╛рдж рдЕрдиреБрднрд╛рдЧ рдХрд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рднреА рд╣реИ рдФрд░ рдореИрдВ рдЕрдиреБрд╡рд╛рдж рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред