
Ja jūs lasāt šo rakstu, visticamāk, jau esat pazīstams ar iespējām, kas paveras, izmantojot API (lietojumprogrammu programmēšanas saskarni).
Pievienojot savai lietotnei vienu no daudziem atklātajiem API, jūs varat paplašināt tās funkcionalitāti vai papildināt to ar nepieciešamajiem datiem. Bet ko darīt, ja jūs esat izstrādājis unikālu funkciju, ko vēlaties dalīt ar kopienu?
Atbilde ir vienkārša: jums .
Neskatoties uz to, ka tas sākumā šķiet sarežģīts uzdevums, patiesībā viss ir vienkārši. Mēs pastāstīsim, kā to izdarīt, izmantojot Python.
Kas nepieciešams, lai uzsāktu darbu
API izstrādei nepieciešams:
- Python 3;
- — vienkārša un viegli lietojama ietvarstruktūra tīmekļa lietotņu izstrādei;
- — paplašinājums Flask, kas ļauj ātri izstrādāt REST API ar minimālu konfigurāciju.
Uzstādīšanu veic ar komandu:
pip install flask-restfulIesakām bezmaksas intensīvu programmēšanas kursu iesācējiem:
— no 26. līdz 28. augustam. Bezmaksas intensīvs, kas ļauj saprast, kā darbojas palīgu bot, par API Telegram īpašībām un citiem niansēm. Trīs labākie dalībnieki saņems no Skillbox 30 000 rubļu..
Pirms sākat
mēs plānojam izstrādāt RESTful API ar pamata .
Lai pilnībā izprastu uzdevumu, aplūkosim divus iepriekš minētos terminus.
Kas ir REST?
REST API (Representational State Transfer) — tas ir API, kas izmanto HTTP pieprasījumus datu apmaiņai.
REST API ir jāatbilst noteiktiem kritērijiem:
- Klienta-servera arhitektūra: klients mijiedarbojas ar lietotāja interfeisu, bet serveris — ar aizmuguri un datu glabātuvi. Klients un serveris ir neatkarīgi, jebkuru no tiem var aizstāt atsevišķi.
- Bezstatiskums — nekādi klienta dati netiek saglabāti serverī. Sesijas stāvoklis tiek glabāts klienta pusē.
- Kešojamība — klienti var kešot servera atbildes, lai uzlabotu vispārējo veiktspēju.
Kas ir CRUD?
CRUD — programmēšanas koncepcija, kas apraksta četrus pamata darbības (izveidošana, lasīšana, atjaunināšana un dzēšana).
REST API pieprasījumu tipi un pieprasījumu metodes atbild par tādām darbībām kā post, get, put, delete.
Tagad, kad mēs esam izpratuši pamata terminus, varam ķerties pie API izstrādes.
Izstrāde
Izveidosim mākslīgā intelekta citātu repozitoriju. MĀKSLĪGAIS INTELEKTS ir viena no visaktīvāk attīstītajām tehnoloģijām mūsdienās, un Python ir populārs rīks darbam ar MĀKSLĪGO INTELEKTU.
Ar šo API Python izstrādātājs varēs ātri iegūt informāciju par MĀKSLĪGO INTELEKTU un iedvesmoties no jauniem sasniegumiem. Ja izstrādātājam ir vērtīgas domas šajā tēmā, viņš varēs tās pievienot repozitorijam.
Sāksim ar nepieciešamo moduļu importēšanu un Flask iestatīšanu:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)Šajā kodeksā Flask, Api un Resource ir klases, kas mums nepieciešamas.
Reqparse ir Flask-RESTful pieprasījumu parsēšanas saskarne... Tāpat nepieciešams random modulis, lai parādītu nejaušu citātu.
Tagad izveidosim MĀKSLĪGAJĀ INTELEKTĀ citātu repozitoriju.
Katram repozitorija ierakstam būs:
- digitālais ID;
- citāta autora vārds;
- citāts.
Tā kā tas ir tikai piemērs mācībām, mēs saglabāsim visus ierakstus Python sarakstā. Reālā lietojumprogrammā mēs, visticamāk, izmantosim datubāzi.
ai_quotes = [
{
"id": 0,
"author": "Kevins Kelli",
"quote": "Nākamo 10,000 jaunuzņēmumu biznesa plāni būs viegli prognozējami: " +
"Paņem X un pievieno AI."
},
{
"id": 1,
"author": "Stīvens Hoking",
"quote": "Pilnīgas mākslīgās inteliģences attīstība varētu " +
"norādīt uz cilvēces galu… " +
"Tā uzsāks attīstību patstāvīgi un pārveidos " +
"sevi ar arvien pieaugošu ātrumu. " +
"Cilvēki, kuri ir ierobežoti ar lēnu bioloģisko evolūciju, " +
"nebūtu spējīgi konkurēt, un tos aizvietos."
},
{
"id": 2,
"author": "Klods Šenons",
"quote": "Es redzu laiku, kad mēs robotiem būsim tādi paši kā " +
"suņi cilvēkiem, " +
"un es atbalstu mašīnas."
},
{
"id": 3,
"author": "Ilons Masks",
"quote": "Progresu mākslīgajā inteliģencē " +
"(es nerunāju par šauru AI) " +
"ir neticami ātrs. Ja vien jums nav tiešas " +
"saskares ar grupām kā Deepmind, " +
"jums nav ne jausmas, cik ātri – tas aug " +
"tuvu eksponenciālam. " +
"Riska līmenis, ka notiks kaut kas tiešām bīstams, " +
"ir piecu gadu laikā." +
"Desmit gadu maksimums."
},
{
"id": 4,
"author": "Džefrijs Hinton",
"quote": "Es vienmēr esmu bijis pārliecināts, ka vienīgais veids, " +
"kā panākt, lai mākslīgā inteliģence darbotos, " +
"ir veikt aprēķinus līdzīgi kā cilvēka smadzenēm. " +
"Tas ir mērķis, ko esmu centies sasniegt. Mēs virzāmies uz priekšu, " +
"lai gan mums joprojām ir daudz jāiemācās par " +
"to, kā tieši strādā smadzenes."
},
{
"id": 5,
"author": "Pedro Domingos",
"quote": "Cilvēki bažījas, ka datori kļūs " +
"pārāk gudri un pārņems pasauli, " +
"bet īstā problēma ir tā, ka viņi ir pārāk stulbi " +
"un jau ir pārņēmuši pasauli."
},
{
"id": 6,
"author": "Alans Tjūrings",
"quote": "Izskatās, ka ir iespējams, ka, kad mašīnu domāšanas " +
"metode ir sākusies, tas neaizņems ilgu laiku, " +
"lai pārspētu mūsu vājās spējas… " +
"Viņi spēs sazināties " +
"savā starpā, lai uzlabotu savas prāta spējas. " +
"Tādējādi, kādā posmā mums, visticamāk, " +
"būs jāgaida, ka mašīnas pārņems kontroli."
},
{
"id": 7,
"author": "Rejs Kurcveils",
"quote": "Mākslīgā inteliģence sasniegs " +
"cilvēku līmeni ap 2029. gadu. " +
"Ja skatāmies tālāk uz, teiksim, 2045. gadu, " +
"mēs būsim reizinājuši intelektu, " +
"cilvēku bioloģiskā mašīnu intelekta " +
"mūsu civilizācijā par miljardu."
},
{
"id": 8,
"author": "Sebastians Trūns",
"quote": "Neviens to nepauž šādi, bet es domāju, " +
"ka mākslīgā inteliģence " +
"ir gandrīz humanitārā disciplīna. Tas patiesībā ir mēģinājums " +
"izprast cilvēku intelektu un cilvēku kognīciju."
},
{
"id": 9,
"author": "Endrjū Ng",
"quote": "Mēs izsaka šo analoģiju, ka AI ir jaunā elektrība." +
"Elektrība pārveidoja nozares: lauksaimniecību, " +
"transportu, komunikāciju, ražošanu."
}
]Tagad jāizveido resursu klase Quote, kas definēs mūsu API galapunktu operācijas. Klasē jādeklarē četri metodes: get, post, put, delete.
Sāksim ar metodi GET
Tā ļauj iegūt noteiktu citātu, norādot tās ID, vai arī nejaušu citātu, ja ID nav norādīts.
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", 404GET metode atgriež nejaušu citātu, ja ID satur noklusējuma vērtību, t.i., izsaucot metodi, ID nav norādīts.
Ja tas ir norādīts, tad metode meklē citātu un atrod to, kurai ir norādītais ID. Ja nekas netiek atrasts, tiek izvadīts ziņojums “Quote not found, 404”.
Atcerieties: metode atgriež HTTP statusu 200 gadījumā, ja pieprasījums ir veiksmīgs, un 404, ja ieraksts netiek atrasts.
Tagad izveidosim POST metodi, lai pievienotu jaunu citātu repozitorijam
Tā saņems katras jaunas citāta identifikatoru, kad tas tiks ievadīts. Turklāt POST izmanto reqparse, lai analizētu parametrus, kas tiks nosūtīti pieprasījuma ķermenī (autors un citāta teksts).
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, 201Iepriekš minētajā kodā POST metode pieņēmusi citāta ID. Tad, izmantojot reqparse, tā ieguva autoru un citātu no pieprasījuma, saglabājot tos vārdnīcā params.
Ja citāts ar norādīto ID jau eksistē, metode izvada atbilstošu ziņojumu un kodu 400.
Ja citāts ar norādīto ID vēl nav izveidots, metode izveido jaunu ierakstu ar norādīto ID un autoru, kā arī citiem parametriem. Pēc tam tā pievieno ierakstu sarakstam ai_quotes un atgriež ierakstu ar jauno citātu kopā ar kodu 201.
Tagad izveidosim PUT metodi, lai mainītu esošu citātu repozitorijā
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 metode, līdzīgi kā iepriekšējā piemērā, ņem ID un input un analizē citāta parametrus, izmantojot reqparse.
Ja citāts ar norādīto ID pastāv, metode to atjauninās ar jaunajiem parametriem un pēc tam izvadīs atjaunināto citātu ar 200 kodu. Ja citāta ar norādīto ID vēl nav, tiks izveidota jauna ieraksts ar 201 kodu.
Visbeidzot, izveidosim DELETE metodi, lai dzēstu citātu, kas vairs neiedvesmo.
def delete(self, id):
global ai_quotes
ai_quotes = [quote for quote in ai_quotes if quote["id"] != id]
return f"Citāts ar id {id} ir dzēsts.", 200Šī metode saņem citāta ID ievadīšanas laikā un atjaunina ai_quotes sarakstu, izmantojot globālo sarakstu.
Tagad, kad esam izveidojuši visus metodus, viss, kas mums jāizdara, ir vienkārši pievienot resursu API, noteikt ceļu un palaist Flask.
api.add_resource(Quote, "\/ai-quotes", "\/ai-quotes\/", "\/ai-quotes\/\")
if __name__ == '__main__':
app.run(debug=True)Mūsu REST API pakalpojums ir gatavs!
Nākamais solis ir saglabāt kodu failā app.py, palaižot to konsolē ar komandu:
python3 app.pyJa viss ir kārtībā, tad mēs saņemsim kaut ko līdzīgu šim:
* Debug režīms: ieslēgts
* Darbojas uz :5000\/ (Nospiediet CTRL+C, lai izietu)
* Pārstartēšana ar stat
* Debuggers ir aktīvs!
* Debuggera PIN: XXXXXXX
Testējam API
Pēc tam, kad API ir izveidots, to jātestē.
To var izdarīt, izmantojot komandrindas rīku curl vai Insomnia REST klientu, vai arī publicējot API Rapid API.

Publicējam mūsu API
RapidAPI ir lielākais pasaules tirgus ar vairāk nekā 10 000 API (un apmēram 1 miljons izstrādātāju).
RapidAPI ne tikai nodrošina vienotu saskarni darbam ar trešo pušu API, bet arī piedāvā ātri un bez problēmām publicēt savu API.
Lai , vispirms jāpublicē to kādā serverī tīklā. Mūsu gadījumā izmantosim . Darbība ar to nevajadzētu izraisīt nekādas grūtības, ().
Kā publicēt savu API uz Heroku
1. Instalējam Heroku.
Pirmais solis ir reģistrēties un instalēt Heroku Command Line Interface (CLI). Tas darbojas uz Ubuntu 16+.
sudo snap install heroku —classic
Tad piesakāmies:
heroku login
2. Pievienojam nepieciešamos failus.
Tagad jāpieņem faili publikācijai mūsu lietojumā:
- requirements.txt ar nepieciešamo Python moduļu sarakstu;
- Procfile, kurā norādīts, kuras komandas jāizpilda, lai palaistu lietojumprogrammu;
- .gitignore — lai izslēgtu failus, kas nav nepieciešami serverī.
Fajls requirements.txt saturēs šādas rindas:
- flask
- flask-restful
- gunicorn
Lūdzu, ņemiet vērā: mēs esam pievienojuši gunicorn (Python WSGI HTTP Server) sarakstam, jo ir nepieciešams palaist mūsu lietotni serverī.
Procfile saturēs:
web: gunicorn app:app
Satur .gitignore:
*.pyc
__pycache__/Tagad, kad faili ir izveidoti, sāksim git-repozitoriju un veiksim apstiprinājumu:
git init
git add
git commit -m "Pirmais API apstiprinājums"3. Izveidojam jaunu Heroku lietotni.
heroku createNosūtām master branch uz Heroku attālo repozitoriju:
git push heroku masterTagad varam sākt, atverot API pakalpojumu ar komandām:
heroku ps:scale web=1
heroku open
API būs pieejams adresē .
Kā pievienot savu Python API RapidAPI tirgum
Pēc tam, kad API pakalpojums ir publicēts Heroku, to var pievienot Rapid API. Šeit par šo tēmu.
1. Izveidojiet RapidAPI kontu.
![]()
Reģistrējieties bezmaksas kontam — to var izdarīt, izmantojot Facebook, Google, GitHub.

2. Pievienojiet API vadības panelī.

3. Tālāk ievadiet vispārējo informāciju par savu API.

4. Pēc pogas “Add API” nospiešanas parādās jauna lapa, kurā varat ievadīt informāciju par mūsu API.

5. Tagad varat vai nu manuāli ievadīt API beigu punktus, vai augšupielādēt izmantojot OpenAPI.

Tagad ir jānosaka mūsu API beigu punkti lapā Endpoints. Mūsu gadījumā beigu punkti atbilst CRUD koncepcijai (get, post, put, delete).

Pēc tam jāizveido GET AI Quote beigu punkts, kas izvada nejaušu citātu (ja ID ir noklusēts) vai citātu norādītajam ID.
Lai izveidotu beigu punktu, nospiediet pogu “Create Endpoint”.

Atkārtojiet šo procesu visiem citiem API beigu punktiem. Tas viss! Apsveicu, jūs esat publicējuši savu API!
Ja viss ir labi, API lapa izskatīsies apmēram šādi:

Secinājums
Šajā rakstā mēs aplūkojām procesu, kā izveidot savu RESTful API pakalpojumu Python, kopā ar API publicēšanas procesu mākonī Heroku un tā pievienošanu RapidAPI katalogam.
Tomēr testēšanas variantā tika parādīti tikai pamata principi API izstrādē — tādi nianses kā drošība, noturība pret darbības traucējumiem un mērogojamība netika apskatīti.
Izstrādājot reālu API, tas viss ir jāņem vērā.
Avots: habr.com
