рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

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

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

рдЬрд╡рд╛рдл рд╕рд░рд▓ рдЫ: рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ API рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН.

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

рддрдкрд╛рдЗрдБ рд╕реБрд░реБ рдЧрд░реНрди рдХреЗ рдЪрд╛рд╣рд┐рдиреНрдЫ

рдПрдкреАрдЖрдИ рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдЫ:

  • рдкрд╛рдЗрдерди реи.рен;
  • рдлреНрд▓рд╛рд╕реНрдХ - рд╡реЗрдм рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд╕рд░рд▓ рд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ;
  • рдлреНрд▓рд╛рд╕реНрдХ - рдЖрд░рд╛рдорджрд╛рдпреА рдлреНрд▓рд╛рд╕реНрдХрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╣реЛ рдЬрд╕рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рдЫрд┐рдЯреЛ рд░ рдиреНрдпреВрдирддрдо рдХрдиреНрдлрд┐рдЧрд░реЗрд╕рдирдХреЛ рд╕рд╛рде REST API рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫред

рд╕реНрдерд╛рдкрдирд╛ рдЖрджреЗрд╢ рд╕рдВрдЧ рдкреНрд░рджрд░реНрд╢рди рдЧрд░рд┐рдПрдХреЛ рдЫ:

pip install flask-restful

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

рд╕реБрд░реБ рдЧрд░реНрдиреБ рднрдиреНрджрд╛ рдкрд╣рд┐рд▓реЗ

рд╣рд╛рдореА рдЖрдзрд╛рд░рднреВрдд рд╕рдВрдЧ рдПрдХ RESTful API рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрди рдЬрд╛рдБрджреИрдЫреМрдВ CRUID рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛.

рдХрд╛рд░реНрдпрд▓рд╛рдИ рдкреВрд░реНрдг рд░реВрдкрдорд╛ рдмреБрдЭреНрдирдХреЛ рд▓рд╛рдЧрд┐, рдорд╛рдерд┐ рдЙрд▓реНрд▓реЗрдЦрд┐рдд рджреБрдИ рд╕рд░реНрддрд╣рд░реВ рдмреБрдЭреМрдВред

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

рдпрджрд┐ рд╕рдмреИ рд░рд╛рдореНрд░реЛ рдЫ рднрдиреЗ, рд╣рд╛рдореА рдирд┐рдореНрди рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ:

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

API рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрджреИ

рдПрдХ рдкрдЯрдХ API рд╕рд┐рд░реНрдЬрдирд╛ рднрдПрдкрдЫрд┐, рдпрд╕рд▓рд╛рдИ рдкрд░реАрдХреНрд╖рдг рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

рдпреЛ рдХрд░реНрд▓ рдХрдиреНрд╕реЛрд▓ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рд╡рд╛ Insomnia REST рдХреНрд▓рд╛рдЗрдиреНрдЯ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╡рд╛ Rapid API рдорд╛ API рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

рд╣рд╛рдореНрд░реЛ 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 рдорд╛ рдЙрдкрд▓рдмреНрдз рд╣реБрдиреЗрдЫ your-random-heroku-name.herokuapp.com/ai-quotes.

RapidAPI рдмрдЬрд╛рд░рдорд╛ рддрдкрд╛рдЗрдБрдХреЛ рдкрд╛рдЗрдерди API рдХрд╕рд░реА рдердкреНрдиреЗ

рдПрдХ рдкрдЯрдХ рддрдкрд╛рдИрдВрдХреЛ API рд╕реЗрд╡рд╛ Heroku рдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рднрдПрдкрдЫрд┐, рддрдкрд╛рдИрдВ рдпрд╕рд▓рд╛рдИ Rapid API рдорд╛ рдердкреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╣рд╛рдБ рд╡рд┐рд╕реНрддреГрдд рджрд╕реНрддрд╛рд╡реЗрдЬ рдпрд╕ рдмрд┐рд╖рдпрдорд╛ред

1. RapidAPI рдЦрд╛рддрд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

рдирд┐: рд╢реБрд▓реНрдХ рдЦрд╛рддрд╛ рджрд░реНрддрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН - рдпреЛ рдлреЗрд╕рдмреБрдХ, рдЧреБрдЧрд▓, GitHub рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

2. рдирд┐рдпрдиреНрддреНрд░рдг рдкреНрдпрд╛рдирд▓рдорд╛ API рдердкреНрдиреБрд╣реЛрд╕реНред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

3. рдЕрд░реНрдХреЛ, рддрдкрд╛рдЗрдБрдХреЛ API рдХреЛ рдмрд╛рд░реЗ рдорд╛ рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

4. "рдПрдкреАрдЖрдИ рдердкреНрдиреБрд╣реЛрд╕реН" рдХреНрд▓рд┐рдХ рдЧрд░реЗрдкрдЫрд┐ рдПрдЙрдЯрд╛ рдирдпрд╛рдБ рдкреГрд╖реНрда рджреЗрдЦрд╛ рдкрд░реНрджрдЫ рдЬрд╣рд╛рдБ рддрдкрд╛рдЗрдБ рд╣рд╛рдореНрд░реЛ рдПрдкреАрдЖрдИ рдмрд╛рд░реЗ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

5. рдЕрдм рддрдкрд╛рдЗрдБ рдпрд╛ рдд рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ API рдПрдиреНрдбрдкреЛрдЗрдиреНрдЯрд╣рд░реВ рдкреНрд░рд╡рд┐рд╖реНрдЯ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд╡рд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ swagger-рдлрд╛рдЗрд▓ OpenAPI рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

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

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

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

рдЕрдиреНрддрд┐рдо рдмрд┐рдиреНрджреБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди, "рдЕрдиреНрддрдмрд┐рдиреНрджреБ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН" рдмрдЯрдирдорд╛ рдХреНрд▓рд┐рдХ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

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

рдпрджрд┐ рд╕рдмреИ рдареАрдХ рдЫ рднрдиреЗ, API рдкреГрд╖реНрда рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ:

рдкрд╛рдЗрдердирдорд╛ API рд▓реЗрдЦреНрджреИ (рдлреНрд▓рд╛рд╕реНрдХ рд░ RapidAPI рд╕рдБрдЧ)

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

рдпрд╕ рд▓реЗрдЦрдорд╛, рд╣рд╛рдореАрд▓реЗ рдкрд╛рдЗрдердирдорд╛ рддрдкрд╛рдИрдВрдХреЛ рдЖрдлреНрдиреИ RESTful API рд╕реЗрд╡рд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рд╕рд╛рдереИ API рд▓рд╛рдИ Heroku рдХреНрд▓рд╛рдЙрдбрдорд╛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреЗ рд░ рдпрд╕рд▓рд╛рдИ RapidAPI рдбрд╛рдЗрд░реЗрдХреНрдЯрд░реАрдорд╛ рдердкреНрдиреЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕рд┐рдХреНрдпреМрдВред

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

рд╡рд╛рд╕реНрддрд╡рд┐рдХ API рд╡рд┐рдХрд╛рд╕ рдЧрд░реНрджрд╛, рдпреА рд╕рдмреИрд▓рд╛рдИ рдзреНрдпрд╛рдирдорд╛ рд░рд╛рдЦреНрди рдЖрд╡рд╢реНрдпрдХ рдЫред

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди