API գրել Python-ով (Flask-ով և RapidAPI-ով)

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Եթե ​​կարդում եք այս հոդվածը, հավանաբար արդեն ծանոթ եք այն հնարավորություններին, որոնք բացվում են API-ն (Application Programming Interface) օգտագործելիս:

Ձեր հավելվածին ավելացնելով բազմաթիվ հանրային API-ներից մեկը՝ կարող եք ընդլայնել այս հավելվածի ֆունկցիոնալությունը կամ լրացնել այն անհրաժեշտ տվյալներով։ Բայց ի՞նչ անել, եթե դուք մշակել եք յուրահատուկ հատկանիշ, որը ցանկանում եք կիսվել համայնքի հետ:

Պատասխանը պարզ է՝ ձեզ հարկավոր է ստեղծել ձեր սեփական API-ն.

Թեև սկզբում սա կարող է դժվարին աշխատանք թվալ, այն իրականում բավականին պարզ է: Մենք ձեզ ցույց կտանք, թե ինչպես դա անել Python-ի հետ:

Այն, ինչ ձեզ հարկավոր է սկսելու համար

API-ի մշակումը պահանջում է.

  • Python3;
  • տափաշիշ — վեբ հավելվածներ ստեղծելու պարզ և հեշտ օգտագործման շրջանակ;
  • Flask-Հանգիստ Flask-ի ընդլայնում է, որը թույլ է տալիս արագ և նվազագույն կոնֆիգուրացիայով զարգացնել REST API:

Տեղադրումն իրականացվում է հրամանով.

pip install flask-restful

Մենք առաջարկում ենք անվճար ինտենսիվ ծրագրավորում սկսնակների համար.
Telegram բոտի մշակում C#-ում — օգոստոսի 26–28։ Անվճար ինտենսիվ, որը թույլ է տալիս հասկանալ, թե ինչպես են աշխատում օգնական բոտերը, Telegram API-ի հետ աշխատելու առանձնահատկությունները և այլ նրբերանգներ: Լավագույն երեք մասնակիցները Skillbox-ից կստանան 30 ռուբլի.

Նախքան սկսելը

Մենք պատրաստվում ենք RESTful API-ն մշակել հիմնականով CRUID ֆունկցիոնալությունը.

Առաջադրանքը լիովին հասկանալու համար եկեք հասկանանք վերը նշված երկու տերմինները։

Ի՞նչ է ՀԱՆԳՍՏՈՒՄԸ:

REST API-ն (Representational State Transfer) API է, որն օգտագործում է HTTP հարցումները տվյալների փոխանակման համար:

REST API-ները պետք է համապատասխանեն որոշակի չափանիշների՝

  • Հաճախորդ-սերվեր ճարտարապետություն. հաճախորդը փոխազդում է օգտատիրոջ միջերեսի հետ, իսկ սերվերը փոխազդում է հետնամասի և տվյալների պահեստի հետ: Հաճախորդը և սերվերը անկախ են, դրանցից որևէ մեկը կարող է փոխարինվել մյուսից առանձին:
  • Քաղաքացիություն չունեցող – Սերվերում հաճախորդի տվյալներ չեն պահվում: Սեսիայի վիճակը պահվում է հաճախորդի կողմից:
  • Cacheability - Հաճախորդները կարող են քեշավորել սերվերի պատասխանները՝ բարելավելու ընդհանուր կատարումը:

Ի՞նչ է CRUD-ը:

ՔԱԱՔ ծրագրավորման հայեցակարգ է, որը նկարագրում է չորս հիմնական գործողություններ (ստեղծել, կարդալ, թարմացնել և ջնջել):

REST API-ում հարցումների տեսակները և հարցումների մեթոդները պատասխանատու են այնպիսի գործողությունների համար, ինչպիսիք են՝ փակցնել, ստանալ, դնել, ջնջել:

Այժմ, երբ մենք գործ ունենք հիմնական պայմանների հետ, կարող ենք սկսել API-ի ստեղծումը:

Զարգացում

Եկեք ստեղծենք արհեստական ​​ինտելեկտի մասին մեջբերումների պահոց: AI-ն այսօր ամենաարագ զարգացող տեխնոլոգիաներից մեկն է, և Python-ը AI-ի հետ աշխատելու հայտնի գործիք է:

Այս 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-ի մասին մեջբերումների պահոց:

Յուրաքանչյուր ռեպո գրառում կպարունակի.

  • թվային ID;
  • Մեջբերման հեղինակի անունը;
  • մեջբերում.

Քանի որ սա պարզապես ուսումնական օրինակ է, մենք բոլոր գրառումները կպահենք 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 մեթոդից

Այն թույլ է տալիս ստանալ կոնկրետ գնանշում` նշելով դրա 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

GET մեթոդը վերադարձնում է պատահական մեջբերում, եթե ID-ն պարունակում է լռելյայն արժեքը, այսինքն. երբ զանգում է մեթոդի ID-ն սահմանված չէր:

Եթե ​​դրված է, ապա մեթոդը որոնում է չակերտների մեջ և գտնում է այն, որը պարունակում է տվյալ ID-ն։ Եթե ​​ոչինչ չի գտնվել, ցուցադրվում է «Մեջբերումը չի գտնվել, 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 մեթոդն ընդունում էր գնանշման ID: Այնուհետև, օգտագործելով reqparse, այն վերցրեց հեղինակին և մեջբերումը հարցումից՝ դրանք պահելով params բառարանում:

Եթե ​​նշված ID-ով մեջբերում արդեն կա, ապա մեթոդը ցուցադրում է համապատասխան հաղորդագրությունը և կոդը 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-ին, սահմանել ուղին և գործարկել 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՝ դուրս գալու համար)
* Վերագործարկվում է stat-ով
* Վրիպազերծիչը ակտիվ է:
* Վրիպազերծիչ PIN՝ XXXXXXX

API-ի փորձարկում

API-ի ստեղծումից հետո այն պետք է փորձարկվի:

Դա կարելի է անել՝ օգտագործելով curl console utility-ը կամ Insomnia REST հաճախորդը, կամ API-ը Rapid API-ում հրապարակելով:

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Հրապարակում ենք մեր API-ն

RapidAPI-ն աշխարհի ամենամեծ շուկան է, որն ունի ավելի քան 10 API (և մոտ 000 միլիոն մշակող):

RapidAPI-ն ոչ միայն ապահովում է մեկ ինտերֆեյս երրորդ կողմի API-ների հետ աշխատելու համար, այլ նաև թույլ է տալիս արագ և հեշտությամբ հրապարակել ձեր սեփական API-ն:

Դեպի անել դա, նախ անհրաժեշտ է այն հրապարակել ցանցի ինչ-որ սերվերի վրա: Մեր դեպքում մենք կօգտագործենք Heroku. Նրա հետ աշխատելը չպետք է որևէ դժվարություն առաջացնի, (դուք կարող եք ավելին իմանալ դրա մասին այստեղ).

Ինչպես հրապարակել ձեր API-ն Heroku-ում

1. Տեղադրեք Heroku-ն:

Առաջին քայլը գրանցումն ու տեղադրումն է Heroku Command Line Interface (CLI): Սա աշխատում է Ubuntu 16+-ում:

sudo snap install heroku --դասական

Այնուհետև մենք մուտք ենք գործում՝

heroku մուտք

2. Ավելացրեք անհրաժեշտ ֆայլերը:

Այժմ մենք պետք է ավելացնենք ֆայլերը՝ հրապարակելու համար մեր հավելվածի թղթապանակում՝

  • απαιτήσεις.txt՝ Python-ի պահանջվող մոդուլների ցանկով;
  • Procfile, որը նշում է, թե որ հրամանները պետք է կատարվեն հավելվածը գործարկելու համար.
  • .gitignore - բացառել ֆայլերը, որոնք անհրաժեշտ չեն սերվերում:

Required.txt ֆայլը կպարունակի հետևյալ տողերը.

  • շիշ
  • կոլբա-հանգիստ
  • հրացան

Խնդրում ենք նկատի ունենալ, որ մենք ավելացրել ենք Gunicorn (Python WSGI HTTP Server) ցուցակին, քանի որ մենք պետք է գործարկենք մեր հավելվածը սերվերի վրա:

Պրոֆայլը կպարունակի.

վեբ: Gunicorn հավելված:հավելված

.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-ն հասանելի կլինի հետևյալ հասցեով your-random-heroku-name.herokuapp.com/ai-quotes.

Ինչպես ավելացնել ձեր Python API-ն RapidAPI շուկայում

Երբ API ծառայությունը հրապարակվի Heroku-ում, դուք կարող եք այն ավելացնել Rapid API-ին: Այստեղ մանրամասն փաստաթղթեր այս թեմայի շուրջ:

1. Ստեղծեք RapidAPI հաշիվ:

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Մենք գրանցում ենք անվճար հաշիվ. դա կարելի է անել Facebook-ի, Google-ի, 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-ի վերջնակետերը Endpoints էջում: Մեր դեպքում վերջնակետերը համապատասխանում են CRUD հասկացությանը (ստանալ, տեղադրել, տեղադրել, ջնջել):

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Հաջորդը, դուք պետք է ստեղծեք GET AI Quote վերջնակետ, որը ցուցադրում է պատահական մեջբերում (եթե ID-ն լռելյայն է) կամ մեջբերում նշված ID-ի համար:

Վերջնական կետ ստեղծելու համար հարկավոր է սեղմել «Ստեղծել վերջնակետ» կոճակը:

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Մենք կրկնում ենք այս գործընթացը բոլոր մյուս API վերջնակետերի համար: Այսքանը: Շնորհավորում ենք, դուք հրապարակել եք ձեր API-ն:

Եթե ​​ամեն ինչ լավ ընթանա, API էջը կունենա այսպիսի տեսք.

API գրել Python-ով (Flask-ով և RapidAPI-ով)

Ամփոփում

Այս հոդվածում մենք քայլեցինք Python-ում մեր RESTful API ծառայության ստեղծման գործընթացով, ինչպես նաև API-ը Heroku ամպում հրապարակելու և RapidAPI գրացուցակում ավելացնելու գործընթացով:

Բայց թեստային տարբերակում ցուցադրվեցին միայն API-ի մշակման հիմնական սկզբունքները. այնպիսի նրբերանգներ, ինչպիսիք են անվտանգությունը, սխալների հանդուրժողականությունը և մասշտաբայնությունը, հաշվի չեն առնվել:

Իրական API մշակելիս այս ամենը պետք է հաշվի առնել։

Source: www.habr.com

Добавить комментарий