Kunyora API muPython (ine Flask uye RapidAPI)

Kunyora API muPython (ine Flask uye RapidAPI)

Kana iwe uri kuverenga chinyorwa ichi, iwe unogona kunge watojairana nemikana inovhura kana uchishandisa iyo API (Application Programming Interface).

Nekuwedzera imwe yeakawanda eruzhinji APIs kune yako application, unogona kuwedzera kushanda kweiyi application kana kuiwedzera neiyo data inodiwa. Asi ko kana wakagadzira chinhu chakasarudzika chaunoda kugovera nenharaunda?

Mhinduro iri nyore: unoda gadzira yako wega API.

Kunyange izvi zvingaita sebasa rakaoma pakutanga, zviri nyore chaizvo. Isu tinokuratidza maitiro ekuita izvi nePython.

Zvaunoda kuti utange

Kuvandudza API kunoda:

  • Python3;
  • Flask - yakapfava uye iri nyore kushandisa yekugadzira mawebhu application;
  • Flask-RESTful ndeyekuwedzeredzwa kweFlask iyo inokutendera iwe kugadzira REST API nekukurumidza uye nekushomeka kurongeka.

Kuiswa kunoitwa nemurairo:

pip install flask-restful

Isu tinokurudzira yemahara yakadzika hurongwa kune vanotanga:
Kuvandudzwa kweTeregiramu bot muC# β€” Nyamavhuvhu 26–28. Iyo yemahara yakadzika iyo inokutendera iwe kuti unzwisise kuti mubatsiri bots anoshanda sei, maficha ekushanda neTeregiramu API uye mamwe nuances. Vatori vatatu vepamusoro vachawana 30 rubles kubva kuSkillbox.

Usati watanga

Isu tichagadzira RESTful API ine yakakosha CRUID kushanda.

Kuti tinzwisise zvizere basa, ngatinzwisise mazwi maviri ataurwa pamusoro apa.

Chii chinonzi REST?

REST API (Representational State Transfer) iAPI inoshandisa zvikumbiro zveHTTP kuchinjana data.

REST APIs dzinofanirwa kuzadzisa mamwe maitiro:

  • Mutengi-server architecture: mutengi anopindirana nemushandisi interface, uye sevha inopindirana neyekumashure uye data chitoro. Mutengi uye sevha akazvimiririra, chero ipi zvayo inogona kutsiviwa zvakasiyana kubva kune imwe.
  • Stateless - Hapana data yemutengi inochengetwa paseva. Mamiriro emusangano anochengetwa kudivi revatengi.
  • Cacheability - Vatengi vanogona cache server mhinduro kuti vavandudze kuita kwese.

Chii chinonzi CRUD?

MHOSVA ipfungwa yekuronga inotsanangura zviito zvina zvakakosha (kugadzira, kuverenga, kugadzirisa uye kudzima).

Muiyo REST API, mhando dzekukumbira uye nzira dzekukumbira dzinoita senge post, tora, isa, bvisa.

Zvino zvatava nekutanga kubva munzira, tagadzirira kutanga kuvaka iyo API.

Development

Ngatigadzirei dura remakotesheni nezve artificial intelligence. AI ndeimwe yeanokurumidza kukura matekinoroji nhasi, uye Python chishandiso chakakurumbira chekushanda neAI.

Neiyi API, mugadziri wePython anogona kukurumidza kudzidza nezveAI uye kufemerwa nezvitsva zvaitwa. Kana mugadziri ane pfungwa dzakakosha pane iyi nyaya, anozokwanisa kuzviwedzera kune repository.

Ngatitange nekupinza mamodule anodiwa uye kumisikidza Flask:

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

Mune ino snippet, Flask, Api uye Resource ndiwo makirasi atinoda.

Reqparse is a Flask-RESTful request parsing interface... Iwe zvakare uchada iyo isina kurongeka module kuratidza isina kurongeka quote.

Iye zvino tichagadzira repository yemakotesheni nezveAI.

Imwe neimwe repo yekupinda ichave ne:

  • digital ID;
  • zita remunyori wezvakatorwa;
  • quote.

Sezvo uyu ungori muenzaniso wekudzidza, isu tichachengeta zvese zvinyorwa muPython runyorwa. Mukushandisa chaiko, isu tingangoshandisa dhatabhesi panzvimbo.

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

Ikozvino isu tinoda kugadzira Quote resource kirasi iyo inotsanangura mashandiro eiyo API endpoints. Nzira ina dzinofanirwa kuziviswa mukati mekirasi: tora, tumira, isa, bvisa.

Ngatitangei nenzira yeGET

Iyo inokutendera iwe kuti utore chaiyo quote nekutsanangura ID yayo, kana isingaite quote kana pasina ID inotsanangurwa.

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

Iyo GET nzira inodzosa yakasarudzika quote kana ID iine iyo default kukosha, i.e. pakufonera iyo nzira ID haina kuiswa.

Kana ikaiswa, ipapo nzira yacho inotsvaga pakati pemakotesheni uye inowana iyo ine ID yakapihwa. Kana pasina chawanikwa, meseji "Quote haina kuwanikwa, 404" inoratidzwa.

Rangarira, iyo nzira inodzosa chimiro cheHTTP che200 kana chikumbiro chakabudirira uye 404 kana yekupinda isina kuwanikwa.

Zvino ngatigadzirei POST nzira yekuwedzera quote nyowani kune repository

Ichawana id yega yega quote nyowani paunenge uchinyora. Uye zvakare, POST inoshandisa reqparse kusiyanisa maparamita anoenda mumutumbi wekukumbira (munyori uye quote zvinyorwa).

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

Mune kodhi iri pamusoro, iyo POST nzira yakagamuchira quote ID. Zvadaro, uchishandisa reqparse, yakawana munyori uye quote kubva pachikumbiro, ichivachengeta muduramazwi reparams.

Kana kotesheni ine ID yakatsanangurwa yatovepo, saka nzira yacho inoratidza yakakodzera meseji uye kodhi 400.

Kana iyo quote ine ID yakataurwa isati yagadzirwa, iyo nzira inogadzira yekupinda patsva neiyo ID yakatsanangurwa uye munyori, pamwe nemamwe ma parameter. Iyo inobva yawedzera yekupinda kune iyo ai_quotes rondedzero uye inodzosera yekupinda ine quote nyowani pamwe ne201 kodhi.

Iye zvino tinogadzira nzira yePUT yekushandura quote iripo mune repository

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

Iyo PUT nzira, yakafanana neyakapfuura muenzaniso, inotora ID uye yekuisa uye inodhirodha paramita yekotesheni uchishandisa reqparse.

Kana iyo quote ine ID yakataurwa iripo, iyo nzira ichaivandudza neiyo parameter nyowani uye wozoburitsa iyo yakagadziridzwa quote necode 200. Kana pasina kutaurwa neiyo ID yakatsanangurwa parizvino, rekodhi nyowani ine kodhi 201 ichagadzirwa.

Chekupedzisira, ngatigadzirei DELETE nzira yekubvisa quote iyo isingachafemedzi.

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

Iyi nzira inotora iyo quote ID seyekuisa uye inogadziridza rondedzero yeai_quotes uchishandisa yakagovaniswa rondedzero.

Zvino zvatagadzira nzira dzese, chatinoda kuita kungowedzera sosi kuAPI, kuseta nzira, uye kumhanya Flask.

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

Yedu REST API Sevhisi yakagadzirira!

Tevere, tinogona kuchengetedza iyo kodhi kuapp.py faira nekuimhanyisa mukoni nemurairo:

python3 app.py

Kana zvinhu zvose zvakanaka, tichawana chimwe chinhu chakadai:

* Debug mode: on
* Kuenderera mberi 127.0.0.1:5000/ (Dzvanya CTRL+C kuti usiye)
* Kutangazve ne stat
* Debugger inoshanda!
* Debugger PIN: XXXXXXX

Kuedza iyo API

Mushure mekunge API yagadzirwa, inoda kuongororwa.

Izvi zvinogona kuitwa uchishandisa iyo curl console utility kana Insomnia REST mutengi, kana nekutsikisa API paRapid API.

Kunyora API muPython (ine Flask uye RapidAPI)

Kuburitsa yedu API

RapidAPI ndiyo misika mikuru pasi rese ine anopfuura zviuru gumi maAPI (uye vangangoita miriyoni vanogadzira).

RapidAPI haingope chete interface yekushanda neyechitatu-bato APIs, asi zvakare inobvumidza iwe kukurumidza uye nyore kuburitsa yako wega API.

To kuita izvi, iwe unofanirwa kutanga washambadzira kune imwe server pane network. Muchiitiko chedu, isu tichashandisa Heroku. Kushanda naye hakufanire kukonzera matambudziko, (unogona kuziva zvakawanda nezvazvo pano).

Maitiro ekuburitsa API yako paHeroku

1. Isa Heroku.

Nhanho yekutanga kunyoresa uye kuisa iyo Heroku Command Line Interface (CLI). Izvi zvinoshanda paUbuntu 16+.

sudo snap isa heroku --classic

Zvadaro tinopinda:

heroku login

2. Wedzera mafaira anodiwa.

Zvino isu tinoda kuwedzera mafaera ekushambadza kune folda mune yedu application:

  • zvinodiwa.txt nerondedzero yePython modules inodiwa;
  • Procfile, iyo inotsanangura kuti ndeipi mirairo inofanirwa kuitiswa kuti ishandise application;
  • .gitignore - kusabatanidza mafaira asingadikanwi paserver.

The needs.txt file ichange iine mitsetse inotevera:

  • chinu
  • flask-restful
  • gunicorn

Ndokumbira utarise kuti isu tawedzera gunicorn (Python WSGI HTTP Server) kune iyo rondedzero nekuti isu tinofanirwa kumhanyisa application yedu paserver.

Procfile ichave ne:

dandemutande: gunicorn app:app

Content of .gitignore:

*.pyc
__pycache__/

Zvino kuti mafaera agadzirwa, ngatitangei git repo uye tiite:

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

3. Gadzira itsva Heroku app.

heroku create

Kusundira tenzi bazi kune iri kure Heroku repo:

git push heroku master

Iye zvino unogona kutanga nekuvhura iyo API Service nemirairo:

heroku ps:scale web=1
heroku open
 

Iyo API ichave iripo pa your-random-heroku-name.herokuapp.com/ai-quotes.

Maitiro ekuwedzera yako Python API kumusika weRapidAPI

Kana iyo API sevhisi yaburitswa paHeroku, unogona kuiwedzera kuRapid API. Here zvakadzama zvinyorwa pamusoro penyaya iyi.

1. Gadzira RapidAPI account.

Kunyora API muPython (ine Flask uye RapidAPI)

Isu tinonyoresa account yemahara - izvi zvinogona kuitwa uchishandisa Facebook, Google, GitHub.

Kunyora API muPython (ine Flask uye RapidAPI)

2. Wedzera API kune control panel.

Kunyora API muPython (ine Flask uye RapidAPI)

3. Tevere, isa ruzivo rwakakwana nezve API yako.

Kunyora API muPython (ine Flask uye RapidAPI)

4. Mushure mekudzvanya "Wedzera API" peji nyowani inooneka kwaunogona kuisa ruzivo nezve API yedu.

Kunyora API muPython (ine Flask uye RapidAPI)

5. Iye zvino unogona kana nemaoko kupinda API endpoints, kana download swagger file uchishandisa OpenAPI.

Kunyora API muPython (ine Flask uye RapidAPI)

Zvakanaka, ikozvino iwe unofanirwa kuseta magumo eAPI yedu pane Endpoints peji. Muchiitiko chedu, magumo anoenderana nepfungwa yeCRUD (tora, tumira, isa, bvisa).

Kunyora API muPython (ine Flask uye RapidAPI)

Tevere, iwe unofanirwa kugadzira iyo GET AI Quote endpoint inoratidza isina kurongeka quote (kana iyo ID iri default) kana quote kune yakataurwa ID.

Kuti ugadzire pekupedzisira, unofanirwa kudzvanya bhatani re "Gadzira Endpoint".

Kunyora API muPython (ine Flask uye RapidAPI)

Isu tinodzokorora maitiro aya kune mamwe ese maAPI endpoints. Ndizvo zvose! Makorokoto, wakaburitsa API yako!

Kana zvese zvikafamba zvakanaka, iyo API peji inotaridzika seizvi:

Kunyora API muPython (ine Flask uye RapidAPI)

mhedziso

Muchikamu chino, takafamba kuburikidza nekugadzirisa kwekugadzira yedu RESTful API Service muPython, pamwe chete nehurongwa hwekudhindisa API kune gore reHeroku uye kuwedzera kune RapidAPI dhairekitori.

Asi muyedzo vhezheni, chete misimboti yekutanga yekuvandudza API yakaratidzwa - senge chengetedzo, kushivirira kukanganisa uye scalability hazvina kutariswa.

Paunenge uchigadzira API chaiyo, zvese izvi zvinofanirwa kuverengerwa.

Source: www.habr.com

Voeg