Kikọ API ni Python (pẹlu Flask ati RapidAPI)

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

Ti o ba n ka nkan yii, o ṣee ṣe pe o ti mọ tẹlẹ pẹlu awọn aye ti o ṣii lakoko lilo API (Aṣaro Eto Eto Ohun elo).

Nipa fifi ọkan ninu ọpọlọpọ awọn API ti gbogbo eniyan si ohun elo rẹ, o le fa iṣẹ ṣiṣe ti ohun elo yii tabi ṣe afikun pẹlu data pataki. Ṣugbọn kini ti o ba ti ṣe agbekalẹ ẹya alailẹgbẹ ti o fẹ pin pẹlu agbegbe?

Idahun si jẹ rọrun: o nilo ṣẹda API tirẹ.

Lakoko ti eyi le dabi iṣẹ ṣiṣe ti o nira ni akọkọ, o rọrun pupọ. A yoo fihan ọ bi o ṣe le ṣe eyi pẹlu Python.

Ohun ti o nilo lati bẹrẹ

API idagbasoke nbeere:

  • Python3;
  • Flask - ilana ti o rọrun ati rọrun lati lo fun ṣiṣẹda awọn ohun elo wẹẹbu;
  • Flask-RESTful jẹ itẹsiwaju fun Flask ti o fun ọ laaye lati ṣe agbekalẹ API REST ni kiakia ati pẹlu iṣeto ni iwonba.

Fifi sori jẹ ṣiṣe nipasẹ aṣẹ:

pip install flask-restful

A ṣeduro siseto aladanla ọfẹ fun awọn olubere:
Idagbasoke bot Telegram ni C # — Oṣu Kẹjọ Ọjọ 26–28. Itoju ọfẹ ti o fun ọ laaye lati loye bi awọn bot oluranlọwọ ṣiṣẹ, awọn ẹya ti ṣiṣẹ pẹlu API Telegram ati awọn nuances miiran. Awọn olukopa mẹta ti o ga julọ yoo gba 30 rubles lati Skillbox.

Ṣaaju ki o to bẹrẹ

A yoo ṣe agbekalẹ API RESTful pẹlu ipilẹ kan CRUID iṣẹ.

Lati loye iṣẹ naa ni kikun, jẹ ki a loye awọn ofin meji ti a mẹnuba loke.

Kini REST?

REST API (Gbigbe lọ si Ipinle Aṣoju) jẹ API ti o nlo awọn ibeere HTTP lati paarọ data.

Awọn API REST gbọdọ pade awọn ilana kan:

  • Onibara-server faaji: ibara nlo pẹlu wiwo olumulo, ati awọn olupin nlo pẹlu awọn backend ati data itaja. Onibara ati olupin wa ni ominira, eyikeyi ninu wọn le rọpo lọtọ lati ekeji.
  • Alaini orilẹ-ede - Ko si data alabara ti o fipamọ sori olupin naa. Ipo igba ti wa ni ipamọ lori ẹgbẹ onibara.
  • Cacheability - Awọn alabara le kaṣe awọn idahun olupin lati mu ilọsiwaju iṣẹ ṣiṣe pọ si.

Kini CRUD?

RAW jẹ ero siseto ti o ṣe apejuwe awọn iṣe ipilẹ mẹrin (ṣẹda, ka, imudojuiwọn ati paarẹ).

Ninu API REST, awọn oriṣi ibeere ati awọn ọna ibeere jẹ iduro fun awọn iṣe bii ifiweranṣẹ, gba, fi sii, paarẹ.

Ni bayi ti a ti ṣe pẹlu awọn ofin ipilẹ, a le bẹrẹ ṣiṣẹda API.

Idagbasoke

Jẹ ki a ṣẹda ibi ipamọ ti awọn agbasọ nipa oye atọwọda. AI jẹ ọkan ninu awọn imọ-ẹrọ ti o dagba ni iyara julọ loni, ati Python jẹ ohun elo olokiki fun ṣiṣẹ pẹlu AI.

Pẹlu API yii, olupilẹṣẹ Python le yara kọ ẹkọ nipa AI ati ni atilẹyin nipasẹ awọn aṣeyọri tuntun. Ti olupilẹṣẹ ba ni awọn ero ti o niyelori lori koko yii, yoo ni anfani lati ṣafikun wọn si ibi ipamọ naa.

Jẹ ki a bẹrẹ nipa gbigbe wọle awọn modulu ti o nilo ati ṣeto Flask:

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

Ninu snippet yii, Flask, Api ati Resource jẹ awọn kilasi ti a nilo.

Reqparse jẹ atọwọdọwọ ibeere Flask-RESTful… Iwọ yoo tun nilo module ID lati ṣafihan agbasọ laileto kan.

Bayi a yoo ṣẹda ibi ipamọ ti awọn agbasọ nipa AI.

Akọsilẹ kọọkan yoo ni:

  • ID oni-nọmba;
  • awọn orukọ ti onkowe ti awọn ń;
  • agbasọ.

Niwọn bi eyi jẹ apẹẹrẹ ikẹkọ nikan, a yoo tọju gbogbo awọn titẹ sii sinu atokọ Python kan. Ninu ohun elo gidi, a yoo ṣeese julọ lo aaye data dipo.

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."
    }
]

Bayi a nilo lati ṣẹda kilasi orisun Quote kan ti yoo ṣalaye awọn iṣẹ ṣiṣe ti awọn aaye ipari API wa. Awọn ọna mẹrin gbọdọ wa ni ikede ni inu kilasi: gba, firanṣẹ, fi sii, paarẹ.

Jẹ ki a bẹrẹ pẹlu ọna GET

O gba ọ laaye lati gba agbasọ kan pato nipa sisọ ID rẹ, tabi agbasọ ọrọ laileto ti ko ba si ID pato.

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

Ọna GET da agbasọ laileto pada ti ID naa ba ni iye aiyipada, i.e. nigbati pipe ọna ID ko ṣeto.

Ti o ba ti ṣeto, lẹhinna ọna naa wa laarin awọn agbasọ ati rii ọkan ti o ni ID ti a fun. Ti ko ba ri nkankan, ifiranṣẹ naa “Ko ri, 404” yoo han.

Ranti, ọna naa da pada ipo HTTP ti 200 ti ibeere naa ba ṣaṣeyọri ati 404 ti a ko ba rii titẹsi naa.

Bayi jẹ ki a ṣẹda ọna POST lati ṣafikun agbasọ tuntun si ibi ipamọ naa

Yoo gba id ti agbasọ tuntun kọọkan bi o ṣe tẹ. Ni afikun, POST yoo lo reqparse lati ṣe itupalẹ awọn aye ti yoo lọ sinu ara ibeere (onkọwe ati ọrọ agbasọ).

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

Ninu koodu ti o wa loke, ọna POST gba ID agbasọ kan. Lẹhinna, ni lilo reqparse, o gba onkọwe pada ati agbasọ ọrọ lati inu ibeere naa, ni fifipamọ wọn sinu iwe-itumọ params.

Ti agbasọ kan pẹlu ID pàtó kan ti wa tẹlẹ, lẹhinna ọna naa ṣafihan ifiranṣẹ ti o yẹ ati koodu 400.

Ti agbasọ kan pẹlu ID ti a ti sọ tẹlẹ ko ti ṣẹda, ọna naa ṣẹda titẹsi tuntun pẹlu ID ati onkọwe pàtó kan, ati awọn aye miiran. Lẹhinna o ṣafikun titẹ sii si atokọ ai_quotes ati da titẹ sii pada pẹlu agbasọ tuntun kan pẹlu koodu 201 kan.

Bayi a ṣẹda ọna PUT lati yi agbasọ ti o wa tẹlẹ ninu ibi ipamọ naa

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

Ọna PUT, ti o jọra si apẹẹrẹ ti tẹlẹ, gba ID kan ati titẹ sii ati ṣe itupalẹ awọn aye asọye nipa lilo reqparse.

Ti agbasọ kan pẹlu ID pàtó kan wa, ọna naa yoo ṣe imudojuiwọn rẹ pẹlu awọn aye tuntun ati lẹhinna gbejade agbasọ imudojuiwọn pẹlu koodu 200. Ti ko ba si agbasọ pẹlu ID pàtó kan sibẹsibẹ, igbasilẹ tuntun pẹlu koodu 201 yoo ṣẹda.

Nikẹhin, jẹ ki a ṣẹda ọna PARA lati yọkuro agbasọ ọrọ ti ko ni iwuri mọ.

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

Ọna yii gba ID agbasọ bi titẹ sii ati ṣe imudojuiwọn atokọ ti ai_quotes nipa lilo atokọ pinpin.

Ni bayi ti a ti ṣẹda gbogbo awọn ọna, gbogbo ohun ti a nilo lati ṣe ni ṣafikun awọn orisun si API, ṣeto ọna, ati ṣiṣe Flask.

api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
    app.run(debug=True)

Iṣẹ API REST wa ti ṣetan!

Nigbamii, a le ṣafipamọ koodu naa si faili app.py nipa ṣiṣiṣẹ ni console pẹlu aṣẹ naa:

python3 app.py

Ti ohun gbogbo ba dara, lẹhinna a yoo gba nkan bii eyi:

* Ipo yokokoro: lori
* Ṣiṣẹ lori 127.0.0.1:5000/ (Tẹ CTRL+C lati dawọ silẹ)
* Tun bẹrẹ pẹlu iṣiro
* Debugger nṣiṣẹ lọwọ!
* PIN oluyipada: XXXXXXX

Idanwo API

Lẹhin ti API ti ṣẹda, o nilo lati ni idanwo.

Eyi le ṣee ṣe nipa lilo ohun elo console curl tabi alabara Insomnia REST, tabi nipa titẹjade API lori API Dekun.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

Titẹjade API wa

RapidAPI jẹ ibi ọja ti o tobi julọ ni agbaye pẹlu diẹ sii ju 10 APIs (ati nipa awọn oludasilẹ miliọnu kan).

RapidAPI kii ṣe pese ni wiwo ẹyọkan fun ṣiṣẹ pẹlu awọn API ẹni-kẹta, ṣugbọn tun gba ọ laaye lati ṣe atẹjade API tirẹ ni iyara ati irọrun.

Lati le lati ṣe eyi, o nilo lati kọkọ jade si olupin diẹ ninu nẹtiwọki. Ninu ọran wa, a yoo lo Heroku. Ṣiṣẹ pẹlu rẹ ko yẹ ki o fa awọn iṣoro eyikeyi, (o le wa diẹ sii nipa rẹ nibi).

Bii o ṣe le ṣe atẹjade API rẹ lori Heroku

1. Fi sori ẹrọ Heroku.

Igbesẹ akọkọ ni lati forukọsilẹ ati fi sii ni wiwo Laini Laini aṣẹ Heroku (CLI). Eyi ṣiṣẹ lori Ubuntu 16+.

sudo snap fi sori ẹrọ heroku --classic

Lẹhinna a wọle:

heroku wiwọle

2. Fi awọn pataki awọn faili.

Bayi a nilo lati ṣafikun awọn faili lati gbejade si folda ninu ohun elo wa:

  • shuruudaha.txt pẹlu atokọ ti awọn modulu Python ti a beere;
  • Procfile, eyiti o ṣalaye iru awọn aṣẹ ti o gbọdọ ṣiṣẹ lati ṣiṣẹ ohun elo naa;
  • .gitignore - lati yọkuro awọn faili ti ko nilo lori olupin naa.

Faili awọn ibeere.txt yoo ni awọn laini wọnyi ninu:

  • igo
  • flask-isimi
  • gunicorn

Jọwọ ṣe akiyesi pe a ti ṣafikun gunicorn (Python WSGI HTTP Server) si atokọ nitori a nilo lati ṣiṣẹ ohun elo wa lori olupin naa.

Ilana yoo ni:

ayelujara: gunicorn app: app

Akoonu ti .gitignore:

*.pyc
__pycache__/

Ni bayi pe awọn faili ti ṣẹda, jẹ ki a bẹrẹ git repo ki o ṣe:

git init
git add
git commit -m "First API commit"

3. Ṣẹda titun kan Heroku app.

heroku create

Titari ẹka titunto si si Heroku repo latọna jijin:

git push heroku master

Bayi o le bẹrẹ nipa ṣiṣi Iṣẹ API pẹlu awọn aṣẹ:

heroku ps:scale web=1
heroku open
 

API yoo wa ni your-random-heroku-name.herokuapp.com/ai-quotes.

Bii o ṣe le ṣafikun Python API rẹ si aaye ọjà RapidAPI

Ni kete ti iṣẹ API ba ti tẹjade lori Heroku, o le ṣafikun si API Rapid. Nibi alaye iwe lori koko yii.

1. Ṣẹda iroyin RapidAPI.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

A forukọsilẹ iroyin ọfẹ - eyi le ṣee ṣe nipa lilo Facebook, Google, GitHub.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

2. Fi API si awọn iṣakoso nronu.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

3. Nigbamii, tẹ alaye gbogbogbo nipa API rẹ sii.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

4. Lẹhin tite "Fi API" oju-iwe tuntun han nibiti o le tẹ alaye sii nipa API wa.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

5. Bayi o le boya pẹlu ọwọ tẹ API endpoints, tabi download swagger faili lilo OpenAPI.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

O dara, ni bayi o nilo lati ṣeto awọn aaye ipari ti API wa lori oju-iwe Awọn ipari. Ninu ọran wa, awọn aaye ipari ni ibamu si imọran ti CRUD (gba, firanṣẹ, fi, paarẹ).

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

Nigbamii ti, o nilo lati ṣẹda aaye ipari GET AI Quote ti o ṣafihan agbasọ laileto kan (ti ID ba jẹ aiyipada) tabi agbasọ kan fun ID pàtó kan.

Lati ṣẹda aaye ipari, o nilo lati tẹ bọtini “Ṣẹda Ipari”.

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

A tun ilana yi fun gbogbo awọn miiran API endpoints. Gbogbo ẹ niyẹn! Oriire, o ti ṣe atẹjade API rẹ!

Ti ohun gbogbo ba lọ daradara, oju-iwe API yoo dabi nkan bi eleyi:

Kikọ API ni Python (pẹlu Flask ati RapidAPI)

ipari

Ninu àpilẹkọ yii, a rin nipasẹ ilana ti ṣiṣẹda Iṣẹ API RESTful tiwa ni Python, pẹlu ilana ti atẹjade API si awọsanma Heroku ati fifi kun si iwe ilana RapidAPI.

Ṣugbọn ninu ẹya idanwo, awọn ipilẹ ipilẹ ti idagbasoke API nikan ni a fihan - iru awọn nuances bi aabo, ifarada ẹbi ati iwọn iwọn ni a ko gbero.

Nigbati o ba n ṣe agbekalẹ API gidi kan, gbogbo eyi gbọdọ wa ni akiyesi.

orisun: www.habr.com

Fi ọrọìwòye kun