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