
Če berete ta članek, ste verjetno že seznanjeni z možnostmi, ki jih ponuja uporaba API (vmesnik za programsko uporabo).
Z dodajanjem enega od številnih odprtih API-jev v vašo aplikacijo lahko razširite funkcionalnost te aplikacije ali pa jo dopolnite s potrebnimi podatki. Ampak kaj, če ste razvili edinstveno funkcijo, s katero želite deliti skupnost?
Odgovor je preprost: treba je .
Čeprav se to sprva zdi težka naloga, v resnici ni nič zapletenega. Povedali vam bomo, kako to narediti s pomočjo Pythona.
Kaj potrebujete za začetek dela
Za razvoj API-ja potrebujete:
- Python 3;
- — preprost in enostaven za uporabo okvir za ustvarjanje spletnih aplikacij;
- — razširitev za Flask, ki omogoča hitro in z minimalno nastavitev razvijanje REST API.
Namestitev se izvede s ukazom:
pip install flask-restfulPriporočamo brezplačni intenzivni tečaj programiranja za začetnike:
— 26–28 avgusta. Brezplačni intenzivni tečaj, ki omogoča razumevanje, kako delujejo pomočniki, posebnosti dela z API-jem Telegram in druge podrobnosti. Trojica najboljših udeležencev bo od Skillbox prejela 30.000 rubljev.
Preden začnemo
Nameravamo razviti RESTful API z osnovno .
Da bi popolnoma razumeli nalogo, se pogovorimo o dveh izrazih, omenjenih zgoraj.
Kaj je REST?
REST API (Predstavitvena stanja prenosa) — to je API, ki uporablja HTTP-poizvedbe za izmenjavo podatkov.
REST API morajo ustrezati določenim kriterijem:
- Arhitektura odjemalec-strežnik: odjemalec komunicira z uporabniškim vmesnikom, strežnik pa z zadnjo stranjo in podatkovnim skladiščem. Odjemalec in strežnik sta neodvisna, vsak od njiju se lahko zamenja neodvisno od drugega.
- Brez stanja — nobeni podatki odjemalca se ne shranjujejo na strežniku. Stanje seje se hrani na strani odjemalca.
- Predpomnjenje — odjemalci lahko predpomnijo odgovore strežnika za izboljšanje celotne zmogljivosti.
Kaj je CRUD?
CRUD — koncept programiranja, ki opisuje štiri osnovne akcije (ustvari, preberi, posodobi in izbriši).
V REST API je vrste poizvedb in metode poizvedbe odgovorne za takšne akcije, kot so post, get, put, delete.
Zdaj, ko smo razjasnili osnovne izraze, lahko začnemo s kreiranjem API-ja.
Razvoj
Ustvarimo repozitorij citatov o umetni inteligenci. Umetna inteligenca je ena izmed najbolj hitro rastočih tehnologij danes, Python pa je priljubljeno orodje za delo z umetno inteligenco.
S tem API-jem bo razvijalec v Pythonu lahko hitro pridobivatel informacije o umetni inteligenci in se navduševal nad novimi dosežki. Če ima razvijalec dragocene misli na to temo, jih lahko doda v repozitorij.
Začnimo z uvozom potrebnih modulov in nastavitvijo Flaska:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)V tem kosu kode Flask, Api in Resource so razredi, ki jih potrebujemo.
Reqparse je vmesnik za obdelavo zahtevkov v Flask-RESTful… Potrebovali bomo tudi modul random za prikaz naključnega citata.
Zdaj bomo ustvarili repozitorij citatov o umetni inteligenci.
Vsak vnos v repozitorij bo vseboval:
- digitalni ID;
- ime avtorja citata;
- citat.
Ker je to le primer za učenje, bomo shranili vse vnose v Python seznamu. V realni aplikaciji pa bi verjetno uporabili bazo podatkov.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "Poslovni načrti naslednjih 10.000 zagonskih podjetij so enostavni za napovedovanje: " +
"Vzemite X in dodajte AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "Razvoj popolne umetne inteligence bi lahko " +
"znanil konec človeške rase… " +
"Sama bi se razvila naprej in " +
"se preoblikovala v vedno večji meri. " +
"Ljudi, ki jih omejuje počasna biološka evolucija, " +
"ne bi mogli konkurirati in bi bili nadomeščeni."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Vizualiziram si čas, ko bomo roboti podobni temu, kar " +
"so psi za ljudi, " +
"in navijam za stroje."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Tempo napredka v umetni inteligenci " +
"(ne mislim na ozko AI) " +
"je neverjetno hitro. Razen če imate neposredno " +
"izkušnjo z skupinami, kot je Deepmind, " +
"nimate pojma, kako hitro — raste " +
"s hitrostjo, ki je blizu eksponentni. " +
"Tveganje, da se zgodi kaj resno nevarnega, " +
"je v petletnem okviru. " +
"10 let največ."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Vedno sem bil prepričan, da je edini način, " +
"da umetna inteligenca deluje, " +
"ta, da se izračuni izvajajo na način, podoben človeškemu možganu. " +
"To je cilj, ki ga zasledujem. Napredujemo, " +
"čeprav se moramo še veliko naučiti o " +
"tem, kako dejansko deluje možgani."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Ljudje se bojijo, da bodo računalniki " +
"postali preveč pametni in prevzeli svet, " +
"vendar je pravi problem, da so preveč neumni " +
"in so že prevzeli svet."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Zdi se verjetno, da ko se začne metodo " +
"mišljenja strojev, ne bo dolgo, " +
"da nas ne bodo prehiteli… " +
"Bili bi sposobni pogovarjati " +
"med seboj, da izostrijo svoje spodbude. " +
"Na neki točki se moramo zato " +
"pričakovati, da bodo stroji prevzeli nadzor."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Umetna inteligenca bo dosegla " +
"človeške ravni okoli leta 2029. " +
"Če to nadaljujemo naprej do, recimo, leta 2045, " +
"bomo pomnožili inteligenco, " +
"človeške biološke mehanizme inteligence " +
"našega človeštva milijardo krat."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Nihče ne pove te stvari na ta način, vendar menim, " +
"da je umetna inteligenca " +
"skoraj disciplina humanistike. Gre za poskus " +
"razumevanja človeške inteligence in človeškega spoznavanja."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Delamo to analogijo, da je AI nova elektrika." +
"Elektrika je spremenila industrije: kmetijstvo, " +
"transport, komunikacijo, proizvodnjo."
}
]Sedaj je treba ustvariti razred Quote, ki bo določal operacije končnih točk našega API-ja. Znotraj razreda moramo deklarirati štiri metode: get, post, put, delete.
Začnimo z metodo GET
Ta omogoča pridobitev določene citate tako, da navedemo njen ID, ali pa naključno citato, če ID ni naveden.
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", 404Metoda GET vrne naključno citato, če ID vsebuje privzeto vrednost, tj. ko je metoda poklicana ID ni bil določen.
Če je ID naveden, metoda išče med citati in najde tistega, ki vsebuje navedeni ID. Če pa nič ni najdeno, se izpiše sporočilo "Quote not found, 404".
Ne pozabite: metoda vrne HTTP status 200 v primeru uspešnega zahtevka in 404, če zapis ni bil najden.
Zdaj pa ustvarimo POST metodo za dodajanje nove citate v repozitorij.
Sprejela bo identifikator vsake nove citate ob vnosu. Poleg tega bo POST uporabljal reqparse za razčlenitev parametrів, ki bodo šli v telo zahtevka (avtor in tekst citate).
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, 201V zgornji kodi je POST metoda sprejela ID citate. Nato je z uporabo reqparse pridobila avtorja in citat iz zahtevka, in ju shranila v slovar params.
Če citata z navedenim ID-jem že obstaja, metoda izpiše ustrezno sporočilo in kodo 400.
Če citata z navedenim ID-jem še ni bilo ustvarjeno, metoda ustvari nov zapis z navedenim ID-jem in avtorjem ter drugimi parametri. Nato doda zapis v seznam ai_quotes in vrne zapis z novo citato skupaj s kodo 201.
Zdaj ustvarimo PUT metodo za spreminjanje obstoječe citate v repozitoriju.
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, 201Metoda PUT, podobno kot v prejšnjem primeru, vzame ID in input ter analizira parametre citata s pomočjo reqparse.
Če citat z določenim ID obstaja, bo metoda posodobila njen novimi parametri in nato izpisala posodobljen citat s kodo 200. Če citat z določenim ID še ne obstaja, bo ustvarila nov vnos s kodo 201.
Nazadnje, ustvarimo metodo DELETE za brisanje citata, ki nas že ne navdihuje.
def delete(self, id):
global ai_quotes
ai_quotes = [qoute for qoute in ai_quotes if qoute["id"] != id]
return f"Citat z id {id} je izbrisan.", 200Ta metoda prejme ID citata ob vhodu in posodobi seznam ai_quotes z uporabo skupnega seznama.
Zdaj, ko smo ustvarili vse metode, moramo le dodati vir v API, določiti pot in zagnati Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\", "\/ai-quotes\/")
if __name__ == '__main__':
app.run(debug=True)Naša REST API storitev je pripravljena!
Nato lahko shranimo kodo v datoteko app.py ter jo zaženemo v konzoli s pomočjo ukaza:
python3 app.pyČe je vse v redu, dobimo nekaj takega:
* Način za odpravljanje napak: vklopljen
* Poteka na :5000\/ (Pritisnite CTRL+C za izhod)
* Ponovno se zažene z stat
* Razvijalec je aktiven!
* Pin za razvijalce: XXXXXXX
Testiramo API
Ko je API ustvarjen, ga je treba testirati.
To lahko storimo s pomočjo konzolne aplikacije curl ali odjemalca Insomnia REST ali pa objavimo API na Rapid API.

Objavimo naš API
RapidAPI je največja svetovna tržnica z več kot 10.000 API-ji (in približno 1 milijonom razvijalcev).
RapidAPI ne le da ponuja enoten vmesnik za delo s tretjimi API-ji, temveč omogoča hitro in enostavno objavo vašega lastnega API-ja.
Za to, da , najprej ga je treba objaviti na katerem koli strežniku v omrežju. V našem primeru bomo uporabili . Delo z njim ne bi smelo povzročati težav, ().
Kako objaviti svoj API na Heroku
1. Namestimo Heroku.
Najprej se je treba registrirati in namestiti vmesnik Heroku Command Line (CLI). Deluje na Ubuntu 16+.
sudo snap install heroku —classic
Nato se prijavimo:
heroku login
2. Dodamo potrebne datoteke.
Zdaj je treba dodati datoteke za objavo v mapo v naši aplikaciji:
- requirements.txt s seznamom potrebnih modulov v Pythonu;
- Procfile, ki določa, katere ukaze je treba izvesti za zagon aplikacije;
- .gitignore — za izključitev datotek, ki niso potrebne na strežniku.
Datoteka requirements.txt bo vsebovala naslednje vrstice:
- flask
- flask-restful
- gunicorn
Prosím, mějte na paměti, že jsme přidali gunicorn (Python WSGI HTTP Server) do seznamu, protože je potřeba spustit naši aplikaci na serveru.
Procfile bude obsahovat:
web: gunicorn app:app
Obsah .gitignore:
*.pyc
__pycache__/Nyní, když byly soubory vytvořeny, inicializujme git repo a proveďme commit:
git init
git add
git commit -m "První API commit"3. Vytvořte novou aplikaci Heroku.
heroku createOdesíláme master branch do vzdáleného repozitáře Heroku:
git push heroku masterNyní můžete začít otevřením API služby pomocí příkazů:
heroku ps:scale web=1
heroku open
API bude dostupné na adrese .
Jak přidat váš Python API do tržiště RapidAPI
Jakmile je API služba publikována na Heroku, můžete ji přidat k Rapid API. Zde je k tomuto tématu.
1. Vytvořte účet na RapidAPI.
![]()
Zaregistrujte si zdarma účet — můžete to provést prostřednictvím Facebooku, Google nebo GitHubu.

2. Přidejte API do řídícího panelu.

3. Poté zadejte základní informace o svém API.

4. Po stisknutí tlačítka „Add API“ se objeví nová stránka, kde můžete zadat informace o vašem API.

5. Nyní můžete buď ručně zadat API endpointy, nebo nahrát pomocí OpenAPI.

Teď je potřeba nastavit endpointy našeho API na stránce Endpoints. V našem případě odpovídají endpointy konceptu CRUD (get, post, put, delete).

Dále je potřeba vytvořit endpoint GET AI Quote, který vrátí náhodný citát (pokud je ID výchozí) nebo citát pro zadané ID.
Pro vytvoření endpointu je potřeba stisknout tlačítko „Create Endpoint“.

Tento proces opakujeme pro všechny ostatní endpointy API. A je to! Gratuluji, publikovali jste své API!
Pokud je vše v pořádku, stránka API bude vypadat takto:

Zaključek
V tomto článku jsme prozkoumali proces vytváření vlastního RESTful API Service na Pythonu, spolu s procesem publikace API v cloudu Heroku a jeho přidáním do katalogu RapidAPI.
Ale v testovací variantě byly ukázány pouze základní principy vývoje API — takové nuance, jako je bezpečnost, odolnost a škálovatelnost, nebyly zvažovány.
Při vývoji skutečného API je třeba to vše vzít v úvahu.
Izvor: habr.com
