Bu məqaləni oxuyursunuzsa, yəqin ki, API-dən (Application Programming Interface) istifadə edərkən açılan imkanlarla artıq tanışsınız.
Tətbiqinizə çoxlu ictimai API-lərdən birini əlavə etməklə siz bu proqramın funksionallığını genişləndirə və ya lazımi məlumatlarla əlavə edə bilərsiniz. Bəs cəmiyyətlə bölüşmək istədiyiniz unikal bir xüsusiyyət hazırlamısınızsa necə?
Cavab sadədir: ehtiyacınız var öz API yaradın.
Bu, ilk baxışdan çətin bir iş kimi görünsə də, əslində olduqca sadədir. Bunu Python ilə necə edəcəyinizi sizə göstərəcəyik.
Başlamaq üçün nə lazımdır
API inkişafı tələb edir:
Python3;
Kolba — veb proqramların yaradılması üçün sadə və istifadəsi asan çərçivə;
Kolba-İSTİRİL tez və minimal konfiqurasiya ilə REST API hazırlamağa imkan verən Flask üçün əlavədir.
Quraşdırma aşağıdakı əmrlə həyata keçirilir:
pip install flask-restful
Başlayanlar üçün pulsuz intensiv proqramlaşdırmanı tövsiyə edirik: C#-da Telegram botunun inkişafı - 26-28 avqust. Köməkçi botların necə işlədiyini, Telegram API ilə işləmə xüsusiyyətlərini və digər nüansları anlamağa imkan verən pulsuz intensiv. İlk üç yeri tutan iştirakçılar Skillbox-dan 30 rubl alacaqlar.
Tapşırığı tam başa düşmək üçün yuxarıda qeyd olunan iki termini anlayaq.
REST nədir?
REST API (Representational State Transfer) məlumat mübadiləsi üçün HTTP sorğularından istifadə edən API-dir.
REST API-ləri müəyyən meyarlara cavab verməlidir:
Client-server arxitekturası: müştəri istifadəçi interfeysi ilə, server isə backend və məlumat anbarı ilə qarşılıqlı əlaqədə olur. Müştəri və server müstəqildir, onlardan hər hansı birini digərindən ayrıca əvəz etmək olar.
Vətəndaşlığı olmayan - serverdə heç bir müştəri məlumatı saxlanılmır. Sessiya vəziyyəti müştəri tərəfində saxlanılır.
Cacheability - Müştərilər ümumi performansı yaxşılaşdırmaq üçün server cavablarını keşləyə bilər.
CRUD nədir?
RAW dörd əsas hərəkəti (yaratmaq, oxumaq, yeniləmək və silmək) təsvir edən proqramlaşdırma konsepsiyasıdır.
REST API-də sorğu növləri və sorğu metodları göndərmək, almaq, qoymaq, silmək kimi hərəkətlərə cavabdehdir.
İndi əsas şərtlərlə məşğul olduqdan sonra API yaratmağa başlaya bilərik.
İnkişaf
Süni intellekt haqqında sitatların anbarını yaradaq. Süni intellekt bu gün ən sürətlə inkişaf edən texnologiyalardan biridir və Python süni intellektlə işləmək üçün məşhur vasitədir.
Bu API ilə Python tərtibatçısı süni intellekt haqqında tez öyrənə və yeni nailiyyətlərdən ilham ala bilər. Tərtibatçının bu mövzuda dəyərli fikirləri varsa, o, onları depoya əlavə edə biləcək.
Tələb olunan modulları idxal etməklə və Flask-ı qurmaqla başlayaq:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
Bu parçada Flask, Api və Resource bizə lazım olan siniflərdir.
Reqparse Flask-RESTful sorğu təhlili interfeysidir... Təsadüfi təklifi göstərmək üçün sizə təsadüfi modul da lazımdır.
İndi biz süni intellektlə bağlı sitatların anbarını yaradacağıq.
Hər bir repo girişində aşağıdakılar olacaq:
rəqəmsal ID;
sitatın müəllifinin adı;
sitat.
Bu sadəcə öyrənmə nümunəsi olduğundan, biz bütün qeydləri Python siyahısında saxlayacağıq. Həqiqi bir tətbiqdə, çox güman ki, bunun əvəzinə verilənlər bazasından istifadə edərdik.
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."
}
]
İndi API son nöqtələrimizin əməliyyatlarını müəyyən edəcək Quote resurs sinfi yaratmalıyıq. Sinif daxilində dörd üsul elan edilməlidir: almaq, göndərmək, qoymaq, silmək.
GET metodundan başlayaq
Bu, onun ID-sini göstərərək xüsusi sitat əldə etməyə imkan verir və ya ID göstərilməyibsə, təsadüfi sitat əldə etməyə imkan verir.
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
GET metodu identifikator standart dəyəri ehtiva edərsə, təsadüfi qiymət qaytarır, yəni. zəng edərkən metod identifikatoru təyin edilmədi.
Əgər təyin edilibsə, o zaman metod sitatlar arasında axtarış aparır və verilmiş ID-ni ehtiva edəni tapır. Heç bir şey tapılmadıqda, “Sitat tapılmadı, 404” mesajı göstərilir.
Yadda saxlayın ki, sorğu uğurlu olarsa, metod 200 HTTP statusunu, giriş tapılmadıqda isə 404 statusunu qaytarır.
İndi depoya yeni sitat əlavə etmək üçün POST metodu yaradaq
Siz yazdığınız zaman hər yeni sitatın id-sini alacaq. Bundan əlavə, POST sorğunun mətnində (müəllif və sitat mətni) daxil olacaq parametrləri təhlil etmək üçün reqparse istifadə edəcək.
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
Yuxarıdakı kodda POST metodu kotirovka identifikatorunu qəbul etdi. Sonra, reqparse istifadə edərək, sorğudan müəllif və sitat götürdü və onları params lüğətində saxladı.
Göstərilən ID ilə sitat artıq mövcuddursa, metod müvafiq mesajı və 400 kodunu göstərir.
Göstərilən identifikatoru olan sitat hələ yaradılmayıbsa, metod göstərilən ID və müəllif, eləcə də digər parametrlərlə yeni giriş yaradır. Daha sonra ai_quotes siyahısına bir giriş əlavə edir və 201 kodu ilə birlikdə yeni sitatla bir giriş qaytarır.
İndi biz depoda mövcud sitatı dəyişdirmək üçün PUT metodu yaradırıq
Əvvəlki nümunəyə bənzər PUT metodu ID və giriş alır və reqparse istifadə edərək sitat parametrlərini təhlil edir.
Göstərilən identifikatoru olan sitat mövcuddursa, metod onu yeni parametrlərlə yeniləyəcək və sonra 200 kodu ilə yenilənmiş təklifi çıxaracaq. Əgər müəyyən edilmiş ID ilə sitat yoxdursa, 201 kodu ilə yeni qeyd yaradılacaq.
Nəhayət, artıq ruhlandırıcı olmayan sitatı silmək üçün DELETE metodu yaradaq.
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
Bu üsul sitat identifikatorunu giriş kimi götürür və paylaşılan siyahıdan istifadə edərək ai_quotes siyahısını yeniləyir.
İndi bütün üsulları yaratdıq, bizə sadəcə olaraq resursu API-yə əlavə etmək, yolu təyin etmək və Flask-ı işə salmaq kifayətdir.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
REST API Xidmətimiz hazırdır!
Sonra, kodu konsolda əmrlə işlətməklə app.py faylında saxlaya bilərik:
python3 app.py
Hər şey qaydasındadırsa, belə bir şey alacağıq:
* Sazlama rejimi: aktivdir
* Çalışır 127.0.0.1:5000/ (Çıxmaq üçün CTRL+C düymələrini basın)
* Stat ilə yenidən başladın
* Debugger aktivdir!
* Sazlayıcı PIN: XXXXXXX
API sınaqdan keçirilir
API yaradıldıqdan sonra onu sınaqdan keçirmək lazımdır.
Bu, curl konsol yardım proqramından və ya Insomnia REST müştərisindən istifadə etməklə və ya API-ni Rapid API-də dərc etməklə edilə bilər.
API-mizi dərc edirik
RapidAPI 10-dən çox API (və təxminən 000 milyon tərtibatçı) ilə dünyanın ən böyük bazarıdır.
RapidAPI yalnız üçüncü tərəf API-ləri ilə işləmək üçün vahid interfeys təqdim etmir, həm də öz API-nizi tez və asanlıqla dərc etməyə imkan verir.
Python API-nizi RapidAPI bazarına necə əlavə etmək olar
API xidməti Heroku-da dərc edildikdən sonra onu Rapid API-ə əlavə edə bilərsiniz. Budur ətraflı sənədlər bu mövzuda.
1. RapidAPI hesabı yaradın.
Pulsuz hesabı qeydiyyatdan keçiririk - bu, Facebook, Google, GitHub istifadə edərək edilə bilər.
2. İdarəetmə panelinə API əlavə edin.
3. Sonra API haqqında ümumi məlumatı daxil edin.
4. “API əlavə et” düyməsini kliklədikdən sonra API-miz haqqında məlumat daxil edə biləcəyiniz yeni səhifə görünür.
5. İndi siz ya API son nöqtələrini əl ilə daxil edə, ya da yükləyə bilərsiniz swagger faylı OpenAPI istifadə edərək.
Yaxşı, indi API-mizin son nöqtələrini Endpoints səhifəsində təyin etməlisiniz. Bizim vəziyyətimizdə son nöqtələr CRUD konsepsiyasına uyğun gəlir (alın, göndərin, qoyun, silin).
Sonra, təsadüfi sitat (əgər ID standartdırsa) və ya göstərilən ID üçün sitat göstərən GET AI Quote son nöqtəsi yaratmalısınız.
Son nöqtə yaratmaq üçün “Son nöqtə yarat” düyməsini sıxmalısınız.
Bu prosesi bütün digər API son nöqtələri üçün təkrar edirik. Hamısı budur! Təbrik edirik, API-nizi dərc etdiniz!
Hər şey yaxşı olarsa, API səhifəsi belə görünəcək:
Nəticə
Bu yazıda biz Python-da öz RESTful API Xidmətimizin yaradılması prosesi ilə yanaşı, API-nin Heroku buludunda dərc edilməsi və RapidAPI qovluğuna əlavə edilməsi prosesini keçdik.
Ancaq sınaq versiyasında yalnız API inkişafının əsas prinsipləri göstərildi - təhlükəsizlik, nasazlığa dözümlülük və miqyaslılıq kimi nüanslar nəzərə alınmadı.
Həqiqi API hazırlayarkən bütün bunlar nəzərə alınmalıdır.