рдпрджрд┐ рдЖрдк рдпрд╣ рд▓реЗрдЦ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рдПрдкреАрдЖрдИ (рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлрд╝реЗрд╕) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред
рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдХрдИ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдЬреЛрдбрд╝рдХрд░, рдЖрдк рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдмрдврд╝рд╛ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдкреВрд░рдХ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЖрдкрдиреЗ рдПрдХ рдЕрдиреВрдареА рд╕реБрд╡рд┐рдзрд╛ рд╡рд┐рдХрд╕рд┐рдд рдХреА рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рд╕рдореБрджрд╛рдп рдХреЗ рд╕рд╛рде рд╕рд╛рдЭрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ?
рдЙрддреНрддрд░ рд╕рд░рд▓ рд╣реИ: рдЖрдкрдХреЛ рдЪрд╛рд╣рд┐рдП
рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдПрдХ рдХрдард┐рди рдХрд╛рдо рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдо рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдПрдВрдЧреЗ рдХрд┐ рдкрд╛рдпрдерди рдХреЗ рд╕рд╛рде рдпрд╣ рдХреИрд╕реЗ рдХрд░реЗрдВред
рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП
рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ:
- рдкрд╛рдпрдерди 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
рдЕрдЧрд░ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛ рддреЛ рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдорд┐рд▓реЗрдЧрд╛:
* рдбрд┐рдмрдЧ рдореЛрдб: рдЪрд╛рд▓реВ
* рдкрд░ рдЪрд▓ рд░рд╣рд╛ рд╣реИ
* рд╕реНрдЯреЗрдЯ рдХреЗ рд╕рд╛рде рдкреБрдирдГ рдЖрд░рдВрдн рдХрд░рдирд╛
* рдбрд┐рдмрдЧрд░ рд╕рдХреНрд░рд┐рдп рд╣реИ!
* рдбрд┐рдмрдЧрд░ рдкрд┐рди: XXXXXXX
рдПрдкреАрдЖрдИ рдХрд╛ рдкрд░реАрдХреНрд╖рдг
рдПрдкреАрдЖрдИ рдмрдирдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣ рдХрд░реНрд▓ рдХрдВрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдпрд╛ рдЗрдирд╕реЛрдореНрдирд┐рдпрд╛ рд░реЗрд╕реНрдЯ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╛ рд░реИрдкрд┐рдб рдПрдкреАрдЖрдИ рдкрд░ рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рдорд╛рд░реА рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдирд╛
рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ 10 рд╕реЗ рдЕрдзрд┐рдХ рдПрдкреАрдЖрдИ (рдФрд░ рд▓рдЧрднрдЧ 000 рдорд┐рд▓рд┐рдпрди рдбреЗрд╡рд▓рдкрд░реНрд╕) рдХреЗ рд╕рд╛рде рджреБрдирд┐рдпрд╛ рдХрд╛ рд╕рдмрд╕реЗ рдмрдбрд╝рд╛ рдмрд╛рдЬрд╝рд╛рд░ рд╣реИред
рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рди рдХреЗрд╡рд▓ рддреГрддреАрдп-рдкрдХреНрд╖ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХрд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдПрдкреАрдЖрдИ рдЬрд▓реНрджреА рдФрд░ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреА рднреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕реЗ
рд╣реЗрд░реЛрдХреВ рдкрд░ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВ
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
рдПрдкреАрдЖрдИ рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧреА
рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рдореЗрдВ рдЕрдкрдирд╛ рдкрд╛рдпрдерди рдПрдкреАрдЖрдИ рдХреИрд╕реЗ рдЬреЛрдбрд╝реЗрдВ
рдПрдХ рдмрд╛рд░ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рд╣реЗрд░реЛрдХреВ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реЛ рдЬрд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЗрд╕реЗ рд░реИрдкрд┐рдб рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ
1. рдПрдХ RapidAPI рдЦрд╛рддрд╛ рдмрдирд╛рдПрдБред
рд╣рдо рдПрдХ рдирд┐рдГрд╢реБрд▓реНрдХ рдЦрд╛рддрд╛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ - рдпрд╣ Facebook, Google, GitHub рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
2. рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдореЗрдВ рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВред
3. рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░реЗрдВред
4. "рдПрдкреАрдЖрдИ рдЬреЛрдбрд╝реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдПрдХ рдирдпрд╛ рдкреЗрдЬ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдЖрдк рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
5. рдЕрдм рдЖрдк рдпрд╛ рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдкреАрдЖрдИ рдПрдВрдбрдкреЙрдЗрдВрдЯ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЦреИрд░, рдЕрдм рдЖрдкрдХреЛ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдкреЗрдЬ рдкрд░ рд╣рдорд╛рд░реЗ рдПрдкреАрдЖрдИ рдХреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рдорд╛рдкрди рдмрд┐рдВрджреБ рд╕реАрдЖрд░рдпреВрдбреА (рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ, рдкреЛрд╕реНрдЯ рдХрд░реЗрдВ, рдбрд╛рд▓реЗрдВ, рд╣рдЯрд╛рдПрдВ) рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдХреЗ рдЕрдиреБрд░реВрдк рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдПрдХ GET AI рдХреЛрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЙрджреНрдзрд░рдг (рдпрджрд┐ рдЖрдИрдбреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИ) рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджреНрдзрд░рдг рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ "рдПрдВрдбрдкреЙрдЗрдВрдЯ рдмрдирд╛рдПрдВ" рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд╣рдо рдЕрдиреНрдп рд╕рднреА рдПрдкреАрдЖрдИ рд╕рдорд╛рдкрди рдмрд┐рдВрджреБрдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВред рдмрд╕ рдЗрддрдирд╛ рд╣реА! рдмрдзрд╛рдИ рд╣реЛ, рдЖрдкрдиреЗ рдЕрдкрдирд╛ рдПрдкреАрдЖрдИ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИ!
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдПрдкреАрдЖрдИ рдкреЗрдЬ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦреЗрдЧрд╛:
рдирд┐рд╖реНрдХрд░реНрд╖
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рдкрд╛рдпрдерди рдореЗрдВ рдЕрдкрдиреА рдЦреБрдж рдХреА рд░реЗрд╕реНрдЯрдлреБрд▓ рдПрдкреАрдЖрдИ рд╕реЗрд╡рд╛ рдмрдирд╛рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдПрдкреАрдЖрдИ рдХреЛ рд╣реЗрд░реЛрдХреВ рдХреНрд▓рд╛рдЙрдб рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рд░реИрдкрд┐рдбрдПрдкреАрдЖрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрддрд╛рдпрд╛ред
рд▓реЗрдХрд┐рди рдкрд░реАрдХреНрд╖рдг рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдХреЗ рдмреБрдирд┐рдпрд╛рджреА рд╕рд┐рджреНрдзрд╛рдВрдд рджрд┐рдЦрд╛рдП рдЧрдП - рд╕реБрд░рдХреНрд╖рд╛, рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдФрд░ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдЬреИрд╕реА рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рдЗрди рд╕рднреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрд░реЛрдд: www.habr.com