Kuandika API katika Python (na Flask na RapidAPI)

Kuandika API katika Python (na Flask na RapidAPI)

Ikiwa unasoma nakala hii, labda tayari unajua uwezekano unaokuja kwa kutumia API (Kiolesura cha Kuandaa Programu).

Kwa kuongeza mojawapo ya API nyingi zilizo wazi kwenye programu yako, unaweza kupanua utendaji wa programu au kuiboresha kwa data muhimu. Lakini vipi ikiwa utatengeneza kipengele cha kipekee ambacho ungependa kushiriki na jumuiya?

Jibu ni rahisi: unahitaji unda API yako mwenyewe.

Ingawa hii inaweza kuonekana kama kazi ngumu mwanzoni, kwa kweli ni rahisi. Tutakuonyesha jinsi ya kufanya hivyo kwa kutumia Python.

Unachohitaji ili kuanza

Ili kuunda API unahitaji:

  • Chatu 3;
  • Flask - mfumo rahisi na rahisi kutumia wa kuunda programu za wavuti;
  • Chupa-Inayotulia ni kiendelezi cha Flask kinachokuruhusu kukuza API ya REST haraka na kwa usanidi mdogo.

Ufungaji unafanywa kwa amri:

pip install flask-restful

Tunapendekeza kozi ya bure ya programu kwa Kompyuta:
Ukuzaji wa bot ya Telegraph katika C # - Agosti 26-28. Kozi kubwa ya bure ambayo hukuruhusu kuelewa jinsi roboti msaidizi hufanya kazi, maalum ya kufanya kazi na API ya Telegraph na nuances zingine. Washiriki watatu bora watapata rubles 30 kutoka kwa Skillbox.

Kabla ya kuanza

Tutatengeneza RESTful API yenye msingi Utendaji wa CRUID.

Ili kuelewa kazi kikamilifu, hebu tuelewe maneno mawili yaliyotajwa hapo juu.

REST ni nini?

REST API (Uhamisho wa Hali Uwakilishi) ni API inayotumia maombi ya HTTP kubadilishana data.

API za REST lazima zifikie vigezo fulani:

  • Usanifu wa seva ya mteja: Mteja huingiliana na kiolesura cha mtumiaji, na seva huingiliana na mazingira ya nyuma na hifadhi ya data. Mteja na seva ni huru, yoyote kati yao inaweza kubadilishwa tofauti na nyingine.
  • Isiyo na utaifa - hakuna data ya mteja iliyohifadhiwa kwenye seva. Hali ya kikao imehifadhiwa kwa upande wa mteja.
  • Uwekaji Akiba - Wateja wanaweza kuweka akiba ya majibu ya seva ili kuboresha utendaji wa jumla.

CRUD ni nini?

MBICHI ni dhana ya programu inayoelezea vitendo vinne vya msingi (kuunda, kusoma, kusasisha na kufuta).

Katika REST API, aina za ombi na mbinu za ombi zinawajibika kwa vitendo kama vile kuchapisha, kupata, kuweka, kufuta.

Kwa kuwa sasa tunaelewa masharti ya kimsingi, tunaweza kuanza kuunda API.

Maendeleo

Wacha tuunde hazina ya nukuu kuhusu akili ya bandia. AI ni moja ya teknolojia inayokua kwa kasi zaidi leo, na Python ni zana maarufu ya kufanya kazi na AI.

Kwa API hii, msanidi wa Python anaweza kupata habari haraka kuhusu AI na kupata msukumo wa maendeleo mapya. Ikiwa msanidi ana mawazo muhimu juu ya mada hii, ataweza kuwaongeza kwenye hifadhi.

Wacha tuanze kwa kuingiza moduli zinazohitajika na kusanidi Flask:

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

Katika kijisehemu hiki, Flask, Api na Rasilimali ndizo madarasa tunayohitaji.

Reqparse ni kiolesura cha kuchanganua hoja ya Flask-RESTful... Utahitaji pia moduli nasibu ili kuonyesha nukuu nasibu.

Sasa tutaunda hazina ya nukuu kuhusu AI.

Kila kiingilio cha repo kitakuwa na:

  • kitambulisho cha kidijitali;
  • jina la mwandishi wa nukuu;
  • nukuu.

Kwa kuwa huu ni mfano wa mafunzo, tutahifadhi maingizo yote kwenye orodha ya Python. Katika utumizi halisi, tunaweza kutumia hifadhidata badala yake.

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

Sasa tunahitaji kuunda darasa la nyenzo za Nukuu ambalo litafafanua utendakazi wa miisho ya API yetu. Ndani ya darasa unahitaji kutangaza njia nne: kupata, kuchapisha, kuweka, kufuta.

Wacha tuanze na njia ya GET

Huwezesha kupata nukuu mahususi kwa kubainisha kitambulisho chake, au nukuu nasibu ikiwa kitambulisho hakijabainishwa.

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

Mbinu ya GET inarudisha nukuu nasibu ikiwa kitambulisho kina thamani chaguo-msingi, i.e. hakuna kitambulisho kilichobainishwa wakati wa kupiga njia.

Ikiwa imeainishwa, basi njia hutafuta kati ya nukuu na kupata ile iliyo na kitambulisho maalum. Ikiwa hakuna kitu kinachopatikana, ujumbe "Quote haipatikani, 404" inaonyeshwa.

Kumbuka: njia inarudisha hali ya HTTP ya 200 ikiwa ombi lilifanikiwa na 404 ikiwa rekodi haikupatikana.

Sasa wacha tuunde njia ya POST ili kuongeza nukuu mpya kwenye hazina

Itapata kitambulisho cha kila nukuu mpya unapoandika. Kwa kuongezea, POST itatumia reqparse kuchanganua vigezo ambavyo vitaenda kwenye chombo cha ombi (mwandishi na maandishi ya nukuu).

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

Katika msimbo ulio hapo juu, mbinu ya POST ilikubali kitambulisho cha nukuu. Kisha, kwa kutumia reqparse, ilipata mwandishi na nukuu kutoka kwa hoja, na kuzihifadhi kwenye kamusi ya params.

Ikiwa nukuu iliyo na kitambulisho kilichobainishwa tayari ipo, njia hiyo inaonyesha ujumbe unaolingana na msimbo 400.

Ikiwa nukuu iliyo na kitambulisho maalum bado haijaundwa, njia hiyo inaunda rekodi mpya na kitambulisho maalum na mwandishi, pamoja na vigezo vingine. Kisha inaongeza kiingilio kwenye orodha ya ai_quotes na inarudisha kiingilio na nukuu mpya pamoja na nambari ya 201.

Sasa tunaunda njia ya PUT ya kubadilisha nukuu iliyopo kwenye hazina

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

Mbinu ya PUT, sawa na mfano uliopita, inachukua kitambulisho na pembejeo na kuchanganua vigezo vya nukuu kwa kutumia reqparse.

Ikiwa dondoo iliyo na kitambulisho kilichobainishwa ipo, mbinu itaisasisha kwa vigezo vipya na kisha kutoa dondoo lililosasishwa kwa kutumia msimbo 200. Ikiwa bado hakuna manukuu yenye kitambulisho kilichobainishwa, rekodi mpya yenye msimbo 201 itaundwa.

Hatimaye, wacha tuunde njia ya KUFUTA ili kuondoa nukuu ambayo haichangamshi tena

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

Njia hii hupata kitambulisho cha nukuu kama ingizo na kusasisha orodha ya ai_quotes kwa kutumia orodha iliyoshirikiwa.

Sasa kwa kuwa tumeunda mbinu zote, tunachohitaji kufanya ni kuongeza tu rasilimali kwenye API, kuweka njia, na kuendesha Flask.

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

Huduma yetu ya REST API iko tayari!

Ifuatayo, tunaweza kuhifadhi nambari kwenye faili ya app.py kwa kuiendesha kwenye koni kwa kutumia amri:

python3 app.py

Ikiwa kila kitu ni nzuri, basi tutapata kitu kama hiki:

* Hali ya utatuzi: imewashwa
*Inaendelea 127.0.0.1:5000/ (Bonyeza CTRL+C ili kuacha)
* Inaanza upya na takwimu
* Kitatuzi kinatumika!
* PIN ya Kitatuzi: XXXXXXX

Kujaribu API

Mara tu API inapoundwa, inahitaji kujaribiwa.

Hili linaweza kufanywa kwa kutumia matumizi ya koni ya curl au mteja wa Insomnia REST, au kwa kuchapisha API kwenye API ya Haraka.

Kuandika API katika Python (na Flask na RapidAPI)

Kuchapisha API yetu

RapidAPI ndilo soko kubwa zaidi duniani lenye zaidi ya API 10 (na watengenezaji wapatao milioni 000).

RapidAPI haitoi kiolesura kimoja tu cha kufanya kazi na API za wahusika wengine, lakini pia hukuruhusu kuchapisha haraka na kwa urahisi API yako mwenyewe.

Kwa kufanya hivi, kwanza unahitaji kuichapisha kwenye seva fulani kwenye mtandao. Kwa upande wetu tutatumia Heroku. Kufanya kazi nayo haipaswi kusababisha ugumu wowote, (unaweza kujua zaidi kumhusu hapa).

Jinsi ya Kuchapisha API yako kwenye Heroku

1. Weka Heroku.

Hatua ya kwanza ni kujiandikisha na kusakinisha Kiolesura cha Mstari wa Amri ya Heroku (CLI). Hii inafanya kazi kwa Ubuntu 16+.

sudo snap install heroku -classic

Kisha ingia:

heroku kuingia

2. Ongeza faili zinazohitajika.

Sasa tunahitaji kuongeza faili za kuchapishwa kwenye folda katika programu yetu:

  • mahitaji.txt na orodha ya moduli za Python zinazohitajika;
  • Procfile, ambayo inabainisha ni amri gani zinapaswa kutekelezwa ili kuendesha programu;
  • .gitignore - kuwatenga faili ambazo hazihitajiki kwenye seva.

Faili ya requirements.txt itakuwa na mistari ifuatayo:

  • chupa
  • chupa-ya kupumzika
  • gunicorn

Tafadhali kumbuka kuwa tumeongeza gunicorn (Seva ya HTTP ya Python WSGI) kwenye orodha kwa sababu tunahitaji kuendesha programu yetu kwenye seva.

Profaili itakuwa na:

mtandao: programu ya gunicorn: programu

Yaliyomo kwenye .gitignore:

*.pyc
__pycache__/

Sasa kwa kuwa faili zimeundwa, wacha tuanzishe git repo na tufanye:

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

3. Unda programu mpya ya Heroku.

heroku create

Tunasukuma tawi kuu kwa repo ya mbali ya Heroku:

git push heroku master

Sasa unaweza kuanza kwa kufungua Huduma ya API kwa kutumia amri:

heroku ps:scale web=1
heroku open
 

API itapatikana kwa your-random-heroku-name.herokuapp.com/ai-quotes.

Jinsi ya kuongeza API yako ya Python kwenye soko la RapidAPI

Pindi huduma yako ya API inapochapishwa kwenye Heroku, unaweza kuiongeza kwenye API ya Haraka. Hapa nyaraka za kina juu ya mada hii.

1. Fungua akaunti ya RapidAPI.

Kuandika API katika Python (na Flask na RapidAPI)

Sajili akaunti ya bure - hii inaweza kufanywa kwa kutumia Facebook, Google, GitHub.

Kuandika API katika Python (na Flask na RapidAPI)

2. Ongeza API kwenye paneli ya kudhibiti.

Kuandika API katika Python (na Flask na RapidAPI)

3. Kisha, ingiza maelezo ya jumla kuhusu API yako.

Kuandika API katika Python (na Flask na RapidAPI)

4. Baada ya kubofya "Ongeza API" ukurasa mpya unaonekana ambapo unaweza kuingiza habari kuhusu API yetu.

Kuandika API katika Python (na Flask na RapidAPI)

5. Sasa unaweza kuingiza kwa mikono ncha za API au kupakua faili ya swagger kwa kutumia OpenAPI.

Kuandika API katika Python (na Flask na RapidAPI)

Kweli, sasa tunahitaji kuweka miisho ya API yetu kwenye ukurasa wa Endpoints. Kwa upande wetu, miisho yanahusiana na dhana ya CRUD (kupata, kuchapisha, kuweka, kufuta).

Kuandika API katika Python (na Flask na RapidAPI)

Kisha, unahitaji kuunda sehemu ya mwisho ya Nukuu ya GET AI inayoonyesha nukuu nasibu (ikiwa kitambulisho ni chaguomsingi) au nukuu ya kitambulisho kilichobainishwa.

Ili kuunda sehemu ya mwisho, bofya kitufe cha "Unda Mwisho".

Kuandika API katika Python (na Flask na RapidAPI)

Tunarudia mchakato huu kwa vidokezo vingine vyote vya API. Ni hayo tu! Hongera, umechapisha API yako!

Ikiwa kila kitu kiko sawa, ukurasa wa API utaonekana kama hii:

Kuandika API katika Python (na Flask na RapidAPI)

Hitimisho

Katika nakala hii, tulijifunza mchakato wa kuunda Huduma yako ya API ya RESTful huko Python, pamoja na mchakato wa kuchapisha API kwenye wingu la Heroku na kuiongeza kwenye saraka ya RapidAPI.

Lakini toleo la majaribio lilionyesha tu kanuni za msingi za ukuzaji wa API - nuances kama vile usalama, uvumilivu wa makosa na ukali hazikuzingatiwa.

Wakati wa kuunda API halisi, yote haya yanahitaji kuzingatiwa.

Chanzo: mapenzi.com

Kuongeza maoni