рдкрд╛рдпрдерди рдореЗрдВ рдПрдХ рдПрдкреАрдЖрдИ рд▓рд┐рдЦрдирд╛ (рдлреНрд▓рд╛рд╕реНрдХ рдФрд░ рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде)



рдпрджрд┐ рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрди рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ рдЬреЛ рдПрдкреАрдЖрдИ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЦреБрд▓рддреЗ рд╣реИрдВред

рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрдИ рдЦреБрд▓реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рдЕрдиреВрдареА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?

рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ ред

рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдпрд╣ рдПрдХ рдЪреБрдиреМрддреАрдкреВрд░реНрдг рдХрд╛рдо рд▓рдЧрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╣рдо рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдпрд╣ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП


рдЖрдкрдХреЛ рдЬрд┐рд╕ API рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЙрд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:

  • рдЕрдЬрдЧрд░ рей
  • рдлреНрд▓рд╛рд╕реНрдХ - рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдФрд░ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдЖрд╕рд╛рди рдврд╛рдВрдЪрд╛;
  • рдлреНрд▓рд╛рд╕реНрдХ-рд░реЗрд╕реНрдЯрдлреБрд▓ рдлреНрд▓рд╛рд╕реНрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХреНрд╕рдЯреЗрдВрд╢рди рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдПрдХ рдЖрд░рдПрдПрд╕рдЯреА рдПрдкреАрдЖрдИ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдиреНрдпреВрдирддрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд╕реНрдерд╛рдкрдирд╛ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИ:

pip install flask-restful 

рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рдореБрдлреНрдд рдЧрд╣рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ:
рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдмреЙрдЯ рд╡рд┐рдХрд╛рд╕ C # - рдЕрдЧрд╕реНрдд 26тАУ28 рдореЗрдВред рдирд┐: рд╢реБрд▓реНрдХ рдЧрд╣рди рдЬреЛ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдПрдкреАрдЖрдИ рдФрд░ рдЕрдиреНрдп рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдореЗрдВ рд╕рд╣рд╛рдпрдХ рдмреЙрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рддреАрди рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рд╕реЗ 30,000 рд░реВрдмрд▓ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдВрдЧреЗ ред
рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ

рд╣рдо рдмреБрдирд┐рдпрд╛рджреА CRUID рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ RESTful API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред

рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рджреЛ рд╢рдмреНрджреЛрдВ рдХреЛ рджреЗрдЦреЗрдВред

REST рдХреНрдпрд╛ рд╣реИ?

REST API (рд░рд┐рдкреНрд░реЗрдЬреЗрдВрдЯреЗрдЯрд┐рд╡ рд╕реНрдЯреЗрдЯ рдЯреНрд░рд╛рдВрд╕рдлрд░) рдПрдХ API рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХреНрд╕рдЪреЗрдВрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддрд╛ рд╣реИред

рдмрд╛рдХреА рдПрдкреАрдЖрдИ рдХреБрдЫ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП:

  • рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░: рдХреНрд▓рд╛рдЗрдВрдЯ рдпреВрдЬрд░ рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдмреИрдХрдПрдВрдб рдФрд░ рдбреЗрдЯрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рд╕рд╛рде рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рд╕реНрд╡рддрдВрддреНрд░ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рджреВрд╕рд░реЗ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
  • рд╕реНрдЯреЗрдЯрд▓реЗрд╕ - рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдИ рдХреНрд▓рд╛рдЗрдВрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реНрдерд┐рддрд┐ рдкрд░ рд╕рддреНрд░ рд╕реНрдерд┐рддрд┐ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИред
  • Cacheability - рдЧреНрд░рд╛рд╣рдХ рд╕рдордЧреНрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдмреЗрд╣рддрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреИрд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ CRUD рдХреНрдпрд╛ рд╣реИ?

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

REST API рдореЗрдВ, рдЕрдиреБрд░реЛрдз рдкреНрд░рдХрд╛рд░ рдФрд░ рдЕрдиреБрд░реЛрдз рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреЛрд╕реНрдЯ, рдкрд╛рдиреЗ, рдбрд╛рд▓рдиреЗ, рд╣рдЯрд╛рдиреЗ рдЬреИрд╕реА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЬрд╝рд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВред

рдЕрдм рдЬрдм рд╣рдо рдореВрд▓ рд╢рдмреНрдж рд╕рдордЭ рдЧрдП рд╣реИрдВ, рддреЛ рдЖрдк рдПрдкреАрдЖрдИ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдбрд┐рдЬрд╝рд╛рдЗрди


рдЖрдЗрдП рдХреГрддреНрд░рд┐рдо рдмреБрджреНрдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЙрджреНрдзрд░рдгреЛрдВ рдХрд╛ рдПрдХ рднрдВрдбрд╛рд░ рдмрдирд╛рдПрдВред рдПрдЖрдИ рдЖрдЬ рд╕рдмрд╕реЗ рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдФрд░ рдкрд╛рдпрдерди рдПрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрдХрд░рдг рд╣реИред

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

рдЖрдЗрдП рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓ рдЖрдпрд╛рдд рдХрд░рдХреЗ рдФрд░ рдлреНрд▓рд╛рд╕реНрдХ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░реЗрдВ:

 from flask import Flask from flask_restful import Api, Resource, reqparse import random app = Flask(__name__) api = Api(app) 

рдЗрд╕ рд╕реНрдирд┐рдкреЗрдЯ рдореЗрдВ, рдлреНрд▓рд╛рд╕реНрдХ, рдПрдкреА, рдФрд░ рд╕рдВрд╕рд╛рдзрди рд╡реЗ рдХрдХреНрд╖рд╛рдПрдВ рд╣реИрдВ рдЬрд┐рдирдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Reqparse рдПрдХ рдлреНрд▓рд╛рд╕реНрдХ-рд░реЗрд╕реНрдЯрдлреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд╣реИ ... рдЖрдкрдХреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрджреНрдзрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЙрдбреНрдпреВрд▓ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдЕрдм рд╣рдо рдПрдХ AI рдХреЛрдЯреНрд╕ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдмрдирд╛рдПрдВрдЧреЗред

рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдкреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

  • рдбрд┐рдЬрд┐рдЯрд▓ рдЖрдИрдбреА
  • рдЙрджреНрдзрд░рдг рдХреЗ рд▓реЗрдЦрдХ рдХрд╛ рдирд╛рдо;
  • рдмреЛрд▓реАред

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

 ai_quotes = [ { "id": 0, "author": "Kevin Kelly", "quote": "The business plans of the next 10,000 startups are easy to forecast: " + "Take X and add AI." }, { "id": 1, "author": "Stephen Hawking", "quote": "The development of full artificial intelligence could " + "spell the end of the human raceтАж " + "It would take off on its own, and re-design " + "itself at an ever increasing rate. " + "Humans, who are limited by slow biological evolution, " + "couldn't compete, and would be superseded." }, { "id": 2, "author": "Claude Shannon", "quote": "I visualize a time when we will be to robots what " + "dogs are to humans, " + "and I'm rooting for the machines." }, { "id": 3, "author": "Elon Musk", "quote": "The pace of progress in artificial intelligence " + "(I'm not referring to narrow AI) " + "is incredibly fast. Unless you have direct " + "exposure to groups like Deepmind, " + "you have no idea how fast тАФ it is growing " + "at a pace close to exponential. " + "The risk of something seriously dangerous " + "happening is in the five-year timeframe." + "10 years at most." }, { "id": 4, "author": "Geoffrey Hinton", "quote": "I have always been convinced that the only way " + "to get artificial intelligence to work " + "is to do the computation in a way similar to the human brain. " + "That is the goal I have been pursuing. We are making progress, " + "though we still have lots to learn about " + "how the brain actually works." }, { "id": 5, "author": "Pedro Domingos", "quote": "People worry that computers will " + "get too smart and take over the world, " + "but the real problem is that they're too stupid " + "and they've already taken over the world." }, { "id": 6, "author": "Alan Turing", "quote": "It seems probable that once the machine thinking " + "method had started, it would not take long " + "to outstrip our feeble powersтАж " + "They would be able to converse " + "with each other to sharpen their wits. " + "At some stage therefore, we should " + "have to expect the machines to take control." }, { "id": 7, "author": "Ray Kurzweil", "quote": "Artificial intelligence will reach " + "human levels by around 2029. " + "Follow that out further to, say, 2045, " + "we will have multiplied the intelligence, " + "the human biological machine intelligence " + "of our civilization a billion-fold." }, { "id": 8, "author": "Sebastian Thrun", "quote": "Nobody phrases it this way, but I think " + "that artificial intelligence " + "is almost a humanities discipline. It's really an attempt " + "to understand human intelligence and human cognition." }, { "id": 9, "author": "Andrew Ng", "quote": "We're making this analogy that AI is the new electricity." + "Electricity transformed industries: agriculture, " + "transportation, communication, manufacturing." } ] 

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

рдЪрд▓рд┐рдП GET рд╡рд┐рдзрд┐ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдпрджрд┐ рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЕрдкрдиреА рдЖрдИрдбреА рдпрд╛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрджреНрдзрд░рдг рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдХреЗ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджреНрдзрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред

 class Quote(Resource): def get(self, id=0): if id == 0: return random.choice(ai_quotes), 200 for quote in ai_quotes: if(quote["id"] == id): return quote, 200 return "Quote not found", 404 

рдЬреАрдИрдЯреА рд╡рд┐рдзрд┐ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрджреНрдзрд░рдг рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдИрдбреА рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдорд╛рди рд╣реЛрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп, рдХреЛрдИ рдЖрдИрдбреА рд╕реЗрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдпрджрд┐ рдпрд╣ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЙрджреНрдзрд░рдгреЛрдВ рдХреЗ рдмреАрдЪ рдЦреЛрдЬ рдХрд░рддреА рд╣реИ рдФрд░ рдПрдХ рдХреЛ рдвреВрдВрдврддреА рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рд╢рд╛рдорд┐рд▓ рд╣реИред рдпрджрд┐ рдХреБрдЫ рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ, рддреЛ рд╕рдВрджреЗрд╢ "404 рдирд╣реАрдВ рдкрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ" рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдпрд╛рдж рд░рдЦреЗрдВ: рдпрджрд┐ рдЕрдиреБрд░реЛрдз рд╕рдлрд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдирд╣реАрдВ рдорд┐рд▓рд╛ рддреЛ 404 рдкрд░ рд╡рд┐рдзрд┐ 200 рдХрд╛ HTTP рд╕реНрдЯреЗрдЯрд╕ рд▓реМрдЯрд╛рддреА рд╣реИред

рдЕрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдирдпрд╛ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ POST рд╡рд┐рдзрд┐ рдмрдирд╛рддреЗ рд╣реИрдВ

рдпрд╣ рд▓рд┐рдЦрддреЗ рд╣реА рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЙрджреНрдзрд░рдг рдХрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдорд┐рд▓ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, POST рдЕрдиреБрд░реЛрдз рдмреЙрдбреА (рд▓реЗрдЦрдХ рдФрд░ рдЙрджреНрдзрд░рдг рдкрд╛рда) рдореЗрдВ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП reqparse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред

 def post(self, id): parser = reqparse.RequestParser() parser.add_argument("author") parser.add_argument("quote") params = parser.parse_args() for quote in ai_quotes: if(id == quote["id"]): return f"Quote with id {id} already exists", 400 quote = { "id": int(id), "author": params["author"], "quote": params["quote"] } ai_quotes.append(quote) return quote, 201 

рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдореЗрдВ, POST рд╡рд┐рдзрд┐ рдиреЗ рдЙрджреНрдзрд░рдг рдЖрдИрдбреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реАред рдлрд┐рд░, рд░реЗрдХрдкрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реЗрдЦрдХ рдФрд░ рдХреНрд╡реЗрд░реА рд╕реЗ рдПрдХ рдЙрджреНрдзрд░рдг рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкрд░рдо рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджреНрдзрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рд╕рдВрдмрдВрдзрд┐рдд рд╕рдВрджреЗрд╢ рдФрд░ рдХреЛрдб 400 рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреА рд╣реИред

рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджреНрдзрд░рдг рдЕрднреА рддрдХ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдФрд░ рд▓реЗрдЦрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЕрдиреНрдп рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреА рд╣реИред рдлрд┐рд░ рд╡рд╣ ai_quotes рд╕реВрдЪреА рдореЗрдВ рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдФрд░ рдХреЛрдб 201 рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдмреЛрд▓реА рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рджреЗрддрд╛ рд╣реИред

рдЕрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдореМрдЬреВрджрд╛ рдЙрджреНрдзрд░рдг рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ PUT рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВред

 def put(self, id): parser = reqparse.RequestParser() parser.add_argument("author") parser.add_argument("quote") params = parser.parse_args() for quote in ai_quotes: if(id == quote["id"]): quote["author"] = params["author"] quote["quote"] = params["quote"] return quote, 200 quote = { "id": id, "author": params["author"], "quote": params["quote"] } ai_quotes.append(quote) return quote, 201 

PUT рдкрджреНрдзрддрд┐, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди, ID рдФрд░ рдЗрдирдкреБрдЯ рд▓реЗрддреА рд╣реИ рдФрд░ рдкрд╛рд░реНрдХреНрд╕ reqparse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрджреНрдзрд░рдг рдХрд░рддреА рд╣реИред

рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рдЙрджреНрдзрд░рдг рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЗрд╕реЗ рдирдП рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдЕрдкрдбреЗрдЯ рдХрд░реЗрдЧреА рдФрд░ рдлрд┐рд░ рдХреЛрдб 200 рдХреЗ рд╕рд╛рде рдПрдХ рдЕрджреНрдпрддрди рдЙрджреНрдзрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧреАред рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЙрджреНрдзрд░рдг рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреЛрдб 201 рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЕрдВрдд рдореЗрдВ, рдЖрдЗрдП рдПрдХ рдЙрджреНрдзрд░рдг рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ DELETE рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рдЕрдм рдкреНрд░реЗрд░рдгрд╛рджрд╛рдпрдХ рдирд╣реАрдВ рд╣реИред

 def delete(self, id): global ai_quotes ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id] return f"Quote with id {id} is deleted.", 200 

рдпрд╣ рд╡рд┐рдзрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦрддреЗ рд╕рдордп рдЙрджреНрдзрд░рдг рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ ai_quotes рд╕реВрдЪреА рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рд╕реВрдЪреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдбреЗрдЯ рдХрд░рддреА рд╣реИред

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

 api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>") if __name__ == '__main__': app.run(debug=True) 

рд╣рдорд╛рд░реА REST API рд╕реЗрд╡рд╛ рддреИрдпрд╛рд░ рд╣реИ!

рдЕрдЧрд▓рд╛, рд╣рдо рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЗрд╕реЗ рдЪрд▓рд╛рдХрд░ рдРрдк рдХреЛрдб рдХреЛ рдлрд╛рдЗрд▓ рдореЗрдВ рд╕реЗрд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 python3 app.py 

рдЕрдЧрд░ рд╕рдм рдареАрдХ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓реЗрдЧрд╛:

* рдбрд┐рдмрдЧ рдореЛрдб: рдкрд░
* 127.0.0.1 рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ: 5000 / (рдкреНрд░реЗрд╕ CTRL + C рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП)
* рд╕реНрдЯреИрдЯ рдХреЗ рд╕рд╛рде рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛
* рдбреАрдмрдЧрд░ рд╕рдХреНрд░рд┐рдп рд╣реИ!
* рдбреАрдмрдЧрд░ рдкрд┐рди: XXXXXXX

рдкрд░реАрдХреНрд╖рдг рдПрдкреАрдЖрдИ

рдПрдкреАрдЖрдИ рдмрдирд╛рдП рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдпрд╣ рдХрд░реНрд▓ рдХрдВрд╕реЛрд▓ рдпреВрдЯрд┐рд▓рд┐рдЯреА рдпрд╛ рдЗрдирд╕реЛрдореНрдирд┐рдпрд╛ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд░реИрдкрд┐рдб рдПрдкреАрдЖрдИ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ

рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдмрд╛рдЬрд╝рд╛рд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ 10,000 рд╕реЗ рдЕрдзрд┐рдХ рдПрдкреАрдЖрдИ (рдФрд░ рд▓рдЧрднрдЧ 1 рдорд┐рд▓рд┐рдпрди рдбреЗрд╡рд▓рдкрд░реНрд╕) рд╣реИрдВред

рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рди рдХреЗрд╡рд▓ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдПрдкреАрдЖрдИ рдХреЛ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рднреА рджреЗрддрд╛ рд╣реИред

рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП , рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдХреБрдЫ рд╕рд░реНрд╡рд░ рдкрд░ рдЗрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдо рд╣рд░реЛрдХреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдореЗрдВ рдХреЛрдИ рдХрдард┐рдирд╛рдИ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП ( рдЖрдк рдпрд╣рд╛рдВ рдЙрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рди рд╕рдХрддреЗ рд╣реИрдВ )ред

рд╣рд░реНрдХреЛ рдкрд░ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ

1. рд╣рд░реЛрдХреВ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВред

рдкрд╣рд▓рд╛ рдХрджрдо рд╣реЗрд░реЛрдХреВ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдЗрдВрдЯрд░рдлреЗрд╕ (рд╕реАрдПрд▓рдЖрдИ) рдХреЛ рдкрдВрдЬреАрдХреГрдд рдФрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реИред рдпрд╣ рдЙрдмрдВрдЯреВ 16+ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд╕реБрдбреЛрдХреВ рд╕реНрдиреИрдк рд╣реЙрдХреВ -рдХреНрд▓рд╛рд╕рд┐рдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ

рдлрд┐рд░ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:

heroku рд▓реЙрдЧрд┐рди

2. рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЕрдм рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓реЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

  • рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред рдЖрд╡рд╢реНрдпрдХ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЗ рд╕рд╛рде;
  • Procfile, рдЬреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реА рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП;
  • .itignore - рд╕рд░реНрд╡рд░ рдкрд░ рдЖрд╡рд╢реНрдпрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБред рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА:

  • рдХреБрдкреНрдкреА
  • рдХреБрдкреНрдкреА рдХреЗ рд╢реЛрдХрд╣рд╛рд░рд╛
  • gunicorn

рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ: рд╣рдордиреЗ рд╕реВрдЪреА рдореЗрдВ gunicorn (Python WSGI HTTP рд╕рд░реНрд╡рд░) рдЬреЛрдбрд╝рд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рдЕрдкрдирд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

Procfile рдореЗрдВ рд╣реЛрдЧрд╛:

рд╡реЗрдм: gunicorn рдРрдк: рдРрдк

.Gitignore рдХреА рд╕рд╛рдордЧреНрд░реА:

 *.pyc __pycache__/ 

рдЕрдм рдЬрдм рдлрд╛рдЗрд▓реЗрдВ рдмрди рдЬрд╛рддреА рд╣реИрдВ, рддреЛ рд╣рдо git рд░реЗрдкреЛ рдФрд░ рдХрдорд┐рдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ:

 git init git add git commit -m "First API commit" 

3. рдПрдХ рдирдпрд╛ рд╣рд░реЛрдХреВ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВред

 heroku create 

рд╣рдо рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЛ рджреВрд░рд╕реНрде рд╣рд░реЛрдХреВ рд░реЗрдкреЛ рдореЗрдВ рднреЗрдЬрддреЗ рд╣реИрдВ:

 git push heroku master 

рдЕрдм рдЖрдк рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдХреЛ рдЦреЛрд▓рдХрд░ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 heroku ps:scale web=1 heroku open 

API рдЖрдкрдХреЗ-random-heroku-name.herokuapp.com/ai-quotes рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛ред

рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рдмрд╛рдЬрд╝рд╛рд░ рдореЗрдВ рдЕрдкрдиреЗ рдкрд╛рдпрдерди рдПрдкреАрдЖрдИ рдХреЛ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ

рд╣рд░реЛрдХреВ рдкрд░ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рд░реИрдкрд┐рдб рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╡рд┐рд╖рдп рдкрд░ рд╡рд┐рд╕реНрддреГрдд рдкреНрд░рд▓реЗрдЦрди рд╣реИ ред

1. рдПрдХ RapidAPI рдЦрд╛рддрд╛ рдмрдирд╛рдПрдБред



рдПрдХ рдореБрдлреНрдд рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ - рдпрд╣ рдлреЗрд╕рдмреБрдХ, Google, GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



2. рдирд┐рдпрдВрддреНрд░рдг рдХрдХреНрд╖ рдореЗрдВ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред



3. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░реЗрдВред



4. "рдРрдб рдПрдкреАрдЖрдИ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдкреЗрдЬ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



5. рдЕрдм рдЖрдк рдпрд╛ рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдУрдкрдирдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрд╡реИрдЧрд░-рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред



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



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

рдПрдХ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, "рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рдмрдирд╛рдПрдБ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред



рдЕрдиреНрдп рд╕рднреА API рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдПрдВред рд╡рд╣ рд╕рдм рд╣реИ! рдмрдзрд╛рдИ рд╣реЛ, рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рд╣реИ!

рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реИ, рддреЛ рдПрдкреАрдЖрдИ рдкреЗрдЬ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:



рдирд┐рд╖реНрдХрд░реНрд╖


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ RESTful API рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреА рдЦреЛрдЬ рдХреА, рд╕рд╛рде рд╣реА Heroku cloud рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рд░реИрдкрд┐рдбреИрдкрд┐ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреАред

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

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

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


All Articles