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

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

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

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

рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП рдЕрдкрдиреА рдЦреБрдж рдХреА рдПрдкреАрдЖрдИ рдмрдирд╛рдПрдВ.

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

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

рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:

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

рдЗрдВрд╕реНрдЯрд╛рд▓реЗрд╢рди рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

pip install flask-restful

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

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рд╢реБрд░реВ рдХрд░реЗрдВ

рд╣рдо рдПрдХ рдмреЗрд╕рд┐рдХ рдХреЗ рд╕рд╛рде рдПрдХ RESTful API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдХреНрд░реВрдб рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛.

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

рд░реЗрд╕реНрдЯ рдХреНрдпрд╛ рд╣реИ?

REST API (рдкреНрд░рддрд┐рдирд┐рдзрд┐ рд░рд╛рдЬреНрдп рд╕реНрдерд╛рдирд╛рдВрддрд░рдг) рдПрдХ API рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдХреЗ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХреЗ рд▓рд┐рдП HTTP рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

REST API рдХреЛ рдХреБрдЫ рдорд╛рдирджрдВрдбреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛:

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

рд╕реАрдЖрд░рдпреВрдбреА рдХреНрдпрд╛ рд╣реИ?

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

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

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

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

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

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

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

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

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

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

рдЕрдм рд╣рдо 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

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

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

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

рдЕрдм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдПрдХ рдирдпрд╛ рдЙрджреНрдзрд░рдг рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ 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 рд╡рд┐рдзрд┐ рдиреЗ рдПрдХ рдЙрджреНрдзрд░рдг рдЖрдИрдбреА рд╕реНрд╡реАрдХрд╛рд░ рдХреАред рдлрд┐рд░, reqparse рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЗрд╕рдиреЗ рдЕрдиреБрд░реЛрдз рд╕реЗ рд▓реЗрдЦрдХ рдФрд░ рдЙрджреНрдзрд░рдг рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкреИрд░рд╛рдореНрд╕ рдбрд┐рдХреНрд╢рдирд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ред

рдпрджрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рд╡рд╛рд▓рд╛ рдЙрджреНрдзрд░рдг рдкрд╣рд▓реЗ рд╕реЗ рдореМрдЬреВрдж рд╣реИ, рддреЛ рд╡рд┐рдзрд┐ рдЙрдЪрд┐рдд рд╕рдВрджреЗрд╢ рдФрд░ рдХреЛрдб 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 рд╡рд┐рдзрд┐, рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди, рдПрдХ рдЖрдИрдбреА рдФрд░ рдПрдХ рдЗрдирдкреБрдЯ рд▓реЗрддреА рд╣реИ рдФрд░ 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 рд╕реЗрд╡рд╛ рддреИрдпрд╛рд░ рд╣реИ!

рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдХрд░ рдХреЛрдб рдХреЛ app.py рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рд╣реЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:

python3 app.py

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

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

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

рдПрдкреАрдЖрдИ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Requirements.txt рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпрд╛рдБ рд╣реЛрдВрдЧреА:

  • рдХреБрдкреНрдкреА
  • рдХреБрдкреНрдкреА-рдЖрд░рд╛рдорджрд╛рдпрдХ
  • рдЧрдирд┐рдХреЛрд░реНрди

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

рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ:

рд╡реЗрдм: 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
 

рдПрдкреАрдЖрдИ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА рдЖрдкрдХрд╛-random-heroku-name.herokuapp.com/ai-quotes.

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

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

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

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

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

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

2. рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдореЗрдВ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред

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

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

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

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

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

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

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

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

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

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

рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдПрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред

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

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

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

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

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

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

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

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

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╝реЗрдВ