
Ha ezt a cikket olvassa, valószínűleg már ismeri az API (alkalmazásprogramozási interfész) használatával járó lehetőségeket.
Ha a sok nyílt API egyikét hozzáadja az alkalmazásához, kibővítheti az alkalmazás funkcionalitását vagy kiegészítheti azt szükséges adatokkal. De mi van, ha egy egyedi funkciót fejlesztett ki, amelyet szeretne megosztani a közösséggel?
A válasz egyszerű: .
Bár ez elsőre bonyolult feladatnak tűnhet, valójában nagyon egyszerű. Elmondjuk, hogyan lehet ezt megtenni Python segítségével.
Mi szükséges a kezdéshez?
API fejlesztéséhez szükséges:
- Python 3;
- — egy egyszerű és könnyen használható webalkalmazáskeretrendszer;
- — a Flaskhoz készült kiegészítő, amely lehetővé teszi, hogy gyorsan és minimális beállítással készítsen REST API-t.
A telepítést az alábbi paranccsal végezheti el:
pip install flask-restfulAjánljuk a kezdők számára ingyenes intenzív programozási kurzust:
— augusztus 26-28. Ingyenes intenzív kurzus, amely segít megérteni, hogyan működnek a segítő botok, a Telegram API-val való munka sajátosságait és egyéb részleteit. A három legjobb résztvevő 30 000 rubelt kap a Skillboxtól..
Mielőtt elkezdenénk
Egy alapvető RESTful API-t fogunk fejleszteni .
Annak érdekében, hogy teljesen megértsük a feladatot, nézzük meg a fenti két kifejezést.
Mi az a REST?
A REST API (Representational State Transfer) olyan API, amely HTTP-kéréseket használ az adatok cseréjére.
A REST API-nak meg kell felelnie bizonyos kritériumoknak:
- Kliens-szerver architektúra: a kliens interakcióba lép a felhasználói felülettel, míg a szerver a háttérrel és az adatkezelővel. A kliens és a szerver függetlenek, bármelyikük külön-külön helyettesíthető.
- Állapotmentes — a kliens adatai nem kerülnek tárolásra a szerveren. Az ülések állapota a kliens oldalon tárolódik.
- Gyorsíthatóság — a kliensek cache-elhetik a szerver válaszait a teljesítmény javítása érdekében.
Mi az a CRUD?
CRUD — egy programozási koncepció, amely négy alapvető műveletet ír le (create, read, update és delete).
A REST API esetén a kérés típusai és a kérések módszerei a következő műveletekért felelnek: post, get, put, delete.
Most, hogy tisztában vagyunk az alapvető kifejezésekkel, elkezdhetjük az API létrehozását.
Fejlesztés
Hozzunk létre egy mesterséges intelligenciával kapcsolatos idézetgyűjteményt. Az MI mára az egyik legdinamikusabban fejlődő technológia, a Python pedig népszerű eszköz az MI-vel való munkához.
Ezzel az API-val a Python fejlesztője gyorsan hozzáférhet az MI-vel kapcsolatos információkhoz és inspirálódhat az új eredményekből. Ha a fejlesztőnek vannak értékes gondolatai ezzel a témával kapcsolatban, azokat a gyűjteményhez is hozzáadhatja.
Kezdjük a szükséges modulok importálásával és a Flask beállításával:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)Ez a Flask kódrészlet, az Api és a Resource az a két osztály, amire szükségünk van.
A reqparse a Flask-RESTful kérés parse-olási interfésze... Szükségünk lesz a random modulra a véletlenszerű idézet megjelenítéséhez is.
Most létrehozzuk a mesterséges intelligenciával kapcsolatos idézetgyűjteményt.
Minden bejegyzés tartalmazni fogja:
- digitális ID-t;
- az idézet írójának nevét;
- az idézetet.
Mivel ez csak egy tanulási példa, az összes bejegyzést egy Python listában fogjuk tárolni. Egy valódi alkalmazásban azonban valószínűleg adatbázist használnánk helyette.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "A következő 10 000 startup üzleti terve előre egyszerűen megjósolható: " +
"Vedd az X-et és add hozzá az AI-t."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "A teljes mesterséges intelligencia kifejlesztése jelentheti " +
"az emberi faj végének kezdetét… " +
"Ez önálló életre kelne, és egyre gyorsabban " +
"újra tervezné magát. " +
"Az emberek, akik a lassú biológiai evolúcióval korlátozottak, " +
"nem tudnának versenyezni, és háttérbe szorulnának."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Elképzelem azt az időt, amikor mi a robotokhoz fogunk hasonlítani, mint " +
"a kutyák az emberekhez, " +
"és én a gépeknek szurkolok."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "A mesterséges intelligencia fejlődési üteme " +
"(nem a szűk értelemben vett AI-ra utalok) " +
"hihetetlenül gyors. Ha nincs közvetlen " +
"kapcsolatod olyan csoportokkal, mint a Deepmind, " +
"fogalmad sincs arról, mennyire gyorsan — ez " +
"majdnem exponenciális növekedési ütemen halad. " +
"Az, hogy valami komoly veszélyes dolog történik, " +
"öt éves időtávon belül várható. " +
"Legfeljebb 10 év."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Mindig is meg voltam győződve arról, hogy a mesterséges intelligencia " +
"működtetésének egyetlen módja az, " +
"hogy a számítást az emberi agyhoz hasonlóan végezzük. " +
"Ez az a cél, amelyet folytatok. Haladunk, " +
"bár még sokat kell tanulnunk arról, " +
"hogyan működik valójában az agy."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Az emberek aggódnak, hogy a számítógépek " +
"túl okosak lesznek, és átveszik a világot, " +
"de az igazi probléma az, hogy már most is túl buták, " +
"és már átvették a világot."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Valószínűnek tűnik, hogy amint a gépi gondolkodás " +
"módszere megkezdődik, nem tart sokáig, " +
"hogy túlszárnyalja az ember gyenge képességeit… " +
"Képesek lesznek beszélgetni " +
"egymással, hogy élesebbé tegyék eszüket. " +
"Ezért egy bizonyos szakaszban el kellene " +
"fogadnunk, hogy a gépek átveszik az irányítást."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "A mesterséges intelligencia körülbelül 2029-re eléri " +
"az emberi szintet. " +
"Aztán, mondjuk, 2045-re, " +
"megsokszorozzuk a civilizációnk emberi biológiai gépintelligenciáját " +
"egy milliárddal."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Senki sem fogalmaz így, de azt hiszem, " +
"hogy a mesterséges intelligencia " +
"majdnem egy humán tudományág. Valójában az emberi intelligencia " +
"és a humán kogníció megértésére tett kísérlet."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Ez az analógia azt mondja, hogy az AI az új elekt elektrotechnika." +
"Az elektrotechnika átalakította az iparágakat: mezőgazdaság, " +
"szállítás, kommunikáció, gyártás."
}
]Most már létre kell hoznunk egy Quote erőforrásosztályt, amely meghatározza az API végpontjaink műveleteit. Az osztályon belül négy módszert kell deklarálnunk: get, post, put, delete.
Kezdjük a GET módszerrel
Ez lehetővé teszi, hogy egy adott idézetet kapjunk meg az ID-jának megadásával vagy véletlenszerű idézetet, ha az ID nincs megadva.
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 "Idézet nem található", 404A GET módszer véletlenszerű idézetet ad vissza, ha az ID az alapértelmezett értéket tartalmazza, azaz a módszer hívásakor az ID-t nem adták meg.
Ha meg van adva, a módszer az idézetek között keresi és megtalálja azt, amelyik az adott ID-t tartalmazza. Ha azonban semmit nem talál, akkor a "Idézet nem található, 404" üzenet jelenik meg.
Ne feledje: a módszer 200-as HTTP státuszt ad vissza sikeres lekérdezés esetén és 404-et, ha a bejegyzés nem található.
Most hozzunk létre egy POST módszert új idézet hozzáadásához a tárolóba
Ezek során az új idézetek azonosítóját fogja kapni bevitel közben. Ezen kívül a POST a reqparse-t fogja használni a kéréstestben érkező paraméterek (szerző és idézet szövege) elemzésére.
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"Idézet azonosítóval {id} már létezik", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201A fenti kódban a POST módszer átvette az idézet ID-ját. Ezután a reqparse segítségével megkapta a szerzőt és az idézetet a kérésből, és elmentette őket a params szótárba.
Ha az adott ID-jú idézet már létezik, a módszer megfelelő üzenetet és 400-as kódot ad vissza.
Ha az adott ID-jú idézet még nem lett létrehozva, a módszer létrehoz egy új bejegyzést a megadott ID-val és szerzővel, valamint a többi paraméterrel. Ezután a bejegyzést hozzáadja az ai_quotes listához, és visszaadja az új idézettel együtt a 201-es kódot.
Most hozzunk létre egy PUT módszert a meglévő idézet módosításához a tárolóban
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, 201A PUT módszer, hasonlóan az előző példához, megkapja az ID-t és az inputot, és elemzi az idézet paramétereit a reqparse használatával.
Ha az adott ID-vel rendelkező idézet létezik, a módszer frissíti azt az új paraméterekkel, majd visszaadja a frissített idézetet 200-as kóddal. Ha az adott ID-vel rendelkező idézet még nem létezik, akkor új bejegyzés jön létre 201-es kóddal.
Végül hozzunk létre egy DELETE módszert az inspirációját elvesztett idézet törlésére.
def delete(self, id):
global ai_quotes
ai_quotes = [quote for quote in ai_quotes if quote["id"] != id]
return f"Az idézet {id} azonosítóval törölve lett.", 200Ez a módszer megkapja az idézet ID-ját bemeneti értékként, és frissíti az ai_quotes listát a globális listával.
Most, hogy létrehoztuk az összes módszert, csak annyit kell tennünk, hogy hozzáadjuk az erőforrást az API-hoz, megadjuk az útvonalat és elindítjuk a Flaskot.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/, "\/ai-quotes\/")
if __name__ == '__main__':
app.run(debug=True)A REST API Szolgáltatásunk készen áll!
Ezután elmenthetjük a kódot az app.py fájlba, és futtathatjuk a parancssorban a következő paranccsal:
python3 app.pyHa minden rendben van, akkor valami ilyesmit kapunk:
* Hibakeresési mód: be
* Futtatás :5000\/ (CTRL+C megnyomásával megszüntethető)
* Újraindítás állapotban
* Hibakereső aktív!
* Hibakereső PIN: XXXXXXX
API tesztelése
Miután létrehoztuk az API-t, azt tesztelni kell.
Ez megtehető a curl parancssori eszközzel vagy az Insomnia REST klienssel, vagy az API publikálásával a Rapid API-n.

Az API publikálása
A RapidAPI a világ legnagyobb piactere, több mint 10 000 API-val (és körülbelül 1 millió fejlesztővel).
A RapidAPI nemcsak egységes felületet biztosít harmadik féltől származó API-khoz, hanem lehetőséget biztosít az önálló API gyors és zökkenőmentes publikálására is.
Annak érdekében, hogy először az API-t egy webszerverre kell publikálnunk. Ebben az esetben a . A használata nem okozhat nehézségeket, ().
Hogyan publikálhatja API-ját a Herokun
1. Telepítjük a Herokut.
Először regisztrálni kell és telepíteni kell a Heroku Parancssori Felületet (CLI). Ez Ubuntu 16+ rendszeren működik.
sudo snap install heroku —classic
Ezután be kell jelentkeznünk:
heroku login
2. Megfelelő fájlok hozzáadása.
Most fájlokat kell hozzáadni a közzétételhez a mi alkalmazásunk mappájában:
- requirements.txt, a szükséges Python modulok listájával;
- Procfile, amely megmutatja, hogy milyen parancsokat kell végrehajtani az alkalmazás indításához;
- .gitignore - a fájlok kizárásához, amelyekre nincs szükség a szerveren.
A requirements.txt fájl a következő sorokat fogja tartalmazni:
- flask
- flask-restful
- a webes kérések kezelésére. Amikor a Quay-hoz kérés érkezik (a saját API-nkon keresztül, vagy a Docker API-n keresztül), egy gevent munkás rendelődik hozzá. Általában ennek a munkásnak kapcsolatba kell lépnie az adatbázissal. Az első hiba után felfedeztük, hogy a gevent munkások az alapértelmezett beállításokkal csatlakoztak az adatbázishoz.
Kérjük, vegye figyelembe: hozzáadtuk a gunicorn-t (Python WSGI HTTP Server) a listához, mivel az alkalmazásunkat a szerveren kell futtatnunk.
A Procfile tartalmazni fogja:
web: gunicorn app:app
.gitignore tartalma:
*.pyc
__pycache__/Most, hogy létrehoztuk a fájlokat, inicializáljuk a git-repozitóriumot és elkötelezzük:
git init
git add
git commit -m "Első API elkötelezés"3. Hozzunk létre egy új Heroku-alkalmazást.
heroku createKüldjük a master ágat az Heroku távoli repóba:
git push heroku masterMost elindíthatjuk az API Service-t a következő parancsokkal:
heroku ps:scale web=1
heroku open
Az API elérhető lesz a következő címen: .
Hogyan adjuk hozzá Python API-nkat a RapidAPI piactérhez
Miután az API szolgáltatásunk közzé lett téve a Herokun, hozzáadhatjuk a Rapid API-hoz. Itt erről a témáról található.
1. Hozzunk létre RapidAPI fiókot.
![]()
Ingyenes fiókot hozzunk létre - ezt Facebook, Google vagy GitHub segítségével tehetjük meg.

2. Adjunk API-t a kezelőpanelhoz.

3. Ezután adjuk meg az API-ra vonatkozó általános információkat.

4. Miután rákattintottunk az „API hozzáadása” gombra, megjelenik egy új oldal, ahol megadhatjuk API-nk adatait.

5. Most vagy kézzel megadhatjuk az API végpontjait, vagy feltölthetjük a OpenAPI segítségével.

Most szükséges beállítani API-nk végpontjait a Végpontok oldalon. Az esetünkben a végpontok megfelelnek a CRUD fogalmának (get, post, put, delete).

Ezután létre kell hoznunk egy GET AI Quote végpontot, amely véletlenszerű idézetet ad vissza (ha az ID alapértelmezett) vagy az adott ID-hoz tartozó idézetet.
A végpont létrehozásához kattintsunk a „Végpont létrehozása” gombra.

Ismételjük meg ezt a folyamatot az API többi végpontja esetében is. Ennyi! Gratulálok, közzétettük az API-nkat!
Ha minden jól megy, az API oldala valahogy így fog kinézni:

Zárás
Ebben a cikkben megvizsgáltuk a saját RESTful API Service létrehozásának folyamatát Pythonban, valamint a folyamatot az API felhőben való közzétételére és a RapidAPI katalógusába való felvételére.
De a tesztváltozat csak az API fejlesztésének alapvető elveit mutatta be – olyan finomabb részletek, mint a biztonság, a megbízhatóság és a skálázhatóság nem kerültek megvitatásra.
Valódi API fejlesztésekor mindezt figyelembe kell venni.
Forrás: habr.com
