Rubuta API a Python (tare da Flask da RapidAPI)

Rubuta API a Python (tare da Flask da RapidAPI)

Idan kana karanta wannan labarin, tabbas kun riga kun saba da yuwuwar da ke tattare da amfani da API (Application Programming Interface).

Ta ƙara ɗaya daga cikin yawancin buɗaɗɗen APIs zuwa aikace-aikacenku, zaku iya tsawaita ayyukan aikace-aikacen ko wadatar da shi da mahimman bayanai. Amma idan kun ɓullo da wani siffa na musamman da kuke son rabawa tare da al'umma fa?

Amsar ita ce mai sauƙi: kuna buƙata ƙirƙirar API ɗin ku.

Ko da yake wannan yana iya zama kamar aiki mai wuyar gaske da farko, hakika yana da sauƙi. Za mu nuna muku yadda ake yin wannan ta amfani da Python.

Abin da kuke bukata don farawa

Don haɓaka API kuna buƙatar:

  • Python3;
  • Flask - tsari mai sauƙi da sauƙi don amfani don ƙirƙirar aikace-aikacen yanar gizo;
  • Flask-RESTful kari ne don Flask wanda ke ba ku damar haɓaka API REST da sauri kuma tare da ƙaramin tsari.

Ana yin shigarwa tare da umarni:

pip install flask-restful

Muna ba da shawarar kwas ɗin shirye-shirye kyauta don masu farawa:
Ci gaban bot na Telegram a cikin C# - Agusta 26-28. Wani kwas mai zurfi na kyauta wanda ke ba ku damar fahimtar yadda mataimakan bots ke aiki, ƙayyadaddun ƙayyadaddun aiki tare da API ɗin Telegram da sauran nuances. Mafi kyawun mahalarta uku za su karɓi 30 rubles daga Skillbox.

Kafin ka fara

Za mu haɓaka API RESTful tare da asali Ayyukan CRUID.

Don cikakken fahimtar aikin, bari mu fahimci kalmomi biyu da aka ambata a sama.

Menene REST?

REST API (Mai wakilta Jihar Canja wurin) API ne da ke amfani da buƙatun HTTP don musayar bayanai.

REST APIs dole ne su cika wasu sharudda:

  • Gine-ginen uwar garken abokin ciniki: Abokin ciniki yana hulɗa tare da mai amfani, kuma uwar garken yana hulɗa tare da baya da ajiyar bayanai. Abokin ciniki da uwar garken suna da zaman kansu, kowane ɗayansu ana iya maye gurbinsu daban da ɗayan.
  • Mara ƙasa - babu bayanan abokin ciniki da aka adana akan sabar. Ana adana yanayin zama a gefen abokin ciniki.
  • Cacheability - Abokan ciniki na iya ɓoye martanin uwar garken don inganta aikin gabaɗaya.

Menene CRUD?

RAW ra'ayi ne na shirye-shirye wanda ke bayyana ayyuka huɗu na asali (ƙirƙira, karantawa, sabuntawa da gogewa).

A cikin REST API, nau'ikan nema da hanyoyin nema suna da alhakin ayyuka kamar aikawa, samu, saka, sharewa.

Yanzu da muka fahimci ainihin sharuɗɗan, za mu iya fara ƙirƙirar API.

Ƙaddamarwa

Bari mu ƙirƙiri wurin ajiyar bayanai game da hankali na wucin gadi. AI yana ɗaya daga cikin fasahar haɓaka mafi sauri a yau, kuma Python sanannen kayan aiki ne don aiki tare da AI.

Tare da wannan API, mai haɓaka Python zai iya samun bayanai da sauri game da AI kuma ya sami wahayi ta sabbin ci gaba. Idan mai haɓaka yana da tunani mai mahimmanci akan wannan batu, zai iya ƙara su cikin ma'ajin.

Bari mu fara da shigo da abubuwan da suka dace da kuma saita Flask:

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

A cikin wannan snippet, Flask, Api da Resource sune azuzuwan da muke buƙata.

Reqparse shine madaidaicin bincike na Flask-RESTful tambaya... Za ku kuma buƙaci tsarin bazuwar don nuna ƙima na bazuwar.

Yanzu za mu ƙirƙiri ma'ajiya na ƙididdiga game da AI.

Kowane shigarwar repo zai ƙunshi:

  • ID na dijital;
  • sunan marubucin zance;
  • zance.

Tun da wannan misali ne kawai na horo, za mu adana duk shigarwar a cikin jerin Python. A cikin ainihin aikace-aikacen, da alama za mu yi amfani da bayanan bayanai maimakon.

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

Yanzu muna buƙatar ƙirƙirar ajin albarkatun Quote wanda zai ayyana ayyukan wuraren ƙarshen API ɗin mu. A cikin aji kuna buƙatar bayyana hanyoyi huɗu: samu, aikawa, saka, sharewa.

Bari mu fara da hanyar GET

Yana ba da damar samun takamaiman ƙididdiga ta hanyar tantance ID ɗin sa, ko kuma bazuwar ƙima idan ba a ƙayyade ID ɗin ba.

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

Hanyar GET tana dawo da ƙima idan ID ɗin ya ƙunshi ƙimar da ta dace, watau. ba a ƙayyade ID lokacin kiran hanyar ba.

Idan an ayyana shi, to hanyar ta bincika a tsakanin ambato kuma ta sami wacce ke ɗauke da takamaiman ID. Idan ba a sami komai ba, ana nuna saƙon "Ba a samo Quote ba, 404".

Ka tuna: hanyar tana dawo da matsayin HTTP na 200 idan buƙatar ta yi nasara da 404 idan ba a sami rikodin ba.

Yanzu bari mu ƙirƙiri hanyar POST don ƙara sabon ƙididdiga zuwa ma'ajiyar

Zai sami ID na kowane sabon zance yayin da kake bugawa. Bugu da kari, POST zai yi amfani da reqparse don tantance sigogin da za su shiga jikin buƙatun (marubuci da faɗin rubutu).

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

A cikin lambar da ke sama, hanyar POST ta karɓi ID ɗin ƙididdiga. Sannan, ta yin amfani da reqparse, ta dawo da marubucin da ambato daga tambayar, tana adana su a cikin ƙamus na params.

Idan ƙididdiga tare da ƙayyadaddun ID ta riga ta wanzu, hanyar tana nuna saƙon da ya dace da lambar 400.

Idan har yanzu ba a ƙirƙiri ƙididdiga tare da ƙayyadadden ID ba, hanyar tana ƙirƙirar sabon rikodin tare da ƙayyadadden ID da marubuci, da sauran sigogi. Sannan yana ƙara shigarwar zuwa lissafin ai_quotes kuma ya dawo da shigarwar tare da sabon ƙima tare da lambar 201.

Yanzu mun ƙirƙiri hanyar PUT don canza ƙimar da ke akwai a cikin ma'ajiyar

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

Hanyar PUT, mai kama da misalin da ya gabata, tana ɗaukar ID da shigarwa kuma tana rarraba sigogi ta amfani da reqparse.

Idan ƙididdiga tare da ƙayyadaddun ID ya kasance, hanyar za ta sabunta shi tare da sababbin sigogi sannan kuma fitar da bayanin da aka sabunta tare da lambar 200. Idan babu wani ambato tare da ƙayyadadden ID tukuna, za a ƙirƙiri sabon rikodin tare da lambar 201.

A ƙarshe, bari mu ƙirƙiri hanyar DELETE don cire zance wanda ba ya da ban sha'awa

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

Wannan hanyar tana samun ID ɗin ƙididdiga azaman shigarwa kuma tana sabunta jerin ai_quotes ta amfani da lissafin da aka raba.

Yanzu da muka ƙirƙiri duk hanyoyin, duk abin da muke buƙatar yi shine kawai ƙara kayan aiki zuwa API, saita hanya, sannan kunna Flask.

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

Sabis ɗin API ɗin mu na REST yana shirye!

Na gaba, za mu iya ajiye lambar zuwa fayil ɗin app.py ta hanyar gudanar da shi a cikin na'ura mai kwakwalwa ta amfani da umarnin:

python3 app.py

Idan komai yana da kyau, to zamu sami wani abu kamar haka:

* Yanayin gyara kuskure: kunna
*Ana gudu 127.0.0.1:5000/ (Latsa CTRL+C don barin)
* Sake farawa da ƙididdiga
* Mai gyara kuskure yana aiki!
* PIN mai gyara kuskure: XXXXXXX

Gwajin API

Da zarar an ƙirƙiri API ɗin, yana buƙatar gwada shi.

Ana iya yin wannan ta amfani da kayan aikin curl console ko abokin ciniki Insomnia REST, ko ta buga API akan API Rapid.

Rubuta API a Python (tare da Flask da RapidAPI)

Buga API ɗin mu

RapidAPI ita ce kasuwa mafi girma a duniya tare da API sama da 10 (kuma kusan masu haɓaka miliyan 000).

RapidAPI ba wai kawai yana ba da keɓance guda ɗaya don aiki tare da APIs na ɓangare na uku ba, amma kuma yana ba ku damar buga API ɗinku cikin sauri da sauƙi.

Don yi shi, da farko kuna buƙatar buga shi akan wasu sabar akan hanyar sadarwa. A cikin yanayinmu za mu yi amfani Heroku. Yin aiki da shi bai kamata ya haifar da matsala ba, (za ku iya samun ƙarin bayani game da shi a nan).

Yadda ake Buga API ɗinku akan Heroku

1. Sanya Heroku.

Mataki na farko shine yin rajista da shigar da Interface na layin umarni na Heroku (CLI). Wannan yana aiki akan Ubuntu 16+.

sudo snap shigar heroku —classic

Sannan shiga:

heroku login

2. Ƙara fayilolin da ake bukata.

Yanzu muna buƙatar ƙara fayilolin da za a buga zuwa babban fayil a cikin aikace-aikacen mu:

  • bukatun.txt tare da jerin samfuran Python da ake buƙata;
  • Procfile, wanda ke ƙayyadaddun umarni dole ne a aiwatar don gudanar da aikace-aikacen;
  • .gitignore - don ware fayilolin da ba a buƙata akan sabar.

Fayil ɗin bukatun.txt zai ƙunshi layiyoyi masu zuwa:

  • walƙiya
  • flask-rest
  • gunicorn

Lura cewa mun ƙara gunicorn (Python WSGI HTTP Server) zuwa jerin saboda muna buƙatar gudanar da aikace-aikacen mu akan sabar.

Profile zai ƙunshi:

yanar gizo: gunicorn app:app

Abubuwan da ke cikin .gitignore:

*.pyc
__pycache__/

Yanzu da aka ƙirƙiri fayilolin, bari mu fara git repo kuma mu aikata:

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

3. Ƙirƙiri sabon aikace-aikacen Heroku.

heroku create

Muna tura babban reshen zuwa ga Heroku repo mai nisa:

git push heroku master

Yanzu zaku iya farawa ta buɗe Sabis ɗin API ta amfani da umarni:

heroku ps:scale web=1
heroku open
 

API ɗin zai kasance a nan your-random-heroku-name.herokuapp.com/ai-quotes.

Yadda ake ƙara Python API zuwa kasuwan RapidAPI

Da zarar an buga sabis ɗin API ɗin ku akan Heroku, zaku iya ƙara shi zuwa API ɗin Rapid. nan cikakkun bayanai akan wannan batu.

1. Ƙirƙiri asusun RapidAPI.

Rubuta API a Python (tare da Flask da RapidAPI)

Yi rijistar asusun kyauta - ana iya yin wannan ta amfani da Facebook, Google, GitHub.

Rubuta API a Python (tare da Flask da RapidAPI)

2. Ƙara API zuwa kwamiti mai kulawa.

Rubuta API a Python (tare da Flask da RapidAPI)

3. Na gaba, shigar da cikakken bayani game da API ɗin ku.

Rubuta API a Python (tare da Flask da RapidAPI)

4. Bayan danna "Add API" wani sabon shafi yana bayyana inda zaku iya shigar da bayanai game da API ɗin mu.

Rubuta API a Python (tare da Flask da RapidAPI)

5. Yanzu za ka iya ko dai da hannu shigar da API endpoints ko zazzagewa swagger-file amfani da OpenAPI.

Rubuta API a Python (tare da Flask da RapidAPI)

Da kyau, yanzu muna buƙatar saita ƙarshen ƙarshen API ɗinmu akan shafin Ƙarshe. A cikin yanayinmu, wuraren ƙarshe sun dace da manufar CRUD (samu, aikawa, saka, sharewa).

Rubuta API a Python (tare da Flask da RapidAPI)

Na gaba, kuna buƙatar ƙirƙirar ƙarshen ƙarshen GET AI Quote wanda ke nuna ƙimar bazuwar (idan ID ɗin tsoho ne) ko ƙididdiga don takamaiman ID.

Don ƙirƙirar wurin ƙarshe, danna maɓallin "Ƙirƙiri Ƙarshen Ƙarshen".

Rubuta API a Python (tare da Flask da RapidAPI)

Muna maimaita wannan tsari don duk sauran wuraren ƙarshen API. Shi ke nan! Taya murna, kun buga API ɗinku!

Idan komai yana da kyau, shafin API zai yi kama da wani abu kamar haka:

Rubuta API a Python (tare da Flask da RapidAPI)

ƙarshe

A cikin wannan labarin, mun koyi tsarin ƙirƙirar Sabis ɗin API na RESTful a cikin Python, tare da tsarin buga API zuwa gajimaren Heroku da ƙara shi zuwa littafin RapidAPI.

Amma sigar gwajin ta nuna kawai ainihin ƙa'idodin ci gaban API - ba a la'akari da nuances kamar tsaro, haƙuri da ƙima.

Lokacin haɓaka API na gaske, duk wannan yana buƙatar la'akari.

source: www.habr.com

Add a comment