Http рдЕрдиреБрд░реЛрдз рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ js рдореЗрдВ рдХрд░реАрдиреЗ рдХрд╛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░! рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд░рд╣рд╕реНрдп рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рджреБрдирд┐рдпрд╛ рдореЗрдВ рдХрдИ рддрдХрдиреАрдХреЛрдВ, рдкреНрд░рдерд╛рдУрдВ рдФрд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреИрдЯрд░реНрди (рдбрд┐рдЬрд╛рдЗрди) рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдХреНрд╕рд░, рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдирд╛, рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдирдпрд╛ рдХрд╣рд╛рдВ рдФрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред


рдЖрдЬ, http рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рдЖрд╡рд░рдг рдореЙрдбреНрдпреВрд▓ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд▓рд╛рднреЛрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ - рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рд╕реНрд╡рд╛рдЧрддред


рд╕рднреА рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдФрд░ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП - рд╕реНрд╡рд╛рдЧрдд рд╣реИ, рдЬреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддреЗ рд╣реИрдВ рдХрд┐ рдХрд░реА рдХреНрдпрд╛ рд╣реИ - рдореИрдВ рдХреЛрдб рдкрд░ рдЖрдкрдХреА рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рддрддреНрдкрд░ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ - рдкреВрд░реНрдгрддрд╛ рдХреА рдХреЛрдИ рд╕реАрдорд╛ рдирд╣реАрдВ рд╣реИред


рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ


рд▓реЗрдХрд┐рди рдХрд░реА рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдмрдпрд╛рди рд╕реЗ, рдЬрд╣рд╛рдВ рд╣рдо рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреНрд▓реЙрдЧ рдПрдкреАрдЖрдИ рд╣реИ (рдЕрд╕рд▓реА рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рднреА рдореИрдЪ рдПрдХ рджреБрд░реНрдШрдЯрдирд╛ рд╣реИрдВ):


  • /api/v1/index/ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдореБрдЦреНрдп рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧреА
  • /api/v1/news/ рд╕рдорд╛рдЪрд╛рд░ рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛
  • /api/v1/articles/ рдХреА рд╕реВрдЪреА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рд╡рд╛рдкрд╕ рдХрд░реЗрдЧрд╛
  • рдЕрдиреБрд░реЛрдз /api/v1/article/222/ рдЖрдИрдбреА 222 рдХреЗ рд╕рд╛рде рд▓реЗрдЦ рдкреГрд╖реНрда рдкрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛
  • /api/v1/article/edit/222/ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдЖрдИрдбреА 222 рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЦ рд╕рдВрдкрд╛рджрди рдкреНрд░рдкрддреНрд░ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛
    ... рдФрд░ рдЗрд╕реА рддрд░рд╣, рдЖрдЧреЗ, рдЖрдЧреЗ

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд╕реНрдХрд░рдг v1 рдХреА рдПрдкреАрдЖрдИ рдХреА рдУрд░ рдореБрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ (рдпрд╣ рдХрд┐рддрдирд╛ рдХрдо рдмрдврд╝реЗрдЧрд╛ рдФрд░ рдПрдХ рдирдпрд╛ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛) рдФрд░ рдлрд┐рд░ рдбреЗрдЯрд╛ рдЕрдиреБрд░реЛрдз рдХреЛ рдЖрдЧреЗ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░реЗрдВред


рдЗрд╕рд▓рд┐рдП, рдЬреЗрдПрд╕ рдХреЛрдб рдореЗрдВ, рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдИрдбреА 222 рдХреЗ рд╕рд╛рде рдПрдХ рд▓реЗрдЦ , рд╣рдореЗрдВ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ (рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдореВрд▓ рдЬреЗрдПрд╕ рд▓рд╛рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ):


 fetch('/api/v1/article/222/') .then(/* success */) .catch(/* error */) 

рдЙрд╕реА рд▓реЗрдЦ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпрд╣ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ:


 fetch('/api/v1/article/edit/222/') .then(/* success */) .catch(/* error */) 

рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╣реА рджреЗрдЦрд╛ рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдкрде рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ /api/v1/ рд▓рд┐рдП рдкрде рдФрд░ рд╕рдВрд╕реНрдХрд░рдг, рдФрд░ рдПрдХ рд▓реЗрдЦ /api/v1/article/ рдФрд░ /api/v1/article/edit/ ред


рд╣рдорд╛рд░реЗ рдкрд╕рдВрджреАрджрд╛ DRY (рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВ) рдирд┐рдпрдо рдХреЗ рдмрд╛рдж, рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЛрдб рдХрд╛ рдЕрдиреБрдХреВрд▓рди рдХреИрд╕реЗ рдХрд░реЗрдВ?


рд╣рдо рд╕реНрдерд┐рд░рд╛рдВрдХ рдореЗрдВ рдХреНрд╡реЗрд░реА рднрд╛рдЧ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:


 const API = '/api' const VERSION = '/v1' const ARTICLE = `${API}${VERSION}/article` 

рдФрд░ рдЕрдм рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:


рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд░реЛрдз


 fetch(`${ARTICLE}/222/`) 

рдЕрдиреБрдЪреНрдЫреЗрдж рд╕рдВрдкрд╛рджрди рдЕрдиреБрд░реЛрдз


 fetch(`${ARTICLE}/edit/222/`) 

рдХреЛрдб рдХрдо рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдПрдкреАрдЖрдИ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реНрдерд┐рд░рд╛рдВрдХ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдк рдФрд░ рдореИрдВ рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдзрд┐рдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред


рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рднреА рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдорд╛рд░рд╛ рдХрд╛рдо рдХрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рдзрд╛рди рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рд╣реИред


Http рд╕реЗрд╡рд╛рдУрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд


рд░рдгрдиреАрддрд┐ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рдЬрд┐рд╕реЗ рдХреЙрд▓ рдХрд░рдХреЗ рд╣рдо рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗред


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП


рд╣рдо рдореВрд▓ рднреНрд░реВрдг рдкрд░ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ (рдЪрд▓реЛ рдЗрд╕реЗ http рдХрд╣рддреЗ рд╣реИрдВред рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдкреВрд░реНрдг рдХреЛрдб рд╣реИ), рдЙрди рддрд░реНрдХреЛрдВ рдореЗрдВ, рдЬрд┐рдирдореЗрдВ рд╣рдо рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ:


 cosnt httpToArticleId222 = http({ url: '/api/v1/article/222/', method: 'POST' }) 

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ http рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ url рдФрд░ рд╡рд┐рдзрд┐ рдЕрдиреБрд░реЛрдз рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред


рдЕрдм, httpToArticleId222() рдХреЙрд▓ httpToArticleId222() рд╣рдо рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдкреАрдЖрдИ рдХреЛ рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреЗ рд╣реИрдВред


рдЖрдк рдкреЗрдЪреАрджрд╛ рдФрд░ рдЪрд░рдгрдмрджреНрдз рдбрд┐рдЬрд╝рд╛рдЗрди рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдо рд╡рд╛рдпрд░реНрдб рдПрдкреАрдЖрдИ рд░рд╛рд╕реНрддреЛрдВ рдХреЗ рд╕рд╛рде рддреИрдпрд╛рд░ рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЙрдиреНрд╣реЗрдВ http рд╕реЗрд╡рд╛рдПрдВ рдХрд╣реЗрдВрдЧреЗред


рддреЛ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдПрдХ рдПрдкреАрдЖрдИ рдХреЙрд▓ рд╕реЗрд╡рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рд╕рд╛рде рд╣реА рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рдмрд╛рдж рдХреЗ рд╕рднреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд┐рдзрд┐)


 const httpAPI = http({ url: '/api', method: 'POST' }) 

рдЕрдм рд╣рдо рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╕реЗрд╡рд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рд╣рдо рдПрдкреАрдЖрдИ рдХреЗ рдПрдХ рдЕрд▓рдЧ рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ httpAPI рд╕реЗрд╡рд╛ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рд╢рд╛рдЦрд╛ рдмрдирд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред


 const httpAPIv1 = httpAPI({ url: '/v1' }) 

рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рд╕реЗрд╡рд╛ рддреИрдпрд╛рд░ рд╣реИред рдЕрдм рд╣рдо рдЗрд╕рдореЗрдВ рд╕реЗ рдмрд╛рдХреА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдПрдБ рдмрдирд╛рдПрдБрдЧреЗ (рд▓реЗрдЦ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рддрд╛рддреНрдХрд╛рд▓рд┐рдХ рд╕реВрдЪреА рдпрд╛рдж рд░рдЦреЗрдВ)


рд╣реЛрдордкреЗрдЬ рдбреЗрдЯрд╛


 const httpAPIv1Main = httpAPIv1({ url: '/index' }) 

рд╕рдорд╛рдЪрд╛рд░ рдкреГрд╖реНрда рдбреЗрдЯрд╛


 const httpAPIv1News = httpAPIv1({ url: '/news' }) 

рд▓реЗрдЦ рд╕реВрдЪреА рдбреЗрдЯрд╛


 const httpAPIv1Articles = httpAPIv1({ url: '/articles' }) 

рдЕрдВрдд рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдореБрдЦреНрдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрддреЗ рд╣реИрдВ, рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛


 const httpAPIv1Article = httpAPIv1({ url: '/article' }) 

рд▓реЗрдЦ рд╕рдВрдкрд╛рджрди рдХрд╛ рдорд╛рд░реНрдЧ рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ? рдмреЗрд╢рдХ, рдЖрдкрдиреЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдерд╛, рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди httpAPIv1Article рд╕реЗ рдбреЗрдЯрд╛ рд▓реЛрдб рдХрд░ рд░рд╣реЗ рд╣реИрдВ


 const httpAPIv1ArticleEdit = httpAPIv1({ url: '/edit' }) 

рдПрдХ рдЫреЛрдЯрд╛ рддрд╛рд░реНрдХрд┐рдХ рдкрд░рд┐рдгрд╛рдо


рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдПрдХ рд╕реБрдВрджрд░ рд╕реВрдЪреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣реИрдВ, рдЬреЛ рд╣рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВред рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХреБрдЫ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╣рд╛рдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рд╣реИред


 export { httpAPIv1Main, httpAPIv1News, httpAPIv1Articles, httpAPIv1Article, httpAPIv1ArticleEdit } 

рдореИрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрд╡рд╛ рдЖрдпрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВ


 import { httpAPIv1Article } from 'services' 

рдФрд░ рдореИрдВ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдкрд╣рд▓реЗ рд╕рд╛рдордЧреНрд░реА рдХреА рдЖрдИрдбреА рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд╕рдВрдЧрдард┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддрд╛ рд╣реВрдВ (рдЬреИрд╕рд╛ рдХрд┐ рд╡реЗ рдХрд╣рддреЗ рд╣реИрдВ: "рдЖрд╕рд╛рди")


 httpAPIv1Article({ url: ArticleID // id  -   })() .then(/* success */) .catch(/* error */) 

рд╕реНрд╡рдЪреНрдЫ, рд╕реБрдВрджрд░, рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп (рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ)


рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ


рд╣рдо рдХрд░реАрдиреЗ рдХреЗ рдХрд╛рд░рдг рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ "рд▓реЛрдб" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдПрдХ рдмрд┐рдЯред
рдХрд░реА рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдзреАрд░реЗ-рдзреАрд░реЗ рдЕрдкрдиреЗ рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рдпрд╣ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ рдХреЗ рдмрд╛рдж рд╕рдорд╛рд░реЛрд╣ рд▓реМрдЯрдиреЗ рд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХреА рд╣реИред


рдПрдХ рдХреНрд▓рд╛рд╕рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рд╣реИред
рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд░рд╛рд╢рд┐ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо рдкрд╣рд▓реА рдмрд╛рд░ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ, рд╣рдо рдмрд╛рдж рдХреА рддрд╣ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдирдВрдмрд░ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рдпреЛрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░реЗ рдирдВрдмрд░ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЙрд╕рдХрд╛ рдХреЛрдб рд╣реИ (ES6 рд╡рд╛рдХреНрдп рд░рдЪрдирд╛)


 const sum = a => b => a + b 

рд╣рдо рдЗрд╕реЗ рдкрд╣рд▓реА рдмрд╛рд░ (рдЖрдВрд╢рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ) рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, sum13


 const sum13 = sum(13) 

рдЕрдм sum13 рдХреЛ рд╣рдо рд▓рд╛рдкрддрд╛ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рднреА рддрд░реНрдХ рдореЗрдВ рдХрд╣ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо 13 + рджреВрд╕рд░рд╛ рддрд░реНрдХ рд╣реЛрдЧрд╛


 sum13(7) // =>  20 

рдЦреИрд░, рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдп рдкрд░ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдП?


рд╣рдо http рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рднреНрд░реВрдг рдХреЗ рдКрдкрд░ рдЖрд╡рд░рдг рд╣реЛрдЧрд╛


 function http (paramUser) {} 

рдлрд╝рдВрдХреНрд╢рди рдХреЙрд▓ рдХреЗ рд╕рдордп рдкрд╛рд░рдордЙрдЬрд╝рд░ рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИрдВ


рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рддрд░реНрдХ рдЬреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░реЗрдВред


рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝реЗрдВред


 function http (paramUser) { /** *  -,    * @type {string} */ let param = { method: 'GET', credentials: 'same-origin' } } 

рдФрд░ рдлрд┐рд░ paramGen рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдирд┐рд░реНрдзрд╛рд░рд┐рдд (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдХреЗрд╡рд▓ рджреЛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╡рд┐рд▓рдп) рджреНрд╡рд╛рд░рд╛ рд╕реЗрдЯ рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдкреИрд░рд╛рдореАрдЯрд░ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред


 function http (paramUser) { /** *  -,    * @type {string} */ let param = { method: 'GET', credentials: 'same-origin' } /** *   , *  url  ,          * * @param {object} param   * @param {object} paramUser ,    * * @return {object}     */ function paramGen (param, paramUser) { let url = param.url || '' let newParam = Object.assign({}, param, paramUser) url += paramUser.url || '' newParam.url = url return newParam } } 

рд╣рдо рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ, рд╣рдо рдХрд░реА рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ


рдлрд╝рдВрдХреНрд╢рди, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХрдкрдбрд╝реЗ рдФрд░ http рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдпрд╛ рдЧрдпрд╛, рд╣рдореЗрдВ рдЗрд╕рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред


 function http (paramUser) { /** *  -,    * @type {string} */ let param = { method: 'GET', credentials: 'same-origin' } /** *   , *  url  ,          * * @param {object} param   * @param {object} paramUser ,    * * @return {object}     */ function paramGen (param, paramUser) { let url = param.url || '' url += paramUser.url || '' let newParam = Object.assign({}, param, paramUser); newParam.url = url return newParam } /** *  ,     *  ,      * *  : * * -    ,        ,     * -   ,           * -   ,      * * @param {object} param ,       * @param {object} paramUser ,   * * @return {function || promise}   ,    (fetch),     */ function fabric (param, paramUser) { if (paramUser) { if (typeof paramUser === 'string') { return fabric.bind(null, paramGen(param, { url: paramUser })) } return fabric.bind(null, paramGen(param, paramUser)) } else { //  ,   ,   param    url, //       :) return fetch(param.url, param) } } return fabric.bind(null, paramGen(param, paramUser)) } 

Http рдлрд╝рдВрдХреНрд╢рди рдХреА рдкрд╣рд▓реА рдХреЙрд▓ рдлреИрдмреНрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рдкрд╛рд░рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ (рдФрд░ paramGen рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░), рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдЧрд╛ рдШрдВрдЯреЗ рдмрд╛рдж рдореЗрдВ рдлреЛрди рдХрд░реЗрдВред


рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдиреБрд░реЛрдз рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ


 let httpGift = http({ url: '//omozon.ru/givemegift/' }) 

рдФрд░ httpGift рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реБрдП , рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдкреИрд░рд╛рдореАрдЯрд░ рд▓рд╛рдЧреВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ, рдпрджрд┐ рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рдирдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рдЬрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП httpGift рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕реЗ рдмрд┐рдирд╛ рдмрд╣рд╕ рдХреЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред


 httpGift() .then(/* success */) .catch(/* error */) 

рдкрд░рд┐рдгрд╛рдо


рд╡рд┐рднрд┐рдиреНрди рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд░реА рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдореЙрдбреНрдпреВрд▓ рдХреЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЙрдЪреНрдЪ рд▓рдЪреАрд▓рд╛рдкрди рдФрд░ рдкрд░реАрдХреНрд╖рдг рдореЗрдВ рдЖрд╕рд╛рдиреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реЗрд╡рд╛рдУрдВ рдХреА рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддреЗ рд╕рдордпред


рдпрд╣ рдРрд╕рд╛ рд╣реИ рдЬреИрд╕реЗ рдХрд┐ рд╣рдо рдПрдХ рдорд┐рдиреА-рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдЯреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣рдо рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд┐рдВрдЧрд▓ рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред


рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрдпреЛрдЧреА рдереА, рдЬреЛрд░ рд╕реЗ рдордд рдорд╛рд░реЛ, рдпрд╣ рдореЗрд░реЗ рдЬреАрд╡рди рдХрд╛ рдкрд╣рд▓рд╛ рд▓реЗрдЦ рд╣реИ :)


рд╕рднреА рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб, рдЬрд▓реНрдж рд╣реА рдорд┐рд▓рддреЗ рд╣реИрдВ!

Source: https://habr.com/ru/post/hi422661/


All Articles