Python-da API yazmaq (Flask və RapidAPI ilə)

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Başlamazdan əvvəl

Biz əsas ilə RESTful API inkişaf etdirəcəyik CRUID funksionallığı.

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

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, 201

Ə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.

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Üzrə et bunu, əvvəlcə onu şəbəkədəki bəzi serverdə dərc etməlisiniz. Bizim vəziyyətimizdə istifadə edəcəyik Heroku. Onunla işləmək heç bir çətinlik yaratmamalıdır, (bu haqda daha ətraflı buradan öyrənə bilərsiniz).

API-nizi Heroku-da necə dərc etmək olar

1. Heroku quraşdırın.

İlk addım Heroku Komanda Xətti İnterfeysini (CLI) qeydiyyatdan keçirmək və quraşdırmaqdır. Bu Ubuntu 16+ üzərində işləyir.

sudo snap install heroku --classic

Sonra daxil oluruq:

heroku giriş

2. Lazımi faylları əlavə edin.

İndi tətbiqimizdəki qovluğa dərc etmək üçün faylları əlavə etməliyik:

  • tələb olunan Python modullarının siyahısı ilə tələblər.txt;
  • Tətbiqi işə salmaq üçün hansı əmrlərin yerinə yetirilməli olduğunu müəyyən edən Procfile;
  • .gitignore - serverdə lazım olmayan faylları istisna etmək üçün.

requirements.txt faylında aşağıdakı sətirlər olacaq:

  • şüşə
  • kolba rahat
  • gunicorn

Nəzərə alın ki, tətbiqimizi serverdə işə salmalı olduğumuz üçün siyahıya gunicorn (Python WSGI HTTP Server) əlavə etdik.

Profil faylında olacaq:

veb: gunicorn proqramı: proqram

.gitignore məzmunu:

*.pyc
__pycache__/

İndi fayllar yaradılmışdır, gəlin git repo-nu işə salaq və yerinə yetirək:

git init
git add
git commit -m "First API commit"

3. Yeni Heroku proqramı yaradın.

heroku create

Usta filialı uzaq Heroku repo-ya itələmək:

git push heroku master

İndi API Xidmətini əmrlərlə açaraq başlaya bilərsiniz:

heroku ps:scale web=1
heroku open
 

API burada mövcud olacaq your-random-heroku-name.herokuapp.com/ai-quotes.

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.

Python-da API yazmaq (Flask və RapidAPI ilə)

Pulsuz hesabı qeydiyyatdan keçiririk - bu, Facebook, Google, GitHub istifadə edərək edilə bilər.

Python-da API yazmaq (Flask və RapidAPI ilə)

2. İdarəetmə panelinə API əlavə edin.

Python-da API yazmaq (Flask və RapidAPI ilə)

3. Sonra API haqqında ümumi məlumatı daxil edin.

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Python-da API yazmaq (Flask və RapidAPI ilə)

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).

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Python-da API yazmaq (Flask və RapidAPI ilə)

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:

Python-da API yazmaq (Flask və RapidAPI ilə)

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.

Mənbə: www.habr.com

Добавить комментарий