Að skrifa API í Python (með Flask og RapidAPI)

Að skrifa API í Python (með Flask og RapidAPI)

Ef þú ert að lesa þessa grein ertu líklega þegar kunnugur þeim möguleikum sem opnast þegar þú notar API (Application Programming Interface).

Með því að bæta einu af mörgum opinberum API við forritið þitt geturðu aukið virkni þessa forrits eða bætt við það með nauðsynlegum gögnum. En hvað ef þú hefur þróað einstaka eiginleika sem þú vilt deila með samfélaginu?

Svarið er einfalt: þú þarft búa til þitt eigið API.

Þó að þetta kann að virðast eins og ógnvekjandi verkefni í fyrstu, þá er það í raun frekar einfalt. Við munum sýna þér hvernig á að gera þetta með Python.

Það sem þú þarft til að byrja

API þróun krefst:

  • Python3;
  • Flaskan — einfaldur og auðveldur í notkun rammi til að búa til vefforrit;
  • Flösku-Hvíld er viðbót fyrir Flask sem gerir þér kleift að þróa REST API fljótt og með lágmarks stillingum.

Uppsetning er framkvæmd með skipuninni:

pip install flask-restful

Við mælum með ókeypis og öflugri forritun fyrir byrjendur:
Telegram bot þróun í C# — 26.–28. ágúst. Ókeypis ákafur sem gerir þér kleift að skilja hvernig hjálparbottar virka, eiginleika þess að vinna með Telegram API og önnur blæbrigði. Þrír efstu þátttakendurnir fá 30 rúblur frá Skillbox.

Áður en þú byrjar

Við ætlum að þróa RESTful API með grunni CRUID virkni.

Til að skilja verkefnið að fullu skulum við skilja hugtökin tvö sem nefnd eru hér að ofan.

Hvað er REST?

REST API (Representational State Transfer) er API sem notar HTTP beiðnir til að skiptast á gögnum.

REST API verða að uppfylla ákveðin skilyrði:

  • Biðlara-miðlara arkitektúr: viðskiptavinurinn hefur samskipti við notendaviðmótið og þjónninn hefur samskipti við bakendann og gagnageymsluna. Biðlarinn og þjónninn eru óháðir, hægt er að skipta um hvern þeirra sérstaklega frá hinum.
  • Stateless - Engin viðskiptavinagögn eru geymd á þjóninum. Setuástandið er geymt á biðlarahlið.
  • Skyndiminni - Viðskiptavinir geta vistað svör netþjóna til að bæta heildarafköst.

Hvað er CRUD?

SKRÁ er forritunarhugtak sem lýsir fjórum grunnaðgerðum (búa til, lesa, uppfæra og eyða).

Í REST API eru beiðnigerðir og beiðnir aðferðir ábyrgar fyrir aðgerðum eins og pósta, fá, setja, eyða.

Nú þegar við höfum tekist á við grunnskilmálana getum við byrjað að búa til API.

Þróun

Við skulum búa til geymslu með tilvitnunum um gervigreind. Gervigreind er ein af þeim tækni sem vex hvað hraðast í dag og Python er vinsælt tæki til að vinna með gervigreind.

Með þessu API getur Python verktaki fljótt lært um gervigreind og fengið innblástur af nýjum afrekum. Ef verktaki hefur verðmætar hugsanir um þetta efni mun hann geta bætt þeim við geymsluna.

Byrjum á því að flytja inn nauðsynlegar einingar og setja upp Flask:

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

Í þessu broti eru Flask, Api og Resource flokkarnir sem við þurfum.

Reqparse er flösku-RESTful beiðnaþáttunarviðmót... Þú þarft líka handahófskennda eininguna til að birta tilviljunarkennd tilvitnun.

Nú munum við búa til geymslu með tilvitnunum um gervigreind.

Hver endursölufærsla mun innihalda:

  • stafræn skilríki;
  • nafn höfundar tilvitnunar;
  • tilvitnun.

Þar sem þetta er bara lærdómsdæmi munum við geyma allar færslur í Python lista. Í alvöru forriti myndum við líklegast nota gagnagrunn í staðinn.

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

Nú þurfum við að búa til Quote auðlindaflokk sem mun skilgreina virkni API endapunkta okkar. Tilgreina þarf fjórar aðferðir inni í bekknum: fá, senda, setja, eyða.

Byrjum á GET aðferðinni

Það gerir þér kleift að fá ákveðna tilvitnun með því að tilgreina auðkenni þess, eða tilviljun ef ekkert auðkenni er tilgreint.

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 aðferðin skilar tilviljunarkenndri tilvitnun ef auðkennið inniheldur sjálfgefið gildi, þ.e. Auðkenni var ekki stillt þegar hringt var í aðferðina.

Ef það er stillt, þá leitar aðferðin meðal gæsalappa og finnur þá sem inniheldur uppgefið auðkenni. Ef ekkert finnst birtast skilaboðin „Tilvitnun fannst ekki, 404“.

Mundu að aðferðin skilar HTTP stöðunni 200 ef beiðnin tókst og 404 ef færslan fannst ekki.

Nú skulum við búa til POST aðferð til að bæta nýrri tilvitnun við geymsluna

Það mun fá auðkenni hverrar nýrrar tilvitnunar þegar þú skrifar. Að auki mun POST nota reqparse til að flokka færibreyturnar sem fara í meginmál beiðninnar (höfundur og tilvitnunartexti).

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

Í kóðanum hér að ofan samþykkti POST aðferðin tilboðsauðkenni. Síðan, með því að nota reqparse, sótti það höfundinn og tilvitnun í beiðnina og geymdi þær í params orðabókinni.

Ef tilboð með tilgreindu auðkenni er þegar til, þá sýnir aðferðin viðeigandi skilaboð og kóða 400.

Ef tilboð með tilgreindu auðkenni hefur ekki enn verið búið til, býr aðferðin til nýja færslu með tilgreindu auðkenni og höfundi, auk annarra færibreyta. Það bætir síðan færslu við ai_quotes listann og skilar færslu með nýrri tilvitnun ásamt 201 kóða.

Nú búum við til PUT aðferð til að breyta núverandi tilboði í geymslunni

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 aðferðin, svipað og í fyrra dæmi, tekur auðkenni og inntak og greinir tilvitnunarfæribreyturnar með því að nota reqparse.

Ef tilboð með tilgreindu auðkenni er til mun aðferðin uppfæra hana með nýju breytunum og gefa síðan út uppfærða tilboðið með kóðanum 200. Ef það er engin tilboð með tilgreindu auðkenninu enn þá verður ný skrá með kóðanum 201 búin til.

Að lokum skulum við búa til DELETE aðferð til að fjarlægja tilvitnun sem er ekki lengur hvetjandi.

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

Þessi aðferð tekur tilvitnunarauðkennið sem inntak og uppfærir listann yfir ai_quotes með því að nota sameiginlega listann.

Nú þegar við höfum búið til allar aðferðir, það eina sem við þurfum að gera er einfaldlega að bæta auðlindinni við API, stilla slóðina og keyra Flask.

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

REST API þjónustan okkar er tilbúin!

Næst getum við vistað kóðann í app.py skránni með því að keyra hann í stjórnborðinu með skipuninni:

python3 app.py

Ef allt er í lagi, þá fáum við eitthvað á þessa leið:

* Villuleitarstilling: kveikt
* Hlaupið áfram 127.0.0.1:5000/ (Ýttu á CTRL+C til að hætta)
* Endurræst með stat
* Villuleitarforrit er virkt!
* Kembiforrit PIN: XXXXXXX

Að prófa API

Eftir að API er búið til þarf að prófa það.

Þetta er hægt að gera með því að nota curl console tólið eða Insomnia REST biðlarann, eða með því að birta API á Rapid API.

Að skrifa API í Python (með Flask og RapidAPI)

Að gefa út API okkar

RapidAPI er stærsti markaður í heimi með yfir 10 API (og um 000 milljón forritara).

RapidAPI býður ekki aðeins upp á eitt viðmót til að vinna með API frá þriðja aðila, heldur gerir þér einnig kleift að birta þitt eigið API á fljótlegan og auðveldan hátt.

Til til að gera þetta, þú þarft fyrst að birta það á einhvern netþjón á netinu. Í okkar tilviki munum við nota Heroku. Að vinna með honum ætti ekki að valda neinum erfiðleikum, (þú getur fundið meira um það hér).

Hvernig á að birta API á Heroku

1. Settu upp Heroku.

Fyrsta skrefið er að skrá og setja upp Heroku Command Line Interface (CLI). Þetta virkar á Ubuntu 16+.

sudo snap install heroku --classic

Þá skráum við okkur inn:

heroku innskráningu

2. Bættu við nauðsynlegum skrám.

Nú þurfum við að bæta við skrám til að birta í möppu í forritinu okkar:

  • requirements.txt með lista yfir nauðsynlegar Python einingar;
  • Procfile, sem tilgreinir hvaða skipanir þarf að framkvæma til að keyra forritið;
  • .gitignore - til að útiloka skrár sem ekki er þörf á á þjóninum.

requirements.txt skráin mun innihalda eftirfarandi línur:

  • flösku
  • flösku-hvíld
  • byssuhorn

Vinsamlegast athugaðu að við höfum bætt gunicorn (Python WSGI HTTP Server) við listann vegna þess að við þurfum að keyra forritið okkar á þjóninum.

Prófíll mun innihalda:

vefur: Gunicorn app:app

Innihald .gitignore:

*.pyc
__pycache__/

Nú þegar skrárnar eru búnar til skulum við frumstilla git endurhverfan og skuldbinda:

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

3. Búðu til nýtt Heroku app.

heroku create

Að ýta aðalútibúinu að fjarlægu Heroku versluninni:

git push heroku master

Nú geturðu byrjað á því að opna API þjónustuna með skipunum:

heroku ps:scale web=1
heroku open
 

API verður aðgengilegt kl your-random-heroku-name.herokuapp.com/ai-quotes.

Hvernig á að bæta Python API við RapidAPI markaðinn

Þegar API þjónustan hefur verið birt á Heroku geturðu bætt henni við Rapid API. Hérna nákvæm skjöl um þetta efni.

1. Búðu til RapidAPI reikning.

Að skrifa API í Python (með Flask og RapidAPI)

Við skráum ókeypis reikning - þetta er hægt að gera með Facebook, Google, GitHub.

Að skrifa API í Python (með Flask og RapidAPI)

2. Bættu API við stjórnborðið.

Að skrifa API í Python (með Flask og RapidAPI)

3. Næst skaltu slá inn almennar upplýsingar um API.

Að skrifa API í Python (með Flask og RapidAPI)

4. Eftir að hafa smellt á „Bæta við API“ birtist ný síða þar sem þú getur slegið inn upplýsingar um API okkar.

Að skrifa API í Python (með Flask og RapidAPI)

5. Nú geturðu annað hvort slegið inn API-endapunktana handvirkt eða hlaðið niður swagger skrá með OpenAPI.

Að skrifa API í Python (með Flask og RapidAPI)

Jæja, nú þarftu að stilla endapunkta API okkar á Endpoints síðunni. Í okkar tilviki samsvara endapunktarnir hugmyndinni um CRUD (fá, pósta, setja, eyða).

Að skrifa API í Python (með Flask og RapidAPI)

Næst þarftu að búa til GET AI Quote endapunkt sem sýnir handahófskenndan tilvitnun (ef auðkennið er sjálfgefið) eða tilboð fyrir tilgreint auðkenni.

Til að búa til endapunkt þarftu að smella á „Búa til endapunkt“ hnappinn.

Að skrifa API í Python (með Flask og RapidAPI)

Við endurtökum þetta ferli fyrir alla aðra API endapunkta. Það er allt og sumt! Til hamingju, þú hefur birt API!

Ef allt gengur upp mun API síðan líta eitthvað svona út:

Að skrifa API í Python (með Flask og RapidAPI)

Ályktun

Í þessari grein gengum við í gegnum ferlið við að búa til okkar eigin RESTful API þjónustu í Python, ásamt ferlinu við að birta API í Heroku skýinu og bæta því við RapidAPI skrána.

En í prófunarútgáfunni voru aðeins grunnreglur API-þróunar sýndar - blæbrigði eins og öryggi, bilanaþol og sveigjanleiki voru ekki teknir til greina.

Þegar þú þróar raunverulegt API verður að taka tillit til alls þessa.

Heimild: www.habr.com

Bæta við athugasemd