рдЖрдЬ рд╣рдо Instagram рдореЗрдВ рдкрд╛рдпрдерди рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╕реЗ рджреВрд╕рд░реА рд╕рд╛рдордЧреНрд░реА рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдкрд┐рдЫрд▓реА рдмрд╛рд░ рдпрд╣ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕рд░реНрд╡рд░ рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд╛ рдПрдХ рдореЛрдиреЛрд▓рд┐рде рд╣реИред рдЗрд╕рдореЗрдВ рдХрдИ рдорд┐рд▓рд┐рдпрди рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рдХреЛрдб рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдХрдИ рд╣рдЬрд╛рд░ Django рдХреЗ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╣реЛрддреЗ рд╣реИрдВред

рдпрд╣ рдЖрд▓реЗрдЦ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ рдХрд┐ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо HTTP рдПрдкреАрдЖрдИ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рджреМрд░рд╛рди рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
рд╕реНрдерд┐рддрд┐ рдЕрд╡рд▓реЛрдХрди
рдЬрдм рдЖрдк Instagram рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдЦреЛрд▓рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ HTTP рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ, рд╣рдорд╛рд░реЗ рдкрд╛рдпрдерди (Django) рд╕рд░реНрд╡рд░ рдХреЗ JSON-API рддрдХ рдкрд╣реБрдБрдЪрддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдпрд╣рд╛рдВ рджреА рдЧрдИ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдЖрдк рдПрдкреАрдЖрдИ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдЕрдВрджрд╛рдЬрд╛ рд▓рдЧрд╛ рдкрд╛рдПрдВрдЧреЗ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рдореЛрдмрд╛рдЗрд▓ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рддреЛ рдпрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ:
- рд╕рд░реНрд╡рд░ рдкрд░ 2000 рд╕реЗ рдЕрдзрд┐рдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБред
- рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ 200 рд╕реЗ рдЕрдзрд┐рдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдлрд╝реАрд▓реНрдб рдЬреЛ рдХрд┐рд╕реА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдПрдХ рдЫрд╡рд┐, рд╡реАрдбрд┐рдпреЛ рдпрд╛ рдХрд╣рд╛рдиреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
- рд╕реИрдХрдбрд╝реЛрдВ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдФрд░ рдЗрд╕рд╕реЗ рднреА рдЕрдзрд┐рдХ рдЬреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВ)ред
- рд╕рд░реНрд╡рд░ рдХреЛрдб рдХреЗ рд╕реИрдХрдбрд╝реЛрдВ рдЖрд╡рд╛рдЧрдорди рд░реЛрдЬрд╛рдирд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдирдИ рдкреНрд░рдгрд╛рд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рд╣рд╛рдпрддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рд╣реИред
рд╣рдо рдЕрдкрдиреЗ рдХреЙрдореНрдкреНрд▓реЗрдХреНрд╕ рдХреЛ рдирд┐рд░рдВрддрд░ рд░реВрдк рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, HTTP APIs рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЕрдиреБрдмрдВрдзреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдкреНрд░рдХрд╛рд░
рдЪрд▓рд┐рдП рд╢реБрд░реВ рд╕реЗ рд╣реА рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рдпрдерди рдХреЛрдб рдореЗрдВ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рд╡рд░реНрдгрди
рдкреАрдИрдкреА 484 рдореЗрдВ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдХреЛрдб рдореЗрдВ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХреНрдпреЛрдВ рдЬреЛрдбрд╝реЗрдВ?
рдЙрд╕ рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рд╕реНрдЯрд╛рд░ рд╡рд╛рд░реНрд╕ рдХреЗ рдирд╛рдпрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ:
def get_character(id, calendar): if id == 1000: return Character( id=1000, name="Luke Skywalker", birth_year="19BBY" if calendar == Calendar.BBY else ... ) ...
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВ:
- рдпрд╣ рд╡рд░реНрдг рдХрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (
id
) рд▓реЗрддрд╛ рд╣реИред - рдпрд╣ рдЗрд╕реА рдЧрдгрдирд╛ (
calendar
) рд╕реЗ рдореВрд▓реНрдп рд▓реЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Calendar.BBY
рдЕрд░реНрде "рдпрд╡рди рдХреЗ рдпреБрджреНрдз рд╕реЗ рдкрд╣рд▓реЗ" рд╣реИ, рдЕрд░реНрдерд╛рдд "рдпрд╡рди рдХреЗ рдпреБрджреНрдз рд╕реЗ рдкрд╣рд▓реЗред" - рдпрд╣ рдЗрд╕ рдЪрд░рд┐рддреНрд░ рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдЙрд╕рдХреЗ рдирд╛рдо рдФрд░ рдЬрдиреНрдо рдХреЗ рд╡рд░реНрд╖ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджреЗрддрд╛ рд╣реИред
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдиреБрдмрдВрдз рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╣рд░ рдмрд╛рд░ рдмрд╣рд╛рд▓ рдХрд░рдирд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╡рд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдкрдврд╝рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЗрд╕реЗ рдХрдИ рдмрд╛рд░ рдкрдврд╝рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рддрд░реАрдХрд╛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЕрдЪреНрдЫрд╛ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рддрдВрддреНрд░ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдиреБрдмрдВрдз рдХрд╛ рдкрд╛рд▓рди рдХрд░рддрд╛ рд╣реИред рдЗрд╕реА рддрд░рд╣, рдпрд╣ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрдмрдВрдз рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╢рд░реАрд░ рдореЗрдВ рд╕рдореНрдорд╛рдирд┐рдд рд╣реИред рдПрдХ рдмрдбрд╝реЗ рдХреЛрдб рдмреЗрд╕ рдореЗрдВ, рдРрд╕реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЬрдиреНрдо рджреЗ рд╕рдХрддреА рд╣реИрдВред
рдЕрдм рдЙрд╕реА рдлрд╝рдВрдХреНрд╢рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬреЛ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ:
def get_character(id: int, calendar: Calendar) -> Character: ...
рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдЖрдкрдХреЛ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдиреБрдмрдВрдз рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХрд┐рд╕реА рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпрд╛ рд╣реИ, рдФрд░ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рджреЗрддрд╛ рд╣реИ, рдмрд╕ рдЗрд╕рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рдкрдврд╝реЗрдВред рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдкреНрд░рдгрд╛рд▓реА рд╕реНрдЯреЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░ рд╕рдХрддреА рд╣реИ рдФрд░ рдХреЛрдб рдореЗрдВ рдЕрдиреБрдмрдВрдз рдХрд╛ рдЕрдиреБрдкрд╛рд▓рди рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдПрдХ рдкреВрд░реА рдХрдХреНрд╖рд╛ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ!
рд╡рд┐рднрд┐рдиреНрди HTTP рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░
рд╣рдо рдПрдХ HTTP-API рд╡рд┐рдХрд╕рд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬреЛ рдЖрдкрдХреЛ рд╕реНрдЯрд╛рд░ рд╡рд╛рд░реНрд╕ рдХреЗ рдирд╛рдпрдХреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдмрдВрдз рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЛ рдПрдХ URL рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░рд┐рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (
id
) рдФрд░ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ
calendar
рдЧрдгрдирд╛ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдкреАрдЖрдИ рдХреЛ рдЪрд░рд┐рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдпрд╣рд╛рдБ API рдЕрдиреБрд░реЛрдз рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рджреЗрддрд╛ рд╣реИ:
curl -X GET https://api.starwars.com/characters/1000?calendar=BBY { "id": 1000, "name": "Luke Skywalker", "birth_year": "19BBY" }
Django рдореЗрдВ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ URL рдкрде рдФрд░ рдЗрд╕ рдкрде рдХреЗ рд╕рд╛рде рдХрд┐рдП рдЧрдП HTTP рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
urlpatterns = [ url("characters/<id>/", get_character) ]
рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрд░реЛрдз рдФрд░ URL рдкреИрд░рд╛рдореАрдЯрд░ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
id
) рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдпрд╣
calendar
рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдкрд╛рд░реНрд╕ рдФрд░ рдХрд╛рд╕реНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЖрд╡рд╢реНрдпрдХ рдЧрдгрдирд╛ рдХреЗ рд▓рд┐рдП рд╕рдВрдмрдВрдзрд┐рдд рдЧрдгрдирд╛ рд╕реЗ рдореВрд▓реНрдп рд╣реИред рдпрд╣ рд╕реНрдЯреЛрд░ рд╕реЗ рд╡рд░реНрдг рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░рддрд╛ рд╣реИ рдФрд░ JSON рдореЗрдВ рдХреНрд░рдордмрджреНрдз рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рджреЗрддрд╛ рд╣реИ рдФрд░ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд▓рд┐рдкрдЯрд╛ рд╣реЛрддрд╛ рд╣реИред
def get_character(request: IGWSGIRequest, id: str) -> JsonResponse: calendar = Calendar(request.GET.get("calendar", "BBY")) character = Store.get_character(id, calendar) return JsonResponse(asdict(character))
рдпрджреНрдпрдкрд┐ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ HTTP рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рдЕрдиреБрдмрдВрдз рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╕реЗ рд╣рдо рдирд╛рдо рдпрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдорд╛рдкрджрдВрдбреЛрдВ, рдпрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреНрд╖реЗрддреНрд░реЛрдВ рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рдХреНрдпрд╛ рдпрд╣ рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди-рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреЛ рд╡реИрд╕рд╛ рд╣реА рдЬрд╛рдирдХрд╛рд░реАрдкреВрд░реНрдг рдмрдирд╛рдпрд╛ рдЬрд╛рдП рдЬреЛ рдкреНрд░рдХрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рдорд╛рдирд╛ рдЧрдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рд╣реИ?
def get_character(id: int, calendar: Calendar) -> Character: ...
рдлрд╝рдВрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ (URL, рдХреНрд╡реЗрд░реА рдпрд╛ рдХреНрд╡реЗрд░реА рдмреЙрдбреА рдкреИрд░рд╛рдореАрдЯрд░) рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдорд╛рди рдХрд╛ рдкреНрд░рдХрд╛рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ HTTP рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдкрд╖реНрдЯ рдФрд░ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЕрдиреБрдмрдВрдз рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдкрд╛рд▓рди рдПрдХ рдкреНрд░рдХрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП?
рд╣рдо рдПрдХ
рдбреЗрдХреЛрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдлрд╝рдВрдХреНрд╢рди рдХреЛ Django рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдХрджрдо рдХреЛ Django рдврд╛рдВрдЪреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдЙрд╕реА рдорд┐рдбрд▓рд╡реЗрдпрд░, рд╕рдорд╛рди рдорд╛рд░реНрдЧреЛрдВ рдФрд░ рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рд╣рдо рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
@api_view def get_character(id: int, calendar: Calendar) -> Character: ...
api_view
рдбреЗрдХреЛрд░реЗрдЯрд░
api_view
рдХреЗ рд╡рд┐рд╡рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
def api_view(view): @functools.wraps(view) def django_view(request, *args, **kwargs): params = { param_name: param.annotation(extract(request, param)) for param_name, param in inspect.signature(view).parameters.items() } data = view(**params) return JsonResponse(asdict(data)) return django_view
рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХрд╛ рдПрдХ рдХрдард┐рди рдЯреБрдХрдбрд╝рд╛ рд╣реИред рдЖрдЗрдП рдЗрд╕рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо, рдЗрдирдкреБрдЯ рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд Django рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╣рдо рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ:
def api_view(view): @functools.wraps(view) def django_view(request, *args, **kwargs): ... return django_view
рдЕрдм Django рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред рдкрд╣рд▓реЗ рд╣рдореЗрдВ рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдкреНрд░рд╕реНрддреБрддрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рдкреБрдирд░рд╛рд╡реГрддрд┐ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдФрд░
рдирд┐рд░реАрдХреНрд╖рдг рдореЙрдбреНрдпреВрд▓
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:
for param_name, param in inspect.signature(view).parameters.items()
рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд▓рд┐рдП, рд╣рдо
extract
рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
рдлрд┐рд░ рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдбрд╛рд▓рддреЗ рд╣реИрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░рд┐рдВрдЧ
calendar
рдХреЛ рдЙрд╕ рдореВрд▓реНрдп рдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬреЛ
Calendar
рдЧрдгрдирд╛ рдХрд╛ рдПрдХ рддрддреНрд╡ рд╣реИ)ред
param.annotation(extract(request, param))
рд╣рдо рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ:
data = view(**params)
рдлрд╝рдВрдХреНрд╢рди
Character
рд╡рд░реНрдЧ рдХрд╛ рдПрдХ рдЬрд╝реЛрд░рджрд╛рд░ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЧрдпрд╛ рдорд╛рди рджреЗрддрд╛ рд╣реИред рд╣рдо рдЗрд╕реЗ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдмрджрд▓рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ JSON рдкреНрд░рд╛рд░реВрдк HTTP рдкреНрд░рддрд┐рд╕рд╛рдж рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ:
return JsonResponse(asdict(data))
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ Django рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рджреГрд╢реНрдп рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЕрдВрдд рдореЗрдВ,
extract
рдХрд╛рд░реНрдп рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
def extract(request: HttpRequest, param: Parameter) -> Any: if request.resolver_match.route.contains(f"<{param}>"): return request.resolver_match.kwargs.get(param.name) else: return request.GET.get(param.name)
рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдПрдХ URL рдкреИрд░рд╛рдореАрдЯрд░ рдпрд╛ рдПрдХ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЕрдиреБрд░реЛрдз URL рдкрде (рд╡рд╣ рдкрде рдЬрд┐рд╕реЗ рд╣рдордиреЗ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрдВрдЬреАрдХреГрдд рдХрд┐рдпрд╛ рдерд╛) рдЬреЛ Django URL рд▓реЛрдХреЗрдЯрд░ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд░реВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рд╣рдо рдкрде рдореЗрдВ рдкреИрд░рд╛рдореАрдЯрд░ рдирд╛рдо рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдХреЛрдИ рдирд╛рдо рд╣реИ, рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ URL рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЗрд╕реЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдпрд╣ рдПрдХ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИ рдФрд░ рд╣рдо рдЗрд╕реЗ рдирд┐рдХрд╛рд▓ рднреА рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдЕрдиреНрдп рддрд░реАрдХреЗ рд╕реЗред
рд╡рд╣ рд╕рдм рд╣реИред рдпрд╣ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдкреАрдЖрдИ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░
HTTP рдкреНрд░рддрд┐рд╕рд╛рдж (рдпрд╛рдиреА,
Character
) рдХреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдбреЗрдЯрд╛рдХреНрд▓рд╛рд╕ рдпрд╛ рдЯрд╛рдЗрдкрд┐рдВрдЧ рд╢рдмреНрджрдХреЛрд╢ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдПрдХ рдбреЗрдЯрд╛
рд╡рд░реНрдЧ рдПрдХ рдХреЙрдореНрдкреИрдХреНрдЯ рдХреНрд▓рд╛рд╕ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред
from dataclasses import dataclass @dataclass(frozen=True) class Character: id: int name: str birth_year: str luke = Character( id=1000, name="Luke Skywalker", birth_year="19BBY" )
Instagram рдЖрдорддреМрд░ рдкрд░ HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдореЙрдбрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрдирдХреА рдореБрдЦреНрдп рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВ:
- рд╡реЗ рд╕реНрд╡рддрдГ рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрдорд╛рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпрд╛рдБ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред
- рд╡реЗ рдЪреЗрдХрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдорд╛рди рдЯрд╛рдЗрдк рдЪреЗрдХ рдХреЗ рдЕрдзреАрди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
- рд╡реЗ
frozen=True
рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд░рдХреНрд╖рд╛ рдХреЛ рдмрдирд╛рдП рд░рдЦрддреЗ рд╣реИрдВред - рд╡реЗ рдкрд╛рдпрдерди рдорд╛рдирдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп 3.7, рдпрд╛ рдкрд╛рдпрдерди рдкреИрдХреЗрдЬ рдЗрдВрдбреЗрдХреНрд╕ рдореЗрдВ рдПрдХ рдмреИрдХрдкреЛрд░реНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВред
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, Instagram рдХреЗ рдкрд╛рд╕ рдПрдХ рдкреБрд░рд╛рдирд╛ рдХреЛрдб рдЖрдзрд╛рд░ рд╣реИ рдЬреЛ рдлрд╝рдВрдХреНрд╢рди рдФрд░ рдореЙрдбреНрдпреВрд▓ рдХреЗ рдмреАрдЪ рдкрд╛рд░рд┐рдд рдХрд┐рдП рдЧрдП рдмрдбрд╝реЗ, рдЕрдирдХреИрдкреНрдб рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╢рдмреНрджрдХреЛрд╢ рд╕реЗ рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рдЗрд╕ рд╕рднреА рдХреЛрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдирддреАрдЬрддрди, рд╣рдо, рдирдП рдХреЛрдб рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХрдХреНрд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкреБрд░рд╛рдиреЗ рдХреЛрдб рдореЗрдВ рд╣рдо
рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рд╢рдмреНрджрдХреЛрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдЯрд╛рдЗрдк рдПрдиреЛрдЯреЗрд╢рди рдЬреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдорд┐рд▓рддреА рд╣реИ рдФрд░, рдПрдХ рдХрд╛рд░реНрдп рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рдмрд┐рдирд╛, рдЯрд╛рдЗрдкрд┐рдВрдЧ рдХреНрд╖рдорддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
from mypy_extensions import TypedDict class Character(TypedDict): id: int name: str birth_year: str luke: Character = {"id": 1000} luke["name"] = "Luke Skywalker" luke["birth_year"] = 19
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐
рд╡рд░реНрдг рдлрд╝рдВрдХреНрд╢рди рдХреЛ
Character
рдЗрдХрд╛рдИ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдг рдЬрд╛рдирдХрд╛рд░реА рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рд╣рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддреЛ рд╣рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?
рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдлреНрд░реЗрдорд╡рд░реНрдХ рджреНрд╡рд╛рд░рд╛ рдкрдХрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реВрдЪрдирд╛ рдХреЗ рд╕рд╛рде HTTP рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@api_view("GET") def get_character(id: str, calendar: Calendar) -> Character: try: return Store.get_character(id) except CharacterNotFound: raise Http404Exception()
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдбреЗрдХреЛрд░реЗрдЯрд░ рдореЗрдВ HTTP рд╡рд┐рдзрд┐ рдХреЛ рднреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд HTTP рддрд░реАрдХреЛрдВ рдХреЛ рд╕реЗрдЯ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдХрд░рдг
HTTP API, HTTP рдореЗрдердб, рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдЯрд╛рдЗрдкреНрд╕ рдФрд░ рд░рд┐рд╕реНрдкрд╛рдВрд╕ рдЯрд╛рдЗрдкреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рдПрдкреАрдЖрдИ рдХреЛ рдЖрддреНрдорд╕рд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ URL рдкрде рдореЗрдВ
id
рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдФрд░ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдЧрдгрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд
calendar
рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ GET рдЕрдиреБрд░реЛрдз рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рдо рдпрд╣ рднреА рд╕реАрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдРрд╕реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ
Character
рдХреА рдкреНрд░рдХреГрддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдПрдХ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
рдЗрд╕ рд╕рд╛рд░реА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
OpenAPI рдПрдХ рдПрдкреАрдЖрдИ рд╡рд┐рд╡рд░рдг рдкреНрд░рд╛рд░реВрдк рд╣реИ рдЬрд┐рд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рд╣рд╛рдпрдХ рдЙрдкрдХрд░рдгреЛрдВ рдХрд╛ рдПрдХ рд╕рдореГрджреНрдз рд╕реЗрдЯ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдПрдХ рд╕рдВрдкреВрд░реНрдг рдкрд╛рд░рд┐рд╕реНрдерд┐рддрд┐рдХреА рддрдВрддреНрд░ рд╣реИред рдпрджрд┐ рд╣рдо рдПрдВрдбрдкреЙрдЗрдВрдЯ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдУрдкрдирдПрдкреАрдЖрдИ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реЛрдЧрд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрди рдЙрдкрдХрд░рдгреЛрдВ рдХреА рдХреНрд╖рдорддрд╛рдПрдВ рд╣реЛрдВрдЧреАред
paths: /characters/{id}: get: parameters: - in: path name: id schema: type: integer required: true - in: query name: calendar schema: type: string enum: ["BBY"] responses: '200': content: application/json: schema: type: object ...
рд╣рдо
get_character
API рдХреЗ рд▓рд┐рдП HTTP API рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд╛рдо, рдкреНрд░рдХрд╛рд░, рдЕрдиреБрд░реЛрдз рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЬрд╛рдирдХрд╛рд░реА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрд╣ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрдореВрд░реНрдд рд╕реНрддрд░ рдХрд╛ рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╕реНрддрд░ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдЙрдЪрд┐рдд рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЙрдиреНрд╣реЗрдВ рдЗрд╕ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдХреЗ рд▓рд┐рдП рдкрд╛рдпрдерди рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛрдб рдХреЛ рдкрдврд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрдирдЗрд╕ рдЖрдзрд╛рд░ рдкрд░, рдЖрдк рдЕрддрд┐рд░рд┐рдХреНрдд рдЯреВрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рд╛рдзрдиред рдпрд╣ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдмрд┐рдирд╛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд┐рдирд╛ рдЙрдирдХреА рд░реБрдЪрд┐ рдХреЗ HTTP API рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╣рдо рдпрд╣ рднреА рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдЯрд╛рдЗрдк-рд╕реЗрдлрд╝ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рджреЛрдиреЛрдВ рдкрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХрд╛рдо рд╣реЛред рдЗрд╕рдХреЗ рдХрд╛рд░рдг, рд╣рдо рдЕрдкрдиреЗ рдирд┐рдкрдЯрд╛рди рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдХ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдПрдкреАрдЖрдИ, рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрдбрд╝рд╛рдИ рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдПрдХ рдмреИрдХрд╡рд░реНрдб рдХрдореНрдкреИрдЯрд┐рдмрд┐рд▓рд┐рдЯреА рдЪреЗрдХ рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛрдб рдХрд╛ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ
id
,
name
рдФрд░
birth_year
name
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
birth_year
, рдФрд░ рддрдм рд╣рдо рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рд╕рднреА рдкрд╛рддреНрд░реЛрдВ рдХреЗ рдЬрдиреНрдорджрд┐рди рдирд╣реАрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ? рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ,
birth_year
рдкреИрд░рд╛рдореАрдЯрд░
birth_year
рд╡реИрдХрд▓реНрдкрд┐рдХ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛
birth_year
, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдмрд╕ рдХрд╛рдо рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрджреНрдпрдкрд┐ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рд╕реНрдкрд╖реНрдЯ рдЯрд╛рдЗрдкрд┐рдВрдЧ рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рдХрд╛рд░ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ (рдХрд╣рддреЗ рд╣реИрдВ, рдпрджрд┐ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЬрдиреНрдо рд╡рд░реНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдкрд╣рд▓реЗ рдЕрдирд┐рд╡рд╛рд░реНрдп рдерд╛ рдФрд░ рдлрд┐рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реЛ рдЧрдпрд╛ рддреЛ рдПрдкреАрдЖрдИ рдмрджрд▓ рдЬрд╛рдПрдЧрд╛)ред рд╣рдо рдПрдкреАрдЖрдИ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдЯреНрд░реИрдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдПрдкреАрдЖрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╕рд╣реА рд╕рдордп рдкрд░ рд╕рдВрдХреЗрдд рджреЗрдХрд░ рдЪреЗрддрд╛рд╡рдиреА рджреЗ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐, рдХреБрдЫ рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдХреЗ, рд╡реЗ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдо
рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреА рдПрдХ рдкреВрд░реА рд╢реНрд░реГрдВрдЦрд▓рд╛ рд╣реИ рдЬреЛ рдХрдВрдкреНрдпреВрдЯрд░ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рд╕реНрдкреЗрдХреНрдЯреНрд░рдо рдХрд╛ рдПрдХ рдкрдХреНрд╖ рдЖрд░рдкреАрд╕реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдЬреИрд╕реЗ рдереНрд░рд┐рдлреНрдЯ рдФрд░ рдЬреАрдЖрд░рдкреАрд╕реА рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рд╡реЗ рдЗрд╕рдореЗрдВ рднрд┐рдиреНрди рд╣реИрдВ рдХрд┐ рд╡реЗ рдЖрдо рддреМрд░ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдЦреНрдд рдкреНрд░рдХрд╛рд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЗ рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛрдб рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред рд╡реЗ HTTP рдХреЗ рдмрд┐рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ JSON рдХреЗ рдмрд┐рдирд╛ рднреАред
рджреВрд╕рд░реА рдУрд░, рдкрд╛рдпрдерди рдореЗрдВ рд▓рд┐рдЦрд┐рдд рд╡реЗрдм рдлреНрд░реЗрдорд╡рд░реНрдХ рд╣реИрдВ рдЬреЛ рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдЕрдиреБрдмрдВрдз рдирд╣реАрдВ рд░рдЦрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрд┐рдд рд░реВрдкрд░реЗрдЦрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрд╡рд╕рд░ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд╛рде рд╣реА рдЖрдкрдХреЛ HTTP + JSON рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЬрд╛рд░реА рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рддрдереНрдп рдореЗрдВ рдпреЛрдЧрджрд╛рди рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдХрдо рд╕реЗ рдХрдо рдкрд░рд┐рд╡рд░реНрддрди рдХрд░рдирд╛ рд╣реИред
рдпрд╣ рдзреНрдпрд╛рди рд░рдЦрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдирдпрд╛ рдирд╣реАрдВ рд╣реИред рджреГрдврд╝рддрд╛ рд╕реЗ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдХрдИ рд░реВрдкрд░реЗрдЦрд╛рдПрдВ рд▓рд┐рдЦреА рдЧрдИ рд╣реИрдВ рдЬреЛ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИрдВред рдЕрдЧрд░ рд╣рдо рдкрд╛рдпрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рдПрдкреАрд╕рд╛рд░реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХред
рд╣рдордиреЗ HTTP API рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдХрдореАрд╢рди рдХрд┐рдпрд╛ рд╣реИред рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣рдорд╛рд░реЗ рд╕рдВрдкреВрд░реНрдг рдХреЛрдб рдЖрдзрд╛рд░ рдореЗрдВ рдПрдкреАрдЖрдИ рдЯрд╛рдЗрдк рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ, рдпрд╣ рдореМрдЬреВрджрд╛ рдкреНрд░рд╕реНрддреБрддрд┐ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рд╣реИред рд╣рдордиреЗ рдЬреЛ рднреА рдХрд┐рдпрд╛ рдЙрд╕рдХрд╛ рдореВрд▓реНрдп рд╣рдорд╛рд░реЗ рд╕рднреА рдкреНрд░реЛрдЧреНрд░рд╛рдорд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИред рдЕрд░реНрдерд╛рддреН, рд╣рдо рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рдкреНрд░рд▓реЗрдЦрди рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрдЪрд╛рд░ рдХрд╛ рдПрдХ рдкреНрд░рднрд╛рд╡реА рд╕рд╛рдзрди рдмрди рдЧрдпрд╛ рд╣реИ рдЬреЛ рдЗрдВрд╕реНрдЯрд╛рдЧреНрд░рд╛рдо рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд┐рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред
рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдЖрдк рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдкреНрд░реЛрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ HTTP APIs рдХреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдХреИрд╕реЗ рдЕрдкреНрд░реЛрдЪ рдХрд░рддреЗ рд╣реИрдВ?
