
Dacă citiți acest articol, probabil că sunteți deja familiarizați cu posibilitățile deschise prin utilizarea API-ului (Interfața de Programare a Aplicațiilor).
Adăugând în aplicația dumneavoastră unul dintre numeroasele API-uri deschise, puteți extinde funcționalitatea acesteia sau o puteți completa cu datele necesare. Dar ce este de făcut dacă ați dezvoltat o funcție unică pe care doriți să o împărtășiți cu comunitatea?
Răspunsul este simplu: trebuie .
Deși la început poate părea o sarcină complicată, de fapt este simplu. Vă vom arăta cum să faceți acest lucru folosind Python.
Ce este necesar pentru a începe
Pentru dezvoltarea API-ului sunt necesare:
- Python 3;
- — un framework simplu și ușor de utilizat pentru crearea aplicațiilor web;
- — o extensie pentru Flask, care permite dezvoltarea rapidă a unui API REST cu o configurare minimă.
Instalarea se face cu comanda:
pip install flask-restfulVă recomandăm un curs intensiv gratuit de programare pentru începători:
— 26-28 august. Un curs intensiv gratuit care vă ajută să înțelegeți cum funcționează asistenții virtuali, particularitățile interacțiunii cu API-ul Telegram și alte nuanțe. Cei mai buni trei participanți vor primi de la Skillbox 30.000 de ruble..
Înainte de a începe
Ne propunem să dezvoltăm un API RESTful cu funcționalitate de bază .
Pentru a înțelege complet sarcina, să clarificăm două termeni menționați mai sus.
Ce este REST?
REST API (Transferul de Stare Reprezentativ) este un API care folosește cereri HTTP pentru a schimba date.
REST API-urile trebuie să respecte anumite criterii:
- Arhitectura client-server: clientul interacționează cu interfața utilizatorului, iar serverul cu backend-ul și stocarea datelor. Clientul și serverul sunt independente, oricare dintre ele poate fi înlocuit separat de cealaltă.
- Stateless — nicio dată a clientului nu este salvată pe server. Starea sesiuni este păstrată pe partea clientului.
- Cache-abilitate — clienții pot să stocheze în cache răspunsurile serverului pentru a îmbunătăți performanța generală.
Ce este CRUD?
CRUD — o conceptie de programare care descrie cele patru acțiuni fundamentale (create, read, update și delete).
În REST API-uri, tipurile de cereri și metodele de cerere corespund acțiunilor precum post, get, put, delete.
Acum că am clarificat termenii de bază, putem începe să creăm API-ul.
Dezvoltare
Să creăm un repository de citate despre inteligența artificială. IA este una dintre cele mai rapid dezvoltate tehnologii de astăzi, iar Python este un instrument popular pentru lucrul cu IA.
Cu acest API, dezvoltatorul Python va putea obține rapid informații despre IA și se va inspira din realizările noi. Dacă dezvoltatorul are idei valoroase pe această temă, va putea să le adauge în repository.
Să începem cu importul modulelor necesare și configurarea Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)În acest snippet Flask, Api și Resource sunt clasele de care avem nevoie.
Reqparse este o interfață de parsing a cererilor Flask-RESTful… De asemenea, se va folosi modulul random pentru a afișa o citație aleatorie.
Acum vom crea repository-ul de citate despre IA.
Fiecare înregistrare din repo va conține:
- un ID digital;
- numele autorului citației;
- citația.
Deoarece acesta este doar un exemplu didactic, vom salva toate înregistrările într-o listă Python. Într-o aplicație reală, pe de altă parte, cel mai probabil am folosi o bază de date.
ai_quotes = [
{
"id": 0,
"author": "Kevin Kelly",
"quote": "Planurile de afaceri ale următoarelor 10.000 de startup-uri sunt ușor de prognozat: " +
"Ia X și adaugă AI."
},
{
"id": 1,
"author": "Stephen Hawking",
"quote": "Dezvoltarea unei inteligențe artificiale complete ar putea " +
"însemna sfârșitul rasei umane… " +
"Ar lua-o pe cont propriu și s-ar reproiecta " +
"într-un ritm tot mai rapid. " +
"Oamenii, care sunt limitați de evoluția biologică lentă, " +
"nu ar putea concura și ar fi depășiți."
},
{
"id": 2,
"author": "Claude Shannon",
"quote": "Îmi imaginez o vreme când vom fi pentru roboți ceea ce " +
"sunt câinii pentru oameni, " +
"și țin cu mașinile."
},
{
"id": 3,
"author": "Elon Musk",
"quote": "Ritmul progresului în inteligența artificială " +
"(nu mă refer la AI îngust) " +
"este incredibil de rapid. Dacă nu ai o expunere directă " +
"la grupuri precum Deepmind, " +
"nu ai idee cât de repede — crește " +
"la un ritm apropiat de exponențial. " +
"Riscul ca ceva cu adevărat periculos " +
"să se întâmple se află în intervalul de cinci ani. " +
"10 ani, cel mult."
},
{
"id": 4,
"author": "Geoffrey Hinton",
"quote": "Am fost întotdeauna convins că singura modalitate " +
"de a face inteligența artificială să funcționeze " +
"este să facem calculul într-un mod similar cu creierul uman. " +
"Aceasta este ținta pe care o urmăresc. Facem progrese, " +
"deși mai avem multe de învățat despre " +
"cum funcționează efectiv creierul."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Oamenii se tem că computerele vor " +
"deveni prea inteligente și vor prelua controlul asupra lumii, " +
"dar adevărata problemă este că sunt prea prosti " +
"și deja au preluat controlul asupra lumii."
},
{
"id": 6,
"author": "Alan Turing",
"quote": "Se pare că este probabil ca odată ce metoda de gândire a mașinii " +
"a fost începută, nu va dura mult " +
"până va depăși puterile noastre slabe… " +
"Ele vor putea să converseze " +
"între ele pentru a-și ascuți inteligența. " +
"Așadar, într-o anumită etapă, ar trebui " +
"să ne așteptăm ca mașinile să preia controlul."
},
{
"id": 7,
"author": "Ray Kurzweil",
"quote": "Inteligența artificială va atinge " +
"niveluri umane în jurul anului 2029. " +
"Dacă urmărim mai departe, să zicem, 2045, " +
"vom fi înmulțit inteligența, " +
"inteligența mașinilor biologice umane " +
"a civilizației noastre de o miliardă de ori."
},
{
"id": 8,
"author": "Sebastian Thrun",
"quote": "Nimeni nu o formulează în acest fel, dar cred " +
"că inteligența artificială " +
"este aproape o disciplină umanistă. Este cu adevărat o încercare " +
"de a înțelege inteligența umană și cogniția umană."
},
{
"id": 9,
"author": "Andrew Ng",
"quote": "Facem această analogie că AI este noua electricitate." +
"Electricitatea a transformat industriile: agricultură, " +
"transport, comunicare, manufactură."
}
]Acum trebuie să creăm clasa resursă Quote, care va defini operațiile endpoint-urilor API-ului nostru. În interiorul clasei, trebuie să declarăm patru metode: get, post, put, delete.
Să începem cu metoda GET
Aceasta oferă posibilitatea de a obține o citat specific, specificând ID-ul său, sau o citat aleatorie, dacă ID-ul nu este specificat.
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 "Citatul nu a fost găsit", 404Metoda GET returnează o citat aleatorie, dacă ID-ul are valoarea implicită, adică atunci când metoda este apelată, ID-ul nu a fost specificat.
Dacă este specificat, metoda caută printre citate și găsește pe cea care conține ID-ul specificat. Dacă nu găsește nimic, se afișează mesajul "Citatul nu a fost găsit, 404".
Rețineți: metoda returnează un status HTTP 200 în caz de cerere reușită și 404, dacă înregistrarea nu a fost găsită.
Acum să creăm metoda POST pentru a adăuga o nouă citat în repository.
Aceasta va primi identificatorul fiecărei noi citate la introducere. În plus, POST va utiliza reqparse pentru a analiza parametrii care vor fi trimiși în corpul cererii (autorul și textul citatului).
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"Citatul cu id {id} există deja", 400
quote = {
"id": int(id),
"author": params["author"],
"quote": params["quote"]
}
ai_quotes.append(quote)
return quote, 201În codul de mai sus, metoda POST a preluat ID-ul citatului. Apoi, folosind reqparse, a obținut autorul și citatul din cerere, salvându-le în dicționarul params.
Dacă citatul cu ID-ul specificat există deja, metoda returnează un mesaj corespunzător și codul 400.
Dacă citatul cu ID-ul specificat nu a fost creat încă, metoda creează un nou record cu ID-ul și autorul specificate, precum și celelalte parametrii. Apoi adaugă recordul în lista ai_quotes și returnează recordul cu noul citat împreună cu codul 201.
Acum creăm metoda PUT pentru a modifica o citat existent în repository.
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, similar cu exemplul anterior, preia ID-ul și inputul și analizează parametrii citatului, folosind reqparse.
Dacă citatul cu ID-ul specificat există, metoda îl va actualiza cu noile parametrii, iar apoi va returna citatul actualizat cu codul 200. Dacă citatul cu ID-ul specificat nu există încă, va fi creată o nouă înregistrare cu codul 201.
În final, să creăm metoda DELETE pentru a elimina citatul care nu mai inspiră.
def delete(self, id):
global ai_quotes
ai_quotes = [quote for quote in ai_quotes if quote["id"] != id]
return f"Citatul cu id {id} a fost șters.", 200Această metodă primește ID-ul citatului la intrare și actualizează lista ai_quotes, folosind lista globală.
Acum, când am creat toate metodele, tot ce trebuie să facem este să adăugăm resursa la API, să stabilim calea și să lansăm Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/")
if __name__ == '__main__':
app.run(debug=True)Serviciul nostru REST API este gata!
Apoi putem salva codul într-un fișier app.py, rulându-l în consolă cu comanda:
python3 app.pyDacă totul este bine, atunci vom obține ceva de genul acesta:
* Mod de depanare: activat
* Rulăm pe :5000\/ (Apăsați CTRL+C pentru a ieși)
* Restartare cu stat
* Depanatorul este activ!
* PIN-ul depanatorului: XXXXXXX
Testăm API-ul.
După ce API-ul este creat, acesta trebuie testat.
Acest lucru poate fi realizat prin intermediul utilitarului de consolă curl sau al clientului Insomnia REST sau publicând API-ul pe Rapid API.

Publicăm API-ul nostru.
RapidAPI este cea mai mare piață din lume cu peste 10.000 de API-uri (și aproape 1 milion de dezvoltatori).
RapidAPI nu oferă doar o interfață unificată pentru a lucra cu API-uri externe, ci și posibilitatea de a publica rapid și ușor propriul API.
Pentru a , mai întâi trebuie să-l publicăm pe un server din rețea. În cazul nostru, vom folosi . Lucrul cu acesta nu ar trebui să cauzeze dificultăți, ().
Cum să publicați API-ul dvs. pe Heroku.
1. Instalăm Heroku.
Primul pas este să vă înregistrați și să instalați Heroku Command Line Interface (CLI). Acesta funcționează pe Ubuntu 16+.
sudo snap install heroku --classic
Apoi ne logăm:
heroku login
2. Adăugăm fișierele necesare.
Acum trebuie să adăugăm fișierele de publicat în dosarul aplicației noastre:
- requirements.txt cu lista modulelor Python necesare;
- Procfile, care indică ce comenzi trebuie să fie executate pentru a lansa aplicația;
- .gitignore — pentru excluziunea fișierelor care nu sunt necesare pe server.
Fișierul requirements.txt va conține următoarele linii:
- flask
- flask-restful
- gunicorn
Vă rugăm să rețineți: am adăugat gunicorn (Python WSGI HTTP Server) pe lista, deoarece trebuie să rulăm aplicația noastră pe server.
Procfile va conține:
web: gunicorn app:app
Conținutul .gitignore:
*.pyc
__pycache__/Acum că fișierele sunt create, să inițializăm un repo git și să facem un commit:
git init
git add
git commit -m "Primul commit API"3. Creăm o nouă aplicație Heroku.
heroku createTrimitem ramura master în repo-ul remote Heroku:
git push heroku masterAcum putem începe, deschizând API Service folosind comenzile:
heroku ps:scale web=1
heroku open
API-ul va fi disponibil la adresa .
Cum să adăugați API-ul vostru Python pe marketplace-ul RapidAPI
După ce API Service a fost publicat pe Heroku, puteți să-l adăugați la Rapid API. Aici pe acest subiect.
1. Creăm un cont RapidAPI.
![]()
Înscrierea unei conturi gratuite — se poate face folosind Facebook, Google, GitHub.

2. Adăugăm API-ul în panoul de control.

3. Apoi introducem informațiile generale despre API-ul nostru.

4. După ce apăsați “Add API”, apare o pagină nouă unde puteți introduce informațiile despre API-ul nostru.

5. Acum puteți fie să introduceți manual endpoint-urile API, fie să încărcați prin OpenAPI.

Apoi trebuie să definim endpoint-urile API-ului nostru pe pagina Endpoints. În cazul nostru, endpoint-urile corespund conceptului CRUD (get, post, put, delete).

Apoi trebuie să creăm un endpoint GET AI Quote, care returnează o citat aleatorie (dacă ID-ul este implicit) sau un citat pentru ID-ul specificat.
Pentru a crea un endpoint, trebuie să apăsați butonul “Create Endpoint”.

Repetați acest proces pentru toate celelalte endpoint-uri ale API-ului. Asta e tot! Felicitări, ați publicat API-ul vostru!
Dacă totul este bine, pagina API va arăta cam așa:

Concluzie
În acest articol, am explorat procesul de creare a unui serviciu RESTful API pe Python, împreună cu procesul de publicare a API-ului în cloud-ul Heroku și adăugarea acestuia în catalogul RapidAPI.
Dar în varianta de test au fost prezentate doar principiile de bază ale dezvoltării API-ului — aspecte precum securitatea, reziliența și scalabilitatea nu au fost abordate.
Când dezvoltați un API real, toate acestea trebuie luate în considerare.
Sursa: habr.com
