
Kui loete seda artiklit, olete tÔenÀoliselt juba tuttav API (rakenduste programmise liidese) vÔimalustega.
Oma rakendusele ĂŒhe paljude avatud API-de lisamine vĂ”imaldab teil laiendada rakenduse funktsionaalsust vĂ”i tĂ€iendada seda vajalike andmetega. Aga mis siis, kui olete vĂ€lja töötanud ainulaadse funktsiooni, millega soovite kogukonda jagada?
Vastus on lihtne: tuleb .
Kuigi see vĂ”ib esialgu tunduda keeruline ĂŒlesanne, on tegelikult kĂ”ik lihtne. Me rÀÀgime, kuidas seda teha Pythoniga.
Mida vajate algamiseks
API arendamiseks on vajalik:
- Python 3;
- â lihtne ja kasutajasĂ”bralik veebirakenduste raamistik;
- â Flaski laiendus, mis vĂ”imaldab kiiresti ja minimaalse seadistamisega arendada REST API-d.
Installimine toimub kÀsuga:
pip install flask-restfulSoovitame tasuta algajate programmise intensiivkursust:
â 26â28 august. Tasuta intensiivkursus, mis aitab mĂ”ista, kuidas töötavad assistentbotid, tutvustavad Telegrami API-d ja muud nĂŒansid. Kolm parimat osalejat saavad Skillboxilt 30 000 rubla..
Enne alustamist
Kavatseme vÀlja töötada RESTful API, millel on pÔhi .
KĂŒsimuse tĂ€ielikuks mĂ”istmiseks vaatame lĂ€hemalt kaht ĂŒlaltoodud terminit.
Mis on REST?
REST API (Representational State Transfer) on API, mis kasutab andmete vahetamiseks HTTP-pÀringuid.
REST API-d peavad vastama teatud kriteeriumidele:
- Klient-server arhitektuur: klient suhtleb kasutajaliidesega ja server tagab bÀkendi ja andmete salvestamise. Klient ja server on iseseisvad, kumbki vÔib teineteisest sÔltumatult asendada.
- State-less â serveris ei salvestata kliendiandmeid. Seansi olek salvestatakse kliendi poolel.
- VahemĂ€lu â kliendid saavad serveri vastuseid vahemĂ€lus hoida, et parandada ĂŒldist jĂ”udlust.
Mis on CRUD?
CRUD on programmeerimise kontseptsioon, mis kirjeldab nelja pÔhitegevust (loo, loe, uuenda ja kustuta).
REST API-s pĂ€ringutĂŒĂŒbid ja pĂ€ringumeetodid vastutavad selliste tegevuste eest nagu post, get, put, delete.
NĂŒĂŒd, kui oleme baasterminitega tutvunud, saame edasi liikuda API loomise juurde.
Arendus
Loome kunstliku intelligentsi tsitaatide reposiit. AI on ĂŒks kiiremini arenevaid tehnoloogiaid tĂ€napĂ€eval ja Python on populaarne tööriist AI-ga töötamiseks.
Selle API abil saavad Python arendajad kiiresti teavet AI kohta ning ammutada inspiratsiooni uutest saavutustest. Kui arendajal on teemal vÀÀrtuslikke mÔtteid, saab ta lisada need repossi.
Alustame vajalike moodulite impordiga ja Flaski seadistamisega:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)Selles Flaski koodijupis on Api ja Resource klassid, mida vajame.
Reqparse on Flask-RESTful pĂ€ringute analĂŒĂŒsimise liides... Samuti on vajalik juhusliku tsitaadi kuvamiseks random moodul.
NĂŒĂŒd loome kunstliku intelligentsi tsitaatide reposi.
Iga reposiitkande puhul sisaldab:
- digitaalne ID;
- tsitaadi autori nimi;
- tsitaat.
Kuna see on lihtsalt Ôppeaine nÀide, hoiame me kÔik kirjed Pythonis loendis. TÔelises rakenduses kasutaksime tÔenÀoliselt selle asemel andmebaasi.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "JÀrgmise 10,000 idufirma Àriplaanid on kergesti ennustatavad: " +
"VÔta X ja lisa AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "TÀiusliku kunstliku intellekti areng vÔib " +
"tÀhendada inimrassi lÔppu⊠" +
"See hakkab iseseisvalt arenema ja disainima " +
"ennast ĂŒha kasvu kiirusel. " +
"Inimesed, kes on piiratud aeglase bioloogilise evolutsiooniga, " +
"ei suuda konkureerida ja jÀÀvad tahaplaanile."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Ma kujutan ette aega, mil me oleme robotitele nagu " +
"koerad inimestele, " +
"ja ma olen masinate poolt."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Kunstliku intellekti edenemise tempo " +
"(ma ei rÀÀgi kitsast AI-st) " +
"on uskumatult kiire. Kui sul ei ole otsest " +
"kokkupuudet selliste gruppidega nagu Deepmind, " +
"siis sul pole aimu, kui kiiresti â see kasvab " +
"peaaegu eksponentsiaalses tempos. " +
"TÔsise ohu nimetamise risk " +
"on viieaastases ajaraamis." +
"KĂŒmme aastat maksimaalselt."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Olen alati olnud veendunud, et ainus viis " +
"kunstliku intellekti töötamiseks " +
"on arvutuste tegemine sarnaselt inimeajule. " +
"See on eesmÀrk, mille nimel olen töötanud. Me teeme edusamme, " +
"kuigi meil on endiselt palju Ôppida, " +
"kuidas aju tegelikult töötab."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Inimesed muretsevad, et arvutid saavad " +
"liialt targaks ja vĂ”tavad maailma ĂŒle, " +
"aga tÔeline probleem on, et nad on liiga lollid " +
"ja nad on juba maailma ĂŒle vĂ”tnud."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Tundub tÔenÀoline, et kui masinategemise " +
"meetod on alustanud, ei lÀhe kaua, " +
"kui see ĂŒletab meie nĂ”rgad vĂ”imed⊠" +
"Nad suudavad omavahel suhelda " +
"oma arusaama teravdamiseks. " +
"Teatud hetkel peaksime seega " +
"oodama, et masinad vÔtavad kontrolli."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Kunstlik intellekt saavutab " +
"inimtaseme umbes 2029. aastaks. " +
"Viies seda edasi kuni, ĂŒtleme, 2045, " +
"oleme paljundanud intelligentsi, " +
"inimeste bioloogilise masina intelligentsuse " +
"meie tsivilisatsioonis miljardikordselt."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Keegi ei vÀljenda seda nÔnda, aga ma arvan, " +
"et kunstlik intellekt " +
"on peaaegu humanitaarteaduste ala. See on tÔeliselt katse " +
"mÔista inimintellekti ja inimkognitsiooni."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Teeme selle analoogia, et AI on uus elekter." +
"Elektor on muutnud tööstusi: pÔllumajandust, " +
"transporti, kommunikatsiooni, tootmist."
}
]NĂŒĂŒd peame looma ressursiklassi Quote, mis mÀÀratleb meie API lĂ”pp-punktide toimingud. Klassis tuleb deklareerida neli meetodit: get, post, put, delete.
Alustame GET-meetodiga
See vÔimaldab saada konkreetset tsitaati, osutades selle ID-le, vÔi juhuslikku tsitaati, kui ID-d ei ole antud.
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 "Tsitaati ei leitud", 404GET-meetod tagastab juhusliku tsitaadi, kui ID on vaikimisi vÀÀrtus, st kui meetodit kutsutakse, ei ole ID-d mÀÀratud.
Kui see on mÀÀratud, otsib meetod tsitaatide seast ja leiab selle, millel on antud ID. Kui midagi ei leita, kuvatakse sÔnum "Tsitaati ei leitud, 404".
Pidage meeles: meetod tagastab HTTP staatuse 200 edukate pÀringute korral ja 404, kui kirjet ei leita.
NĂŒĂŒd loome POST-meetodi, et lisada uus tsitaat reservoiri
See saab iga uue tsitaadi identifikaatori sisestamisel. Lisaks kasutab POST reqparse'i, et analĂŒĂŒsida parameetreid, mis tulevad pĂ€ringu kehas (autor ja tsitaadi tekst).
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"Tsitaat id-ga {id} juba eksisteerib", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201Ălaltoodud koodis vĂ”ttis POST-meetod vastu tsitaadi ID. SeejĂ€rel, kasutades reqparse'i, sai ta autorit ja tsitaati pĂ€ringust, salvestades need sĂ”nastikku params.
Kui tsitaat, mille ID on nÀidatud, juba eksisteerib, vÀljastab meetod vastava teate ja koodi 400.
Kui tsitaat, mille ID on nÀidatud, ei ole veel loodud, loob meetod uue kirje nÀidatud ID ja autoriga, samuti teiste parameetritega. SeejÀrel lisab ta kirje ai_quotes'i loendisse ja tagastab kirje koos uue tsitaadiga ning koodiga 201.
NĂŒĂŒd loome PUT-meetodi, et muuta olemasolevat tsitaati andmebaasis.
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, 201PUT- meetod, nagu eelnevas nĂ€ites, vĂ”tab ID ja sisendi ning analĂŒĂŒsib tsitaadi parameetrid, kasutades reqparse.
Kui antud ID-ga tsitaat eksisteerib, vÀrskendab meetod seda uute parameetritega ja seejÀrel vÀljastab vÀrskendatud tsitaadi koodiga 200. Kui antud ID-ga tsitaati veel ei ole, luuakse uus kantud koodiga 201.
LÔpuks loome DELETE- meetodi tsitaadi kustutamiseks, mis enam ei inspireeri.
def delete(self, id):
global ai_quotes
ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id]
return f"Tsitaat ID-ga {id} on kustutatud.", 200See meetod vÔtab tsitaadi ID sisendiks ja vÀrskendab ai_quotes loendit, kasutades globaalsed loendit.
NĂŒĂŒd, kui oleme loonud kĂ”ik meetodid, on meil vaja vaid lisada resource API-le, mÀÀrata tee ja kĂ€ivitada Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)Meie REST API teenus on valmis!
SeejÀrel saame koodi salvestada faili app.py, kÀivitades selle konsoolis kÀsuga:
python3 app.pyKui kÔik lÀheb hÀsti, saame midagi sellist:
* Silumise reĆŸiim: sisse
* KÀivitamine aadressil :5000/ (vajutage CTRL+C, et vÀljuda)
* TaaskÀivitamine statsiooniga
* Silur on aktiivne!
* Siluri PIN: XXXXXXX
Testime API-d
PĂ€rast API loomist tuleb seda testida.
Seda saab teha kas curl kÀsurea tööriista vÔi Insomnia REST kliendi abil, vÔi avaldades API Rapid API-s.

Avaldame oma API
RapidAPI on maailma suurim turuplats, kus on rohkem kui 10 000 API-d ja umbes 1 miljon arendajat.
RapidAPI mitte ainult ei paku ĂŒhtset liidest kolmandate osapoolte API-dega töötamiseks, vaid vĂ”imaldab ka kiiresti ja probleemideta avaldada omaenda API.
Selleks, et , peate kÔigepealt publitseerima selle mÔnel serveril vÔrgus. Meie puhul kasutame . Selle kasutamine ei peaks olema keeruline, ().
Kuidas avaldada oma API Heroku-s
1. Installige Heroku.
Esiteks peate registreeruma ja installima Heroku Command Line Interface (CLI). See töötab Ubuntu 16+ peal.
sudo snap install heroku --classic
SeejÀrel logime sisse:
heroku login
2. Lisage vajalikud failid.
NĂŒĂŒd peate lisama avaldamiseks vajalikud failid meie rakenduse kausta:
- requirements.txt, kus on loetelu vajalikest Python'i moodulitest;
- Procfile, mis nÀitab, milliseid kÀske tuleb rakenduse kÀivitamiseks tÀita;
- .gitignore â nĂ€iteks failide vĂ€ljajĂ€tmiseks, mis serveris ei ole vajalikud.
Fail requirements.txt sisaldab jÀrgmisi ridu:
- flask
- flask-restful
- gunicorn
Palun pange tÀhele: oleme lisanud gunicorni (Python WSGI HTTP Server) loetellu, kuna meie rakendus tuleb serveris kÀivitada.
Procfile sisaldab:
web: gunicorn app:app
Sisu .gitignore:
*.pyc
__pycache__/NĂŒĂŒd, kui failid on loodud, algatame git-repo ja teeme commit'i:
git init
git add
git commit -m "Esimene API commit"3. Loome uue Heroku-rakenduse.
heroku createSaadame master haru kaugserverisse Heroku:
git push heroku masterNĂŒĂŒd saame alustada, avades API teenuse kĂ€suga:
heroku ps:scale web=1
heroku open
API on saadaval aadressil .
Kuidas lisada oma Python API RapidAPI turule
PĂ€rast API-teenuse avaldamist Heroku kaudu saab selle lisada Rapid API-sse. Siin selle teema kohta.
1. Looge RapidAPI konto.
![]()
Registreerige tasuta konto â seda saab teha Facebooki, Google'i vĂ”i GitHubi kaudu.

2. Lisage API juhtpaneelile.

3. SeejÀrel sisestage oma API pÔhiteave.

4. PĂ€rast nuppu âAdd APIâ ilmub uus lehekĂŒlg, kus saab sisestada teavet meie API kohta.

5. NĂŒĂŒd saab kas kĂ€sitsi sisestada API lĂ”pp-punktid vĂ”i laadida ĂŒles OpenAPI abil.

NĂŒĂŒd tuleb mÀÀrata meie API lĂ”pp-punktid lehel Endpoints. Meie puhul vastavad lĂ”pp-punktid CRUD kontseptsioonile (get, post, put, delete).

SeejÀrel tuleb luua GET AI Quote lÔpp-punkt, mis tagastab juhusliku tsitaadi (kui ID on vaikimisi) vÔi tsitaadi antud ID jaoks.
LĂ”pp-punkti loomiseks vajutage nuppu âCreate Endpointâ.

Korrake seda protsessi kÔigi teiste API lÔpp-punktide jaoks. Sellega on kÔik! Palken, olete oma API avalikustanud!
Kui kÔik lÀks hÀsti, nÀeb API leht vÀlja umbes nii:

KokkuvÔte
Selles artiklis uurisime kohandatud RESTful API teenuse loomise protsessi Pythonis, samuti API avalikustamise protsessi Heroku's ja selle lisamist RapidAPI kataloogi.
Kuid katsevariandis nĂ€idati ainult API arendamise pĂ”hialuseid â selliseid nĂŒansse, nagu turvalisus, talitlushĂ€ired ja skaleeritavus, ei kĂ€sitletud.
Reaalse API arendamisel tuleb kÔike seda arvesse vÔtta.
Allikas: habr.com
