Ak čítate tento článok, pravdepodobne ste už oboznámení s možnosťami, ktoré prináša používanie API (Application Programming Interface).
Pridaním jedného z mnohých otvorených API do vašej aplikácie môžete rozšíriť funkcionalitu aplikácie alebo ju obohatiť o potrebné dáta. Čo keby ste však vyvinuli jedinečnú funkciu, o ktorú sa chcete podeliť s komunitou?
Odpoveď je jednoduchá: potrebujete vytvorte si vlastné API.
Aj keď sa to na prvý pohľad môže zdať ako náročná úloha, v skutočnosti je to jednoduché. Ukážeme vám, ako to urobiť pomocou Pythonu.
Čo potrebujete, aby ste mohli začať
Na vývoj API potrebujete:
Python 3;
Banka — jednoduchý a ľahko použiteľný rámec na vytváranie webových aplikácií;
Flask-RESTful je rozšírenie pre Flask, ktoré vám umožňuje rýchlo a s minimálnou konfiguráciou vyvinúť REST API.
Inštalácia sa vykonáva príkazom:
pip install flask-restful
Pre začiatočníkov odporúčame bezplatný intenzívny kurz programovania: Vývoj telegramových botov v C# — 26. – 28. augusta. Bezplatný intenzívny kurz, ktorý vám umožní pochopiť, ako fungujú pomocné roboty, špecifiká práce s Telegram API a ďalšie nuansy. Traja najlepší účastníci dostanú od Skillboxu 30 000 rubľov.
Predtým ako začneš
Chystáme sa vyvinúť RESTful API so základnými Funkcia CRUID.
Aby sme plne pochopili úlohu, pochopme dva vyššie uvedené pojmy.
Čo je REST?
REST API (Representational State Transfer) je rozhranie API, ktoré využíva HTTP požiadavky na výmenu údajov.
Rozhrania REST API musia spĺňať určité kritériá:
Architektúra klient-server: Klient interaguje s užívateľským rozhraním a server interaguje s backendom a dátovým úložiskom. Klient a server sú nezávislé, každý z nich môže byť nahradený oddelene od druhého.
Bezstavové – na serveri nie sú uložené žiadne údaje klienta. Stav relácie je uložený na strane klienta.
Možnosť ukladania do vyrovnávacej pamäte – Klienti môžu ukladať odpovede servera do vyrovnávacej pamäte, aby zlepšili celkový výkon.
čo je CRUD?
Crud je koncepcia programovania, ktorá popisuje štyri základné akcie (vytvoriť, prečítať, aktualizovať a odstrániť).
V REST API sú typy požiadaviek a metódy požiadaviek zodpovedné za akcie, ako je odoslanie, získanie, vloženie, odstránenie.
Teraz, keď rozumieme základným pojmom, môžeme začať vytvárať API.
dizajn
Poďme si vytvoriť úložisko citátov o umelej inteligencii. AI je dnes jednou z najrýchlejšie rastúcich technológií a Python je populárny nástroj na prácu s AI.
Pomocou tohto API môže vývojár Pythonu rýchlo získať informácie o AI a inšpirovať sa novými pokrokmi. Ak má vývojár cenné myšlienky na túto tému, bude ich môcť pridať do úložiska.
Začnime importovaním potrebných modulov a nastavením Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
V tomto úryvku sú triedy Flask, Api a Resource, ktoré potrebujeme.
Reqparse je rozhranie na analýzu dotazov Flask-RESTful... Budete tiež potrebovať náhodný modul na zobrazenie náhodnej cenovej ponuky.
Teraz vytvoríme úložisko citátov o AI.
Každý repo záznam bude obsahovať:
digitálny identifikátor;
meno autora citátu;
citovať.
Keďže toto je len príklad školenia, všetky položky uložíme do zoznamu Python. V skutočnej aplikácii by sme namiesto toho pravdepodobne použili databázu.
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."
}
]
Teraz musíme vytvoriť triedu prostriedkov Quote, ktorá bude definovať operácie našich koncových bodov API. Vo vnútri triedy musíte deklarovať štyri metódy: získať, uverejniť, vložiť, odstrániť.
Začnime metódou GET
Umožňuje získať konkrétnu cenovú ponuku zadaním jej ID alebo náhodnú cenovú ponuku, ak ID nie je špecifikované.
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
Metóda GET vráti náhodnú cenovú ponuku, ak ID obsahuje predvolenú hodnotu, t.j. pri volaní metódy nebolo zadané žiadne ID.
Ak je zadaný, metóda hľadá medzi citáciami a nájde tú, ktorá obsahuje zadané ID. Ak sa nič nenájde, zobrazí sa správa „Cenová ponuka sa nenašla, 404“.
Pamätajte: metóda vráti stav HTTP 200, ak bola požiadavka úspešná a 404, ak sa záznam nenašiel.
Teraz vytvorte metódu POST na pridanie novej cenovej ponuky do úložiska
Pri písaní získa ID každej novej cenovej ponuky. Okrem toho POST použije reqparse na analýzu parametrov, ktoré budú vložené do tela požiadavky (autor a text citácie).
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
Vo vyššie uvedenom kóde metóda POST akceptovala ID ponuky. Potom pomocou reqparse získal autora a citáciu z dotazu a uložil ich do slovníka params.
Ak cenová ponuka so zadaným ID už existuje, metóda zobrazí zodpovedajúcu správu a kód 400.
Ak citácia so zadaným ID ešte nebola vytvorená, metóda vytvorí nový záznam so zadaným ID a autorom, ako aj ďalšími parametrami. Potom pridá záznam do zoznamu ai_quotes a vráti záznam s novým citátom spolu s kódom 201.
Teraz vytvoríme metódu PUT na zmenu existujúcej cenovej ponuky v úložisku
Metóda PUT, podobne ako predchádzajúci príklad, berie ID a vstup a analyzuje parametre ponuky pomocou reqparse.
Ak citácia so zadaným ID existuje, metóda ju aktualizuje o nové parametre a následne vypíše aktualizovanú citáciu s kódom 200. Ak ešte žiadna citácia so zadaným ID neexistuje, vytvorí sa nový záznam s kódom 201.
Nakoniec vytvorte metódu DELETE na odstránenie citátu, ktorý už nie je inšpiratívny
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
Táto metóda získa ID ponuky ako vstup a aktualizuje zoznam ai_quotes pomocou zdieľaného zoznamu.
Teraz, keď sme vytvorili všetky metódy, všetko, čo musíme urobiť, je jednoducho pridať zdroj do API, nastaviť cestu a spustiť Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
Naša služba REST API je pripravená!
Ďalej môžeme kód uložiť do súboru app.py spustením v konzole pomocou príkazu:
python3 app.py
Ak je všetko v poriadku, dostaneme niečo takéto:
* Režim ladenia: zapnutý
*Beží ďalej 127.0.0.1:5000/ (Pre ukončenie stlačte CTRL+C)
* Reštartovanie so stat
* Debugger je aktívny!
* PIN ladiaceho nástroja: XXXXXXX
Testovanie API
Po vytvorení API je potrebné ho otestovať.
Dá sa to urobiť pomocou pomôcky curl konzoly alebo klienta Insomnia REST alebo zverejnením API na Rapid API.
Zverejňujeme naše API
RapidAPI je najväčší svetový trh s viac ako 10 000 API (a približne 1 miliónom vývojárov).
RapidAPI poskytuje nielen jediné rozhranie na prácu s rozhraniami API tretích strán, ale tiež vám dáva možnosť rýchlo a jednoducho publikovať svoje vlastné API.
Na urob to, najprv ho musíte zverejniť na nejakom serveri v sieti. V našom prípade použijeme Herok. Práca s ním by nemala spôsobovať žiadne ťažkosti, (tu sa o ňom dozviete viac).
Ako publikovať svoje API na Heroku
1. Nainštalujte Heroku.
Prvým krokom je registrácia a inštalácia rozhrania Heroku Command Line Interface (CLI). Toto funguje na Ubuntu 16+.
sudo snap nainštalovať heroku —klasické
Potom sa prihláste:
prihlásenie heroku
2. Pridajte potrebné súbory.
Teraz musíme pridať súbory na zverejnenie do priečinka v našej aplikácii:
requirements.txt so zoznamom požadovaných modulov Pythonu;
Procfile, ktorý určuje, aké príkazy sa musia vykonať na spustenie aplikácie;
.gitignore - na vylúčenie súborov, ktoré nie sú potrebné na serveri.
Súbor requirements.txt bude obsahovať nasledujúce riadky:
banka
banka-pokojný
gunicorn
Upozorňujeme, že sme do zoznamu pridali gunicorn (Python WSGI HTTP Server), pretože potrebujeme spustiť našu aplikáciu na serveri.
Profil bude obsahovať:
web: gunicorn app:app
Obsah .gitignore:
*.pyc
__pycache__/
Teraz, keď sú súbory vytvorené, poďme inicializovať git repo a odovzdať:
git init
git add
git commit -m "First API commit"
3. Vytvorte novú aplikáciu Heroku.
heroku create
Hlavnú vetvu presunieme do vzdialeného repozitára Heroku:
git push heroku master
Teraz môžete začať otvorením služby API pomocou príkazov:
Po zverejnení vašej služby API na Heroku ju môžete pridať do Rapid API. Tu podrobnú dokumentáciu na túto tému.
1. Vytvorte si účet RapidAPI.
Zaregistrujte si bezplatný účet - môžete to urobiť pomocou Facebooku, Google, GitHub.
2. Pridajte API do ovládacieho panela.
3. Ďalej zadajte všeobecné informácie o vašom rozhraní API.
4. Po kliknutí na „Pridať API“ sa zobrazí nová stránka, kde môžete zadať informácie o našom API.
5. Teraz môžete buď manuálne zadať koncové body API alebo stiahnuť swagger-file pomocou OpenAPI.
Teraz musíme nastaviť koncové body nášho API na stránke Koncové body. V našom prípade koncové body zodpovedajú konceptu CRUD (get, post, put, delete).
Ďalej musíte vytvoriť koncový bod GET AI Quote, ktorý zobrazí náhodnú cenovú ponuku (ak je ID predvolené) alebo cenovú ponuku pre zadané ID.
Ak chcete vytvoriť koncový bod, kliknite na tlačidlo „Vytvoriť koncový bod“.
Tento proces opakujeme pre všetky ostatné koncové body API. To je všetko! Gratulujeme, zverejnili ste svoje API!
Ak je všetko v poriadku, stránka API bude vyzerať asi takto:
Záver
V tomto článku sme sa naučili proces vytvárania vašej vlastnej RESTful API Service v Pythone spolu s procesom publikovania API do cloudu Heroku a jeho pridávania do adresára RapidAPI.
Ale testovacia verzia ukázala len základné princípy vývoja API – nuansy ako bezpečnosť, odolnosť voči chybám a škálovateľnosť neboli brané do úvahy.
Pri vývoji skutočného API je potrebné toto všetko vziať do úvahy.