рдЬрд░ рддреБрдореНрд╣реА рд╣рд╛ рд▓реЗрдЦ рд╡рд╛рдЪрдд рдЕрд╕рд╛рд▓, рддрд░ рдХрджрд╛рдЪрд┐рдд рддреБрдореНрд╣реА API (рдЕреЕрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕) рд╡рд╛рдкрд░рддрд╛рдирд╛ рдЙрдШрдбрд▓реЗрд▓реНрдпрд╛ рд╢рдХреНрдпрддрд╛рдВрд╢реА рдЖрдзреАрдЪ рдкрд░рд┐рдЪрд┐рдд рдЖрд╣рд╛рдд.
рддреБрдордЪреНрдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдордзреНрдпреЗ рдЕрдиреЗрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ API рдкреИрдХреА рдПрдХ рдЬреЛрдбреВрди, тАЛтАЛрддреБрдореНрд╣реА рдпрд╛ рдНрдкреНрд▓рд┐рдХреЗрд╢рдирдЪреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛рд╕рд╣ рддреНрдпрд╛рд╕ рдкреВрд░рдХ рдХрд░реВ рд╢рдХрддрд╛. рдкрд░рдВрддреБ рдЬрд░ рддреБрдореНрд╣реА рдПрдЦрд╛рджреЗ рдЕрджреНрд╡рд┐рддреАрдп рд╡реИрд╢рд┐рд╖реНрдЯреНрдп рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рдЕрд╕реЗрд▓ рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рдореБрджрд╛рдпрд╛рд╕рд╣ рд╕рд╛рдорд╛рдпрд┐рдХ рдХрд░рд╛рдпрдЪреЗ рдЕрд╕реЗрд▓ рддрд░?
рдЙрддреНрддрд░ рд╕реЛрдкреЗ рдЖрд╣реЗ: рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдЬрд░реА рд╣реЗ рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдПрдХ рдХрдареАрдг рдХрд╛рдо рд╡рд╛рдЯрдд рдЕрд╕рд▓реЗ рддрд░реА рдкреНрд░рддреНрдпрдХреНрд╖рд╛рдд рддреЗ рдЕрдЧрджреА рд╕реЛрдкреЗ рдЖрд╣реЗ. рдкрд╛рдпрдердирд╕рд╣ рд╣реЗ рдХрд╕реЗ рдХрд░рд╛рдпрдЪреЗ рддреЗ рдЖрдореНрд╣реА рддреБрдореНрд╣рд╛рд▓рд╛ рджрд╛рдЦрд╡реВ.
рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдкреНрд░рд╛рд░рдВрдн рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХрд╛рдп рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
API рд╡рд┐рдХрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ:
- рдкрд╛рдпрдерди 3;
рдлреНрд▓рд╛рд╕реНрдХ тАФ рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╛рдзреА рдЖрдгрд┐ рд╡рд╛рдкрд░рдгреНрдпрд╛рд╕ рд╕реЛрдкреА рдлреНрд░реЗрдорд╡рд░реНрдХ;рдлреНрд▓рд╛рд╕реНрдХ-рдЖрд░рд╛рдорджрд╛рдпрдХ рдлреНрд▓рд╛рд╕реНрдХрд╕рд╛рдареА рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рдЖрд╣реЗ рдЬреЛ рддреБрдореНрд╣рд╛рд▓рд╛ REST API рддреНрд╡рд░реАрдд рдЖрдгрд┐ рдХрдореАрддрдХрдореА рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рдирд╕рд╣ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЛ.
рд╕реНрдерд╛рдкрдирд╛ рдЖрджреЗрд╢рд╛рджреНрд╡рд╛рд░реЗ рдХреЗрд▓реА рдЬрд╛рддреЗ:
pip install flask-restful
рдЖрдореНрд╣реА рдирд╡рд╢рд┐рдХреНрдпрд╛рдВрд╕рд╛рдареА рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЧрд╣рди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрдЪреА рд╢рд┐рдлрд╛рд░рд╕ рдХрд░рддреЛ:
C# рдордзреНрдпреЗ рдЯреЗрд▓рд┐рдЧреНрд░рд╛рдо рдмреЙрдЯ рдбреЗрд╡реНрд╣рд▓рдкрдореЗрдВрдЯ - 26-28 рдСрдЧрд╕реНрдЯ. рдПрдХ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЧрд╣рди рдЬреЗ рддреБрдореНрд╣рд╛рд▓рд╛ рд╣реЗрд▓реНрдкрд░ рдмреЙрдЯреНрд╕ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рд╣реЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕ рдЕрдиреБрдорддреА рджреЗрддреЗ, рдЯреЗрд▓реАрдЧреНрд░рд╛рдо API рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпреЗ рдЖрдгрд┐ рдЗрддрд░ рдмрд╛рд░рдХрд╛рд╡реЗ. рд╢реАрд░реНрд╖ рддреАрди рд╕рд╣рднрд╛рдЧреАрдВрдирд╛ рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕рдХрдбреВрди 30 рд░реВрдмрд▓ рдорд┐рд│рддреАрд▓.
рдЖрдкрдг рд╕реБрд░реВ рдХрд░рдгреНрдпрд╛рдкреВрд░реНрд╡реА
рдЖрдореНрд╣реА рдмреЗрд╕рд┐рдХрд╕рд╣ рдПрдХ RESTful API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдгрд╛рд░ рдЖрд╣реЛрдд
рдХрд╛рд░реНрдп рдкреВрд░реНрдгрдкрдгреЗ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕рд╛рдареА, рд╡рд░ рдирдореВрдж рдХреЗрд▓реЗрд▓реНрдпрд╛ рджреЛрди рд╕рдВрдЬреНрдЮрд╛ рд╕рдордЬреВрди рдШреЗрдК.
REST рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?
REST API (рд░рд┐рдкреНрд░реЗрдЭреЗрдВрдЯреЗрд╢рдирд▓ рд╕реНрдЯреЗрдЯ рдЯреНрд░рд╛рдиреНрд╕рдлрд░) рдПрдХ API рдЖрд╣реЗ рдЬреЛ рдбреЗрдЯрд╛рдЪреА рджреЗрд╡рд╛рдгрдШреЗрд╡рд╛рдг рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА HTTP рд╡рд┐рдирдВрддреНрдпрд╛ рд╡рд╛рдкрд░рддреЛ.
REST API рдиреЗ рдХрд╛рд╣реА рдирд┐рдХрд╖ рдкреВрд░реНрдг рдХреЗрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд:
- рдХреНрд▓рд╛рдпрдВрдЯ-рд╕рд░реНрд╡реНрд╣рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░: рдХреНрд▓рд╛рдпрдВрдЯ рд╡рд╛рдкрд░рдХрд░реНрддрд╛ рдЗрдВрдЯрд░рдлреЗрд╕рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреЛ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░ рдмреЕрдХрдПрдВрдб рдЖрдгрд┐ рдбреЗрдЯрд╛ рд╕реНрдЯреЛрдЕрд░рд╢реА рд╕рдВрд╡рд╛рдж рд╕рд╛рдзрддреЛ. рдХреНрд▓рд╛рдпрдВрдЯ рдЖрдгрд┐ рд╕рд░реНрд╡реНрд╣рд░ рд╕реНрд╡рддрдВрддреНрд░ рдЖрд╣реЗрдд, рддреНрдпрд╛рдкреИрдХреА рдХреЛрдгрддреЗрд╣реА рджреБрд╕рд░реНтАНрдпрд╛рдкрд╛рд╕реВрди рд╡реЗрдЧрд│реЗ рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддрд╛рдд.
- рд╕реНрдЯреЗрдЯрд▓реЗрд╕ - рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдХреЛрдгрддрд╛рд╣реА рдХреНрд▓рд╛рдпрдВрдЯ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдирд╛рд╣реА. рд╕рддреНрд░ рд╕реНрдерд┐рддреА рдХреНрд▓рд╛рдпрдВрдЯ рдмрд╛рдЬреВрд▓рд╛ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдЖрд╣реЗ.
- рдХреЕрд╢реЗрдмрд┐рд▓рд┐рдЯреА - рдПрдХреВрдг рдХрд╛рд░реНрдпрдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреНрд▓рд╛рдпрдВрдЯ рд╕рд░реНрд╡реНрд╣рд░ рдкреНрд░рддрд┐рд╕рд╛рдж рдХреЕрд╢реЗ рдХрд░реВ рд╢рдХрддрд╛рдд.
CRUD рдореНрд╣рдгрдЬреЗ рдХрд╛рдп?
RAW рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╕рдВрдХрд▓реНрдкрдирд╛ рдЖрд╣реЗ рдЬреА рдЪрд╛рд░ рдореВрд▓рднреВрдд рдХреНрд░рд┐рдпрд╛рдВрдЪреЗ рд╡рд░реНрдгрди рдХрд░рддреЗ (рддрдпрд╛рд░ рдХрд░рд╛, рд╡рд╛рдЪрд╛, рдЕрджреНрдпрддрдирд┐рдд рдХрд░рд╛ рдЖрдгрд┐ рд╣рдЯрд╡рд╛).
REST API рдордзреНрдпреЗ, рд╡рд┐рдирдВрддреА рдкреНрд░рдХрд╛рд░ рдЖрдгрд┐ рд╡рд┐рдирдВрддреА рдкрджреНрдзрддреА рдкреЛрд╕реНрдЯ, рдЧреЗрдЯ, рдкреБрдЯ, рдбрд┐рд▓реАрдЯ рдпрд╛рдВрд╕рд╛рд░рдЦреНрдпрд╛ рдХреНрд░рд┐рдпрд╛рдВрд╕рд╛рдареА рдЬрдмрд╛рдмрджрд╛рд░ рдЕрд╕рддрд╛рдд.
рдЖрддрд╛ рдЖрдореНрд╣реА рдореВрд▓рднреВрдд рдЕрдЯреА рд╣рд╛рддрд╛рд│рд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдЖрдореНрд╣реА API рддрдпрд╛рд░ рдХрд░рдгреЗ рд╕реБрд░реВ рдХрд░реВ рд╢рдХрддреЛ.
рд╡рд┐рдХрд╛рд╕
рдЖрд░реНрдЯрд┐рдлрд┐рд╢рд┐рдпрд▓ рдЗрдВрдЯреЗрд▓рд┐рдЬрдиреНрд╕рдмрджреНрджрд▓рдЪреНрдпрд╛ рдХреЛрдЯреНрд╕рдЪреЗ рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░реВрдпрд╛. AI рд╣реЗ рдЖрдЬ рд╕рд░реНрд╡рд╛рдд рд╡реЗрдЧрд╛рдиреЗ рд╡рд╛рдврдгрд╛рд▒реНрдпрд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ рдЖрдгрд┐ AI рд╕рд╣ рдХрд╛рдо рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА Python рд╣реЗ рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рд╕рд╛рдзрди рдЖрд╣реЗ.
рдпрд╛ API рд╕рд╣, рдПрдХ рдкрд╛рдпрдерди рд╡рд┐рдХрд╕рдХ AI рдмрджреНрджрд▓ рддреНрд╡рд░реАрдд рд╢рд┐рдХреВ рд╢рдХрддреЛ рдЖрдгрд┐ рдирд╡реАрди рдпрд╢рд╛рдиреЗ рдкреНрд░реЗрд░рд┐рдд рд╣реЛрдК рд╢рдХрддреЛ. рд╡рд┐рдХрд╕рдХрд╛рдЪреЗ рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░ рдореМрд▓реНрдпрд╡рд╛рди рд╡рд┐рдЪрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЛ рддреНрдпрд╛рдВрдирд╛ рд░рд┐рдкреЙрдЭрд┐рдЯрд░реАрдордзреНрдпреЗ рдЬреЛрдбрдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕реЗрд▓.
рдЪрд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдореЙрдбреНрдпреВрд▓реНрд╕ рдЖрдпрд╛рдд рдХрд░реВрди рдЖрдгрд┐ рдлреНрд▓рд╛рд╕реНрдХ рд╕реЗрдЯ рдХрд░реВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
рдпрд╛ рд╕реНрдирд┐рдкреЗрдЯрдордзреНрдпреЗ, рдлреНрд▓рд╛рд╕реНрдХ, рдПрдкреАрдЖрдп рдЖрдгрд┐ рд░рд┐рд╕реЛрд░реНрд╕ рд╣реЗ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рд▓реЗрд▓реЗ рд╡рд░реНрдЧ рдЖрд╣реЗрдд.
Reqparse рд╣рд╛ рдлреНрд▓рд╛рд╕реНрдХ-рд░реЗрд╕реНрдЯрдлреБрд▓ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдЖрд╣реЗ... рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЛрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣рд╛рд▓рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореЙрдбреНрдпреВрд▓рдЪреА рджреЗрдЦреАрд▓ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕реЗрд▓.
рдЖрддрд╛ рдЖрдкрдг AI рдмрджреНрджрд▓ рдХреЛрдЯреНрд╕рдЪреЗ рднрд╛рдВрдбрд╛рд░ рддрдпрд╛рд░ рдХрд░реВ.
рдкреНрд░рддреНрдпреЗрдХ рд░реЗрдкреЛ рдПрдВрдЯреНрд░реАрдордзреНрдпреЗ рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕реЗрд▓:
- рдбрд┐рдЬрд┐рдЯрд▓ рдЖрдпрдбреА;
- рдХреЛрдЯрдЪреНрдпрд╛ рд▓реЗрдЦрдХрд╛рдЪреЗ рдирд╛рд╡;
- рдХреЛрдЯ
рд╣реЗ рдлрдХреНрдд рд╢рд┐рдХрдгреНрдпрд╛рдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЕрд╕рд▓реНрдпрд╛рдиреЗ, рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдиреЛрдВрджреА Python рд╕реВрдЪреАрдордзреНрдпреЗ рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХрд░реВ. рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рдордзреНрдпреЗ, рдЖрдореНрд╣реА рдмрд╣реБрдзрд╛ рддреНрдпрд╛рдРрд╡рдЬреА рдбреЗрдЯрд╛рдмреЗрд╕ рд╡рд╛рдкрд░реВ.
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."
}
]
рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХреЛрдЯ рд░рд┐рд╕реЛрд░реНрд╕ рдХреНрд▓рд╛рд╕ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдЖрдордЪреНрдпрд╛ API рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕рдЪреНрдпрд╛ рдСрдкрд░реЗрд╢рдиреНрд╕ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрд▓. рд╡рд░реНрдЧрд╛рдд рдЪрд╛рд░ рдкрджреНрдзрддреА рдШреЛрд╖рд┐рдд рдХреЗрд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд: рдорд┐рд│рд╡рд╛, рдкреЛрд╕реНрдЯ рдХрд░рд╛, рдкреБрдЯ рдХрд░рд╛, рд╣рдЯрд╡рд╛.
рдЪрд▓рд╛ 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 рдкрджреНрдзрдд рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЛрдЯ рдкрд░рдд рдХрд░рддреЗ, рдЙрджрд╛. рдХреЙрд▓ рдХрд░рддрд╛рдирд╛ рдкрджреНрдзрдд рдЖрдпрдбреА рд╕реЗрдЯ рдХреЗрд▓реЗрд▓рд╛ рдирд╡реНрд╣рддрд╛.
рдЬрд░ рддреЗ рд╕реЗрдЯ рдХреЗрд▓реЗ рдЕрд╕реЗрд▓, рддрд░ рдкрджреНрдзрдд рдЕрд╡рддрд░рдгрд╛рдВрдордзреНрдпреЗ рд╢реЛрдзрддреЗ рдЖрдгрд┐ рджрд┐рд▓реЗрд▓рд╛ ID рдЕрд╕рд▓реЗрд▓рд╛ рдПрдХ рд╢реЛрдзрддреЗ. рдХрд╛рд╣реАрд╣реА рди рдЖрдврд│рд▓реНрдпрд╛рд╕, "рдХреЛрдЯ рд╕рд╛рдкрдбрд▓рд╛ рдирд╛рд╣реА, 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 рд╡рд╛рдкрд░реВрди, рддреНрдпрд╛рдиреЗ рд▓реЗрдЦрдХ рдЖрдгрд┐ рд╡рд┐рдирдВрддреАрдЪреЗ рдХреЛрдЯ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ, рддреЗ params рд╢рдмреНрджрдХреЛрд╢рд╛рдд рд╕рдВрдЧреНрд░рд╣рд┐рдд рдХреЗрд▓реЗ.
рдирд┐рд░реНрджрд┐рд╖реНрдЯ ID рд╕рд╣ рдХреЛрдЯ рдЖрдзреАрдЪ рдЕрд╕реНрддрд┐рддреНрд╡рд╛рдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдкрджреНрдзрдд рдпреЛрдЧреНрдп рд╕рдВрджреЗрд╢ рдЖрдгрд┐ рдХреЛрдб 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 рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдЖрд╣реЗ!
рдкреБрдвреЗ, рдЖрдореНрд╣реА рдХрдорд╛рдВрдбрд╕рд╣ рдХрдиреНрд╕реЛрд▓рдордзреНрдпреЗ рдЪрд╛рд▓рд╡реВрди app.py рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдХреЛрдб рд╕реЗрд╡реНрд╣ рдХрд░реВ рд╢рдХрддреЛ:
python3 app.py
рдЬрд░ рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЕрд╕реЗрд▓ рддрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рдорд┐рд│реЗрд▓:
* рдбреАрдмрдЧ рдореЛрдб: рдЪрд╛рд▓реВ
* рдЪрд╛рд▓реВ рдЖрд╣реЗ
* рд╕реНрдЯреЗрдЯрд╕рд╣ рд░реАрд╕реНрдЯрд╛рд░реНрдЯ рдХрд░рдд рдЖрд╣реЗ
* рдбреАрдмрдЧрд░ рд╕рдХреНрд░рд┐рдп рдЖрд╣реЗ!
* рдбреАрдмрдЧрд░ рдкрд┐рди: XXXXXXX
API рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдд рдЖрд╣реЗ
API рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рддреНрдпрд╛рдЪреА рдЪрд╛рдЪрдгреА рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рд╣реЗ рдХрд░реНрд▓ рдХрдиреНрд╕реЛрд▓ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдХрд┐рдВрд╡рд╛ Insomnia REST рдХреНрд▓рд╛рдпрдВрдЯ рд╡рд╛рдкрд░реВрди рдХрд┐рдВрд╡рд╛ рд░реЕрдкрд┐рдб API рд╡рд░ API рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
рдЖрдордЪреЗ API рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдд рдЖрд╣реЗ
RapidAPI рд╣реЗ 10 APIs (рдЖрдгрд┐ рд╕реБрдорд╛рд░реЗ 000 рджрд╢рд▓рдХреНрд╖ рд╡рд┐рдХрд╕рдХ) рдЕрд╕рд▓реЗрд▓реЗ рдЬрдЧрд╛рддреАрд▓ рд╕рд░реНрд╡рд╛рдд рдореЛрдареЗ рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕ рдЖрд╣реЗ.
RapidAPI рддреГрддреАрдп-рдкрдХреНрд╖ API рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдХреЗрд╡рд│ рдПрдХрдЪ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рдд рдирд╛рд╣реА, рддрд░ рддреБрдореНрд╣рд╛рд▓рд╛ рддреБрдордЪреЗ рд╕реНрд╡рддрдГрдЪреЗ API рдЬрд▓рдж рдЖрдгрд┐ рд╕рд╣рдЬ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреА рдЕрдиреБрдорддреА рджреЗрддреЗ.
рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА
Heroku рд╡рд░ рддреБрдордЪреЗ API рдХрд╕реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рд╛рд╡реЗ
1. Heroku рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛.
рдкрд╣рд┐рд▓реА рдкрд╛рдпрд░реА рдореНрд╣рдгрдЬреЗ Heroku Command Line Interface (CLI) рдиреЛрдВрджрдгреА рдХрд░рдгреЗ рдЖрдгрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдгреЗ. рд╣реЗ Ubuntu 16+ рд╡рд░ рдХрд╛рд░реНрдп рдХрд░рддреЗ.
sudo рд╕реНрдиреЕрдк heroku --classic рд╕реНрдерд╛рдкрд┐рдд рдХрд░рд╛
рдордЧ рдЖрдореНрд╣реА рд▓реЙрдЧ рдЗрди рдХрд░реВ:
heroku рд▓реЙрдЧрд┐рди
2. рдЖрд╡рд╢реНрдпрдХ рдлрд╛рдЗрд▓реНрд╕ рдЬреЛрдбрд╛.
рдЖрддрд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╛рддреАрд▓ рдлреЛрд▓реНрдбрд░рдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдлрд╛рдпрд▓реА рдЬреЛрдбрдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ:
- рдЖрд╡рд╢реНрдпрдХ рдкрд╛рдпрдерди рдореЙрдбреНрдпреВрд▓реНрд╕рдЪреНрдпрд╛ рд╕реВрдЪреАрд╕рд╣ requirements.txt;
- Procfile, рдЬреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдЪрд╛рд▓рд╡рд┐рдгреНрдпрд╛рд╕рд╛рдареА рдХреЛрдгрддреНрдпрд╛ рдЖрдЬреНрдЮрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реНрдпрд╛ рдкрд╛рд╣рд┐рдЬреЗрдд рд╣реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ;
- .gitignore - рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЖрд╡рд╢реНрдпрдХ рдирд╕рд▓реЗрд▓реНрдпрд╛ рдлрд╛рдЗрд▓реНрд╕ рд╡рдЧрд│рдгреНрдпрд╛рд╕рд╛рдареА.
Requiments.txt рдлрд╛рдЗрд▓рдордзреНрдпреЗ рдЦрд╛рд▓реАрд▓ рдУрд│реА рдЕрд╕рддреАрд▓:
- рдлреНрд▓рд╛рд╕реНрдХ
- рдлреНрд▓рд╛рд╕реНрдХ-рдЖрд░рд╛рдорджрд╛рдпрдХ
- рдЧрдирд┐рдХреЙрд░реНрди
рдХреГрдкрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдШреНрдпрд╛ рдХреА рдЖрдореНрд╣реА рдЧрдирд┐рдХреЙрд░реНрди (рдкрд╛рдпрдерди WSGI HTTP рд╕рд░реНрд╡реНрд╣рд░) рд╕реВрдЪреАрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЖрд╣реЗ рдХрд╛рд░рдг рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪрд╛ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╕рд░реНрд╡реНрд╣рд░рд╡рд░ рдЪрд╛рд▓рд╡рд╛рдпрдЪрд╛ рдЖрд╣реЗ.
рдкреНрд░реЛрдлрд╛рдЗрд▓рдордзреНрдпреЗ рд╣реЗ рд╕рдорд╛рд╡рд┐рд╖реНрдЯ рдЕрд╕реЗрд▓:
web: gunicorn app:app
.gitignore рдЪреА рд╕рд╛рдордЧреНрд░реА:
*.pyc
__pycache__/
рдЖрддрд╛ рдлрд╛рдЗрд▓реНрд╕ рддрдпрд╛рд░ рдЭрд╛рд▓реНрдпрд╛ рдЖрд╣реЗрдд, рдЪрд▓рд╛ git repo рд╕реБрд░реВ рдХрд░реВ рдЖрдгрд┐ рдХрдорд┐рдЯ рдХрд░реВ:
git init
git add
git commit -m "First API commit"
3. рдирд╡реАрди Heroku рдЕреЕрдк рддрдпрд╛рд░ рдХрд░рд╛.
heroku create
рдорд╛рд╕реНрдЯрд░ рдмреНрд░рдБрдЪрд▓рд╛ рд░рд┐рдореЛрдЯ Heroku рд░реЗрдкреЛрд╡рд░ рдврдХрд▓рдгреЗ:
git push heroku master
рдЖрддрд╛ рддреБрдореНрд╣реА рдХрдорд╛рдВрдбрд╕рд╣ API рд╕реЗрд╡рд╛ рдЙрдШрдбреВрди рдкреНрд░рд╛рд░рдВрдн рдХрд░реВ рд╢рдХрддрд╛:
heroku ps:scale web=1
heroku open
API рдпреЗрдереЗ рдЙрдкрд▓рдмреНрдз рдЕрд╕реЗрд▓
рддреБрдордЪрд╛ Python API RapidAPI рдорд╛рд░реНрдХреЗрдЯрдкреНрд▓реЗрд╕рдордзреНрдпреЗ рдХрд╕рд╛ рдЬреЛрдбрд╛рдпрдЪрд╛
Heroku рд╡рд░ API рд╕реЗрд╡рд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЭрд╛рд▓реНрдпрд╛рдирдВрддрд░, рддреБрдореНрд╣реА рддреА рд░реЕрдкрд┐рдб API рдордзреНрдпреЗ рдЬреЛрдбреВ рд╢рдХрддрд╛. рдпреЗрдереЗ
1. RapidAPI рдЦрд╛рддреЗ рддрдпрд╛рд░ рдХрд░рд╛.
рдЖрдореНрд╣реА рдПрдХ рд╡рд┐рдирд╛рдореВрд▓реНрдп рдЦрд╛рддреЗ рдиреЛрдВрджрдгреА рдХрд░рддреЛ - рд╣реЗ Facebook, Google, GitHub рд╡рд╛рдкрд░реВрди рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрддреЗ.
2. рдирд┐рдпрдВрддреНрд░рдг рдкреЕрдиреЗрд▓рдордзреНрдпреЗ API рдЬреЛрдбрд╛.
3. рдкреБрдвреЗ, рддреБрдордЪреНрдпрд╛ API рдмрджреНрджрд▓ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рд╣рд┐рддреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░рд╛.
4. тАЬAdd APIтАЭ рд╡рд░ рдХреНрд▓рд┐рдХ рдХреЗрд▓реНрдпрд╛рдирдВрддрд░ рдПрдХ рдирд╡реАрди рдкреГрд╖реНрда рджрд┐рд╕реЗрд▓ рдЬрд┐рдереЗ рддреБрдореНрд╣реА рдЖрдордЪреНрдпрд╛ API рдмрджреНрджрд▓ рдорд╛рд╣рд┐рддреА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛.
5. рдЖрддрд╛ рддреБрдореНрд╣реА API рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рд╡реНрдпрдХреНрддрд┐рдЪрд▓рд┐рддрдкрдгреЗ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдХрд░реВ рд╢рдХрддрд╛ рдХрд┐рдВрд╡рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реВ рд╢рдХрддрд╛
рдмрд░рдВ, рдЖрддрд╛ рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдордЪреНрдпрд╛ API рдЪреЗ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдПрдВрдбрдкреЙрдЗрдВрдЯреНрд╕ рдкреЗрдЬрд╡рд░ рд╕реЗрдЯ рдХрд░рд╛рд╡реЗ рд▓рд╛рдЧрддреАрд▓. рдЖрдордЪреНрдпрд╛ рдмрд╛рдмрддреАрдд, рдЕрдВрддрд┐рдо рдмрд┐рдВрджреВ CRUD рдЪреНрдпрд╛ рд╕рдВрдХрд▓реНрдкрдиреЗрд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗрдд (рдорд┐рд│рд╡рд╛, рдкреЛрд╕реНрдЯ рдХрд░рд╛, рдареЗрд╡рд╛, рд╣рдЯрд╡рд╛).
рдкреБрдвреЗ, рддреБрдореНрд╣рд╛рд▓рд╛ GET AI рдХреЛрдЯ рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдпрд╛рд░ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдЬреЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреЛрдЯ (рдЖрдпрдбреА рдбреАрдлреЙрд▓реНрдЯ рдЕрд╕рд▓реНрдпрд╛рд╕) рдХрд┐рдВрд╡рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдпрдбреАрд╕рд╛рдареА рдХреЛрдЯ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ.
рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ "рдПрдВрдбрдкреЙрдЗрдВрдЯ рддрдпрд╛рд░ рдХрд░рд╛" рдмрдЯрдгрд╛рд╡рд░ рдХреНрд▓рд┐рдХ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ.
рдЖрдореНрд╣реА рдЗрддрд░ рд╕рд░реНрд╡ API рдПрдВрдбрдкреЙрдЗрдВрдЯрд╕рд╛рдареА рд╣реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкреБрдиреНрд╣рд╛ рдХрд░рддреЛ. рдЗрддрдХрдВрдЪ! рдЕрднрд┐рдирдВрджрди, рддреБрдореНрд╣реА рддреБрдордЪреЗ API рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ рдЖрд╣реЗ!
рд╕рд░реНрд╡ рдХрд╛рд╣реА рдареАрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, API рдкреГрд╖реНрда рдЕрд╕реЗ рдХрд╛рд╣реАрддрд░реА рджрд┐рд╕реЗрд▓:
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╛ рд▓реЗрдЦрд╛рдд, рдЖрдореНрд╣реА рдкрд╛рдпрдердирдордзреНрдпреЗ рдЖрдордЪреА рд╕реНрд╡рддрдГрдЪреА RESTful API рд╕реЗрд╡рд╛ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрд╕рд╣, Heroku рдХреНрд▓рд╛рдЙрдбрд╡рд░ API рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдгреНрдпрд╛рдЪреНрдпрд╛ рдЖрдгрд┐ RapidAPI рдирд┐рд░реНрджреЗрд╢рд┐рдХреЗрдд рдЬреЛрдбрдгреНрдпрд╛рдЪреНрдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпреЗрддреВрди рдЧреЗрд▓реЛ.
рдкрд░рдВрддреБ рдЪрд╛рдЪрдгреА рдЖрд╡реГрддреНрддреАрдордзреНрдпреЗ, API рд╡рд┐рдХрд╛рд╕рд╛рдЪреА рдХреЗрд╡рд│ рдореВрд▓рднреВрдд рддрддреНрддреНрд╡реЗ рджрд░реНрд╢рд╡рд┐рд▓реА рдЧреЗрд▓реА - рд╕реБрд░рдХреНрд╖рд╛, рджреЛрд╖ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЖрдгрд┐ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА рдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдмрд╛рд░рдХрд╛рд╡реЗ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реНрдпрд╛ рдЧреЗрд▓реНрдпрд╛ рдирд╛рд╣реАрдд.
рд╡рд╛рд╕реНрддрд╡рд┐рдХ API рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛рдирд╛, рд╣реЗ рд╕рд░реНрд╡ рд╡рд┐рдЪрд╛рд░рд╛рдд рдШреЗрддрд▓реЗ рдкрд╛рд╣рд┐рдЬреЗ.
рд╕реНрддреНрд░реЛрдд: www.habr.com