ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืื ืืชื ืงื•ืจืื™ื ืืช ื”ืžืืžืจ ื”ื–ื”, ื›ื ืจืื” ืฉืืชื ื›ื‘ืจ ืžื›ื™ืจื™ื ืืช ื”ืืคืฉืจื•ื™ื•ืช ื”ื ืคืชื—ื•ืช ื‘ืขืช ืฉื™ืžื•ืฉ ื‘-API (ืžืžืฉืง ืชื›ื ื•ืช ื™ื™ืฉื•ืžื™ื).

ืขืœ ื™ื“ื™ ื”ื•ืกืคืช ืื—ื“ ืžืžืžืฉืงื™ ื”-API ื”ืฆื™ื‘ื•ืจื™ื™ื ื”ืจื‘ื™ื ืœื™ื™ืฉื•ื ืฉืœืš, ืืชื” ื™ื›ื•ืœ ืœื”ืจื—ื™ื‘ ืืช ื”ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช ืฉืœ ื™ื™ืฉื•ื ื–ื” ืื• ืœื”ืฉืœื™ื ืื•ืชื• ืขื ื”ื ืชื•ื ื™ื ื”ื“ืจื•ืฉื™ื. ืื‘ืœ ืžื” ืื ืคื™ืชื—ืช ืชื›ื•ื ื” ื™ื™ื—ื•ื“ื™ืช ืฉืืชื” ืจื•ืฆื” ืœื—ืœื•ืง ืขื ื”ืงื”ื™ืœื”?

ื”ืชืฉื•ื‘ื” ืคืฉื•ื˜ื”: ืืชื” ืฆืจื™ืš ืฆื•ืจ API ืžืฉืœืš.

ืœืžืจื•ืช ืฉื–ื• ืขืฉื•ื™ื” ืœื”ื™ืจืื•ืช ื›ืžื• ืžืฉื™ืžื” ืžืจืชื™ืขื” ื‘ื”ืชื—ืœื”, ื”ื™ื ืœืžืขืฉื” ื“ื™ ืคืฉื•ื˜ื”. ื ืจืื” ืœืš ืื™ืš ืœืขืฉื•ืช ืืช ื–ื” ืขื Python.

ืžื” ืฉืืชื” ืฆืจื™ืš ื›ื“ื™ ืœื”ืชื—ื™ืœ

ืคื™ืชื•ื— API ื“ื•ืจืฉ:

  • ืคื™ื™ืชื•ืŸ 3;
  • ื‘ืงื‘ื•ืง - ืžืกื’ืจืช ืคืฉื•ื˜ื” ื•ืงืœื” ืœืฉื™ืžื•ืฉ ืœื™ืฆื™ืจืช ื™ื™ืฉื•ืžื™ ืื™ื ื˜ืจื ื˜;
  • ืžืœื ื‘ืงื‘ื•ืงื™ื ื”ื•ื ื”ืจื—ื‘ื” ืขื‘ื•ืจ Flask ื”ืžืืคืฉืจืช ืœืคืชื— REST API ื‘ืžื”ื™ืจื•ืช ื•ื‘ืžื™ื ื™ืžื•ื ื”ื’ื“ืจื”.

ื”ื”ืชืงื ื” ืžืชื‘ืฆืขืช ืขืœ ื™ื“ื™ ื”ืคืงื•ื“ื”:

pip install flask-restful

ืื ื• ืžืžืœื™ืฆื™ื ืขืœ ืชื›ื ื•ืช ืื™ื ื˜ื ืกื™ื‘ื™ ื‘ื—ื™ื ื ืœืžืชื—ื™ืœื™ื:
ืคื™ืชื•ื— ื‘ื•ื˜ื™ื ืฉืœ ื˜ืœื’ืจื ื‘-C# - 26-28 ื‘ืื•ื’ื•ืกื˜. ืื™ื ื˜ื ืกื™ื‘ื™ ื—ื™ื ืžื™ ื”ืžืืคืฉืจ ืœืš ืœื”ื‘ื™ืŸ ืื™ืš ื‘ื•ื˜ื™ื ืขื•ื–ืจื™ื ืขื•ื‘ื“ื™ื, ืืช ื”ืชื›ื•ื ื•ืช ืฉืœ ืขื‘ื•ื“ื” ืขื ื”-API ืฉืœ Telegram ื•ืขื•ื“ ื ื™ื•ืื ืกื™ื. ืฉืœื•ืฉืช ื”ืžืฉืชืชืคื™ื ื”ืžื•ื‘ื™ืœื™ื ื™ืงื‘ืœื• 30 ืจื•ื‘ืœ ืž-Skillbox.

ืœืคื ื™ ืฉืืชื” ืžืชื—ื™ืœ

ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœืคืชื— RESTful API ืขื ื‘ืกื™ืกื™ ืคื•ื ืงืฆื™ื•ื ืœื™ื•ืช CRUID.

ื›ื“ื™ ืœื”ื‘ื™ืŸ ืืช ื”ืžืฉื™ืžื” ื‘ืžืœื•ืื”, ื‘ื•ืื• ื ื‘ื™ืŸ ืืช ืฉื ื™ ื”ืžื•ื ื—ื™ื ืฉื”ื•ื–ื›ืจื• ืœืขื™ืœ.

ืžื” ื–ื” REST?

REST API (Representational State Transfer) ื”ื•ื API ื”ืžืฉืชืžืฉ ื‘ื‘ืงืฉื•ืช HTTP ื›ื“ื™ ืœื”ื—ืœื™ืฃ ื ืชื•ื ื™ื.

ืžืžืฉืงื™ API ืฉืœ REST ื—ื™ื™ื‘ื™ื ืœืขืžื•ื“ ื‘ืงืจื™ื˜ืจื™ื•ื ื™ื ืžืกื•ื™ืžื™ื:

  • ืืจื›ื™ื˜ืงื˜ื•ืจืช ืฉืจืช-ืœืงื•ื—: ื”ืœืงื•ื— ืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ืžืžืฉืง ื”ืžืฉืชืžืฉ, ื•ื”ืฉืจืช ืžืงื™ื™ื ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืงืฆื” ื”ืื—ื•ืจื™ ื•ืžืื’ืจ ื”ื ืชื•ื ื™ื. ื”ืœืงื•ื— ื•ื”ืฉืจืช ื”ื ืขืฆืžืื™ื™ื, ื›ืœ ืื—ื“ ืžื”ื ื™ื›ื•ืœ ืœื”ื™ื•ืช ืžื•ื—ืœืฃ ื‘ื ืคืจื“ ืžื”ืื—ืจ.
  • ืœืœื ืžืฆื‘ - ืื™ืŸ ื ืชื•ื ื™ ืœืงื•ื— ืžืื•ื—ืกื ื™ื ื‘ืฉืจืช. ืžืฆื‘ ื”ื”ืคืขืœื” ืžืื•ื—ืกืŸ ื‘ืฆื“ ื”ืœืงื•ื—.
  • ื™ื›ื•ืœืช ืžื˜ืžื•ืŸ - ืœืงื•ื—ื•ืช ื™ื›ื•ืœื™ื ืœืฉืžื•ืจ ืชื’ื•ื‘ื•ืช ืฉืจืช ื‘ืžื˜ืžื•ืŸ ื›ื“ื™ ืœืฉืคืจ ืืช ื”ื‘ื™ืฆื•ืขื™ื ื”ื›ื•ืœืœื™ื.

ืžื” ื–ื” CRUD?

ื”ื•ื ืื” ื”ื•ื ืžื•ืฉื’ ืชื›ื ื•ืช ื”ืžืชืืจ ืืจื‘ืข ืคืขื•ืœื•ืช ื‘ืกื™ืกื™ื•ืช (ื™ืฆื™ืจื”, ืงืจื™ืื”, ืขื“ื›ื•ืŸ ื•ืžื—ืง).

ื‘-REST API, ืกื•ื’ื™ ื”ื‘ืงืฉื•ืช ื•ืฉื™ื˜ื•ืช ื”ื‘ืงืฉื•ืช ืื—ืจืื™ื ืœืคืขื•ืœื•ืช ื›ืžื• ืคืจืกื•ื, ืงื‘ืœ, ื”ืฆื‘, ืžื—ื™ืงื”.

ื›ืขืช, ืœืื—ืจ ืฉืขืกืงื ื• ื‘ืžื•ื ื—ื™ื ื”ื‘ืกื™ืกื™ื™ื, ืื ื• ื™ื›ื•ืœื™ื ืœื”ืชื—ื™ืœ ืœื™ืฆื•ืจ ืืช ื”-API.

ืคื™ืชื•ื—

ื‘ื•ืื• ื ื™ืฆื•ืจ ืžืื’ืจ ืฉืœ ืฆื™ื˜ื•ื˜ื™ื ืขืœ ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช. ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช ื”ื™ื ืื—ืช ื”ื˜ื›ื ื•ืœื•ื’ื™ื•ืช ื”ืฆื•ืžื—ื•ืช ื‘ื™ื•ืชืจ ื›ื™ื•ื, ื•ืคื™ื™ืชื•ืŸ ื”ื™ื ื›ืœื™ ืคื•ืคื•ืœืจื™ ืœืขื‘ื•ื“ื” ืขื ื‘ื™ื ื” ืžืœืื›ื•ืชื™ืช.

ืขื API ื–ื”, ืžืคืชื— Python ื™ื›ื•ืœ ืœืœืžื•ื“ ื‘ืžื”ื™ืจื•ืช ืขืœ AI ื•ืœืงื‘ืœ ื”ืฉืจืื” ืžื”ื™ืฉื’ื™ื ื—ื“ืฉื™ื. ืื ืœืžืคืชื— ื™ืฉ ืžื—ืฉื‘ื•ืช ื—ืฉื•ื‘ื•ืช ื‘ื ื•ืฉื ื–ื”, ื”ื•ื ื™ื•ื›ืœ ืœื”ื•ืกื™ืฃ ืื•ืชืŸ ืœืžืื’ืจ.

ื ืชื—ื™ืœ ื‘ื™ื™ื‘ื•ื โ€‹โ€‹ื”ืžื•ื“ื•ืœื™ื ื”ื ื“ืจืฉื™ื ื•ื”ื’ื“ืจืช Flask:

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

ื‘ืงื˜ืข ื–ื”, Flask, Api ื•-Resource ื”ื ื”ืžื—ืœืงื•ืช ืฉืื ื• ืฆืจื™ื›ื™ื.

Reqparse ื”ื•ื ืžืžืฉืง ื ื™ืชื•ื— ื‘ืงืฉื•ืช Flask-RESTful... ืชืฆื˜ืจืš ื’ื ืืช ื”ืžื•ื“ื•ืœ ื”ืืงืจืื™ ื›ื“ื™ ืœื”ืฆื™ื’ ืฆื™ื˜ื•ื˜ ืืงืจืื™.

ื›ืขืช ื ื™ืฆื•ืจ ืžืื’ืจ ืฉืœ ืฆื™ื˜ื•ื˜ื™ื ืขืœ 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."
    }
]

ื›ืขืช ืขืœื™ื ื• ืœื™ืฆื•ืจ ืžื—ืœืงืช ืžืฉืื‘ื™ื ืฉืœ Quote ืฉืชื’ื“ื™ืจ ืืช ื”ืคืขื•ืœื•ืช ืฉืœ ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœื ื• ื‘-API. ื™ืฉ ืœื”ืฆื”ื™ืจ ืขืœ ืืจื‘ืข ืฉื™ื˜ื•ืช ื‘ืชื•ืš ื”ืžื—ืœืงื”: get, post, put, delete.

ื ืชื—ื™ืœ ื‘ืฉื™ื˜ืช 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" ืžื•ืฆื’ืช.

ื–ื›ื•ืจ, ื”ืฉื™ื˜ื” ืžื—ื–ื™ืจื” ืกื˜ื˜ื•ืก HTTP ืฉืœ 200 ืื ื”ื‘ืงืฉื” ื”ืฆืœื™ื—ื” ื•-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, ืœื”ื’ื“ื™ืจ ืืช ื”ื ืชื™ื‘ ื•ืœื”ืคืขื™ืœ ืืช Flask.

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, ืื• ืขืœ ื™ื“ื™ ืคืจืกื•ื ื”-API ื‘-API Rapid.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืคืจืกื•ื ื”-API ืฉืœื ื•

RapidAPI ื”ื•ื ื”ืฉื•ืง ื”ื’ื“ื•ืœ ื‘ืขื•ืœื ืขื ืœืžืขืœื” ืž-10 ืžืžืฉืงื™ API (ื•ื›ืžื™ืœื™ื•ืŸ ืžืคืชื—ื™ื).

RapidAPI ืœื ืจืง ืžืกืคืง ืžืžืฉืง ื™ื—ื™ื“ ืœืขื‘ื•ื“ื” ืขื ืžืžืฉืงื™ API ืฉืœ ืฆื“ ืฉืœื™ืฉื™, ืืœื ื’ื ืžืืคืฉืจ ืœืš ืœืคืจืกื ื‘ืžื”ื™ืจื•ืช ื•ื‘ืงืœื•ืช ืžืžืฉืง API ืžืฉืœืš.

ืืœ ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืชื—ื™ืœื” ืขืœื™ืš ืœืคืจืกื ืื•ืชื• ื‘ืฉืจืช ื›ืœืฉื”ื• ื‘ืจืฉืช. ื‘ืžืงืจื” ืฉืœื ื•, ื ืฉืชืžืฉ Heroku. ื”ืขื‘ื•ื“ื” ืื™ืชื• ืœื ืืžื•ืจื” ืœื’ืจื•ื ืœืงืฉื™ื™ื, (ืชื•ื›ืœ ืœื‘ืจืจ ืขืœ ื›ืš ื™ื•ืชืจ ื›ืืŸ).

ื›ื™ืฆื“ ืœืคืจืกื ืืช ื”-API ืฉืœืš ื‘-Heroku

1. ื”ืชืงืŸ ืืช Heroku.

ื”ืฉืœื‘ ื”ืจืืฉื•ืŸ ื”ื•ื ืจื™ืฉื•ื ื•ื”ืชืงื ืช ืžืžืฉืง ืฉื•ืจืช ื”ืคืงื•ื“ื” ืฉืœ Heroku (CLI). ื–ื” ืขื•ื‘ื“ ืขืœ ืื•ื‘ื•ื ื˜ื• 16+.

sudo snap install heroku --classic

ืœืื—ืจ ืžื›ืŸ ืื ื• ื ื›ื ืกื™ื:

ื”ืชื—ื‘ืจื•ืช ื”ืจื•ืงื•

2. ื”ื•ืกืฃ ืืช ื”ืงื‘ืฆื™ื ื”ื“ืจื•ืฉื™ื.

ื›ืขืช ืขืœื™ื ื• ืœื”ื•ืกื™ืฃ ืืช ื”ืงื‘ืฆื™ื ืœืคืจืกื•ื ืœืชื™ืงื™ื” ื‘ืืคืœื™ืงืฆื™ื” ืฉืœื ื•:

  • requirements.txt ืขื ืจืฉื™ืžื” ืฉืœ ืžื•ื“ื•ืœื™ Python ื ื“ืจืฉื™ื;
  • Procfile, ื”ืžืฆื™ื™ืŸ ืื™ืœื• ืคืงื•ื“ื•ืช ื™ืฉ ืœื‘ืฆืข ื›ื“ื™ ืœื”ืคืขื™ืœ ืืช ื”ื™ื™ืฉื•ื;
  • .gitignore - ื›ื“ื™ ืœื ืœื›ืœื•ืœ ืงื‘ืฆื™ื ืฉืื™ื ื ื ื—ื•ืฆื™ื ื‘ืฉืจืช.

ืงื•ื‘ืฅ requirements.txt ื™ื›ื™ืœ ืืช ื”ืฉื•ืจื•ืช ื”ื‘ืื•ืช:

  • ื‘ืงื‘ื•ืง
  • ื‘ืงื‘ื•ืง ืจื’ื•ืข
  • ื’ื ื™ืงื•ืจืŸ

ืฉื™ืžื• ืœื‘ ืฉื”ื•ืกืคื ื• ืืช ื’ื•ื ื™ืงื•ืจืŸ (Python WSGI HTTP Server) ืœืจืฉื™ืžื” ื›ื™ ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœื”ืคืขื™ืœ ืืช ื”ืืคืœื™ืงืฆื™ื” ืฉืœื ื• ื‘ืฉืจืช.

ื”ืคืจื•ืคื™ืœ ื™ื›ื™ืœ:

ืื™ื ื˜ืจื ื˜: ืืคืœื™ืงืฆื™ื™ืช ื’ื ื™ืงื•ืจืŸ: ืืคืœื™ืงืฆื™ื”

ืชื•ื›ืŸ ืฉืœ โ€Ž.gitignore:

*.pyc
__pycache__/

ืขื›ืฉื™ื• ื›ืฉื”ืงื‘ืฆื™ื ื ื•ืฆืจื•, ื‘ื•ืื• ื ืืชื—ืœ ืืช ื”-git repo ื•ื ื‘ืฆืข commit:

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 ื™ื”ื™ื” ื–ืžื™ืŸ ื‘ your-random-heroku-name.herokuapp.com/ai-quotes.

ื›ื™ืฆื“ ืœื”ื•ืกื™ืฃ ืืช Python API ืœืฉื•ืง RapidAPI

ื‘ืจื’ืข ืฉืฉื™ืจื•ืช ื”-API ืžืชืคืจืกื ื‘-Heroku, ืืชื” ื™ื›ื•ืœ ืœื”ื•ืกื™ืฃ ืื•ืชื• ืœ-Rapid API. ื›ืืŸ ืชื™ืขื•ื“ ืžืคื•ืจื˜ ื‘ื ื•ืฉื ื–ื”.

1. ืฆื•ืจ ื—ืฉื‘ื•ืŸ RapidAPI.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืื ื• ืจื•ืฉืžื™ื ื—ืฉื‘ื•ืŸ ื—ื™ื ืžื™ - ื ื™ืชืŸ ืœืขืฉื•ืช ื–ืืช ื‘ืืžืฆืขื•ืช ืคื™ื™ืกื‘ื•ืง, ื’ื•ื’ืœ, GitHub.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

2. ื”ื•ืกืฃ API ืœืœื•ื— ื”ื‘ืงืจื”.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

3. ืœืื—ืจ ืžื›ืŸ, ื”ื–ืŸ ืžื™ื“ืข ื›ืœืœื™ ืขืœ ื”-API ืฉืœืš.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

4. ืœืื—ืจ ืœื—ื™ืฆื” ืขืœ "ื”ื•ืกืฃ API" ืžื•ืคื™ืข ื“ืฃ ื—ื“ืฉ ื‘ื• ื ื™ืชืŸ ืœื”ื–ื™ืŸ ืžื™ื“ืข ืขืœ ื”-API ืฉืœื ื•.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

5. ื›ืขืช ืืชื” ื™ื›ื•ืœ ืœื”ื–ื™ืŸ ื™ื“ื ื™ืช ืืช ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”-API, ืื• ืœื”ื•ืจื™ื“ ืงื•ื‘ืฅ swagger ื‘ืืžืฆืขื•ืช OpenAPI.

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ื•ื‘ื›ืŸ, ื›ืขืช ืขืœื™ืš ืœื”ื’ื“ื™ืจ ืืช ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”-API ืฉืœื ื• ื‘ื“ืฃ ื ืงื•ื“ื•ืช ื”ืงืฆื”. ื‘ืžืงืจื” ืฉืœื ื•, ื ืงื•ื“ื•ืช ื”ืงืฆื” ืžืชืื™ืžื•ืช ืœืžื•ืฉื’ CRUD (ืงื‘ืœ, ืคืจืกื, ืฉื™ื, ืžื—ืง).

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืœืื—ืจ ืžื›ืŸ, ืขืœื™ืš ืœื™ืฆื•ืจ ื ืงื•ื“ืช ืงืฆื” ืฉืœ GET AI Quote ืฉืžืฆื™ื’ื” ืฆื™ื˜ื•ื˜ ืืงืจืื™ (ืื ื”ืžื–ื”ื” ื”ื•ื ื‘ืจื™ืจืช ื”ืžื—ื“ืœ) ืื• ื”ืฆืขืช ืžื—ื™ืจ ืขื‘ื•ืจ ื”ืžื–ื”ื” ืฉืฆื•ื™ืŸ.

ื›ื“ื™ ืœื™ืฆื•ืจ ื ืงื•ื“ืช ืงืฆื”, ืขืœื™ืš ืœืœื—ื•ืฅ ืขืœ ื›ืคืชื•ืจ "ืฆื•ืจ ื ืงื•ื“ืช ืงืฆื”".

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืื ื• ื—ื•ื–ืจื™ื ืขืœ ืชื”ืœื™ืš ื–ื” ืขื‘ื•ืจ ื›ืœ ืฉืืจ ื ืงื•ื“ื•ืช ื”ืงืฆื” ืฉืœ ื”-API. ื–ื” ื”ื›ืœ! ืžื–ืœ ื˜ื•ื‘, ืคืจืกืžืช ืืช ื”-API ืฉืœืš!

ืื ื”ื›ืœ ื™ืœืš ื›ืฉื•ืจื”, ื“ืฃ ื”-API ื™ื™ืจืื” ื‘ืขืจืš ื›ืš:

ื›ืชื™ื‘ืช API ื‘-Python (ืขื Flask ื•-RapidAPI)

ืžืกืงื ื”

ื‘ืžืืžืจ ื–ื” ืขื‘ืจื ื• ืขืœ ื”ืชื”ืœื™ืš ืฉืœ ื™ืฆื™ืจืช ืฉื™ืจื•ืช RESTful API ืžืฉืœื ื• ื‘-Python, ื™ื—ื“ ืขื ืชื”ืœื™ืš ืคืจืกื•ื ื”-API ืœืขื ืŸ Heroku ื•ื”ื•ืกืคืชื• ืœืกืคืจื™ื™ืช RapidAPI.

ืื‘ืœ ื‘ื’ืจืกืช ื”ื‘ื“ื™ืงื” ื”ื•ืฆื’ื• ืจืง ื”ืขืงืจื•ื ื•ืช ื”ื‘ืกื™ืกื™ื™ื ืฉืœ ืคื™ืชื•ื— API - ื ื™ื•ืื ืกื™ื ื›ืžื• ืื‘ื˜ื—ื”, ืกื•ื‘ืœื ื•ืช ืชืงืœื•ืช ื•ืžื“ืจื’ื™ื•ืช ืœื ื ืฉืงืœื•.

ื›ืืฉืจ ืžืคืชื—ื™ื ืžืžืฉืง API ืืžื™ืชื™, ื™ืฉ ืœืงื—ืช ืืช ื›ืœ ื–ื” ื‘ื—ืฉื‘ื•ืŸ.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”