Nulis API ing Python (karo Flask lan RapidAPI)

Nulis API ing Python (karo Flask lan RapidAPI)

Yen sampeyan maca artikel iki, sampeyan mbokmenawa wis menowo karo kemungkinan sing mbukak nalika nggunakake API (Application Programming Interface).

Kanthi nambahake salah siji saka akeh API umum menyang aplikasi sampeyan, sampeyan bisa nambah fungsi aplikasi iki utawa nambah data sing dibutuhake. Nanging kepiye yen sampeyan wis ngembangake fitur unik sing pengin dituduhake karo komunitas?

Jawaban iki prasaja: sampeyan kudu nggawe API dhewe.

Nalika iki bisa uga katon kaya tugas sing nggegirisi ing wiwitan, nanging sejatine cukup prasaja. Kita bakal nuduhake sampeyan carane nindakake iki karo Python.

Apa sampeyan kudu miwiti

Pangembangan API mbutuhake:

  • Python3;
  • Flask β€” kerangka kerja sing gampang lan gampang digunakake kanggo nggawe aplikasi web;
  • Flask-RESTful minangka extension kanggo Flask sing ngidini sampeyan ngembangake API REST kanthi cepet lan kanthi konfigurasi minimal.

Instalasi ditindakake kanthi printah:

pip install flask-restful

Disaranake program intensif gratis kanggo pamula:
Pangembangan bot Telegram ing C# β€” 26–28 Agustus. Intensif gratis sing ngidini sampeyan ngerti cara kerja bot helper, fitur nggarap API Telegram lan nuansa liyane. Telu peserta paling dhuwur bakal nampa 30 rubel saka Skillbox.

Sadurunge sampeyan miwiti

Kita bakal ngembangake API RESTful kanthi dhasar fungsi CRUID.

Kanggo ngerti tugas kanthi lengkap, ayo ngerti rong istilah kasebut ing ndhuwur.

Apa iku REST?

REST API (Representational State Transfer) yaiku API sing nggunakake panjalukan HTTP kanggo ijol-ijolan data.

REST API kudu memenuhi kritΓ©ria tartamtu:

  • Arsitektur klien-server: klien sesambungan karo antarmuka panganggo, lan server sesambungan karo backend lan nyimpen data. Klien lan server merdika, samubarang bisa diganti kanthi kapisah saka liyane.
  • Stateless - ora ana data klien sing disimpen ing server. Negara sesi disimpen ing sisih klien.
  • Cacheability - Klien bisa cache respon server kanggo nambah kinerja sakabΓ¨hΓ©.

Apa iku CRUD?

RAW minangka konsep pemrograman sing nggambarake papat tumindak dhasar (nggawe, maca, nganyari lan mbusak).

Ing REST API, jinis panjalukan lan cara panyuwunan tanggung jawab kanggo tumindak kayata kirim, entuk, sijine, mbusak.

Saiki kita wis ngrampungake syarat dhasar, kita bisa miwiti nggawe API.

Pangembangan saka

Ayo nggawe repositori kuotasi babagan intelijen buatan. AI minangka salah sawijining teknologi sing paling cepet berkembang saiki, lan Python minangka alat sing populer kanggo nggarap AI.

Kanthi API iki, pangembang Python bisa kanthi cepet sinau babagan AI lan diilhami dening prestasi anyar. Yen pangembang duwe pikiran sing penting babagan topik iki, dheweke bakal bisa nambah menyang gudang.

Ayo miwiti kanthi ngimpor modul sing dibutuhake lan nyetel Flask:

from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)

Ing cuplikan iki, Flask, Api lan Resource minangka kelas sing kita butuhake.

Reqparse minangka antarmuka parsing panjalukan Flask-RESTful ... Sampeyan uga mbutuhake modul acak kanggo nampilake kutipan acak.

Saiki kita bakal nggawe repositori kuotasi babagan AI.

Saben entri repo bakal ngemot:

  • ID digital;
  • jeneng penulis kutipan;
  • kutipan.

Awit iki mung conto sinau, kita bakal nyimpen kabeh entri ing dhaftar Python. Ing aplikasi nyata, kita bakal nggunakake database tinimbang.

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."
    }
]

Saiki kita kudu nggawe kelas sumber Kutipan sing bakal nemtokake operasi endpoints API kita. Patang cara kudu diumumake ing kelas: njaluk, ngirim, sijine, mbusak.

Ayo miwiti nganggo metode GET

Iki ngidini sampeyan entuk kutipan tartamtu kanthi nemtokake ID, utawa kutipan acak yen ora ana ID sing ditemtokake.

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

Cara GET ngasilake kutipan acak yen ID ngemot nilai gawan, i.e. nalika nelpon ID cara ora disetel.

Yen wis disetel, banjur cara nggoleki ing antarane kuotasi lan nemokake sing ngemot ID sing diwenehake. Yen ora ana sing ditemokake, pesen "Kutipan ora ditemokake, 404" ditampilake.

Elinga, cara kasebut ngasilake status HTTP 200 yen panjalukan kasebut sukses lan 404 yen entri ora ditemokake.

Saiki ayo nggawe metode POST kanggo nambah kutipan anyar menyang gudang

Bakal entuk id saben kutipan anyar nalika sampeyan ngetik. Kajaba iku, POST bakal nggunakake reqparse kanggo parse paramèter sing bakal mlebu ing awak panyuwunan (penulis lan teks kutipan).

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

Ing kode ing ndhuwur, metode POST nampa ID kutipan. Banjur, nggunakake reqparse, njupuk penulis lan kutipan saka panyuwunan, disimpen ing kamus params.

Yen kutipan kanthi ID sing ditemtokake wis ana, cara kasebut bakal nampilake pesen lan kode 400 sing cocog.

Yen kutipan karo ID sing ditemtokake durung digawe, cara kasebut nggawe entri anyar kanthi ID lan penulis sing ditemtokake, uga paramèter liyane. Banjur nambahake entri menyang dhaptar ai_quotes lan ngasilake entri kanthi kutipan anyar bebarengan karo kode 201.

Saiki kita nggawe cara PUT kanggo ngganti kutipan sing wis ana ing repositori

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

Cara PUT, padha karo conto sadurunge, njupuk ID lan input lan parses paramèter kutipan nggunakake reqparse.

Yen kuotasi karo ID sing ditemtokake ana, cara kasebut bakal nganyari karo paramèter anyar lan banjur ngasilake kutipan sing dianyari kanthi kode 200. Yen durung ana kutipan karo ID sing ditemtokake, rekaman anyar kanthi kode 201 bakal digawe.

Pungkasan, ayo nggawe metode DELETE kanggo mbusak kutipan sing ora ana inspirasi maneh.

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

Cara iki njupuk ID kuotasi minangka input lan nganyari dhaptar ai_quotes nggunakake dhaptar sing dienggo bareng.

Saiki kita wis nggawe kabeh cara, kita mung kudu nambah sumber daya kanggo API, nyetel path, lan mbukak Flask.

api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
    app.run(debug=True)

Layanan REST API kita wis siyap!

Sabanjure, kita bisa nyimpen kode menyang file app.py kanthi mbukak ing console kanthi printah:

python3 app.py

Yen kabeh apik, mula kita bakal entuk kaya iki:

* Mode debug: aktif
*Mlaku terus 127.0.0.1:5000/ (Pencet CTRL+C kanggo metu)
* Miwiti maneh kanthi stat
* Debugger aktif!
* PIN Debugger: XXXXXXX

Nguji API

Sawise API digawe, perlu dites.

Iki bisa ditindakake nggunakake sarana konsol curl utawa klien Insomnia REST, utawa kanthi nerbitake API ing API Rapid.

Nulis API ing Python (karo Flask lan RapidAPI)

Nerbitake API kita

RapidAPI minangka pasar paling gedhe ing donya kanthi luwih saka 10 API (lan udakara 000 yuta pangembang).

RapidAPI ora mung nyedhiyakake antarmuka siji kanggo nggarap API pihak katelu, nanging uga ngidini sampeyan nerbitake API sampeyan kanthi cepet lan gampang.

Kanggo kanggo nindakake iki, sampeyan kudu nerbitake menyang sawetara server ing jaringan. Ing kasus kita, kita bakal nggunakake Heroku. Makarya karo dheweke mesthine ora nyebabake kesulitan, (sampeyan bisa ngerteni luwih akeh babagan kene).

Cara nerbitake API sampeyan ing Heroku

1. Instal Heroku.

Langkah pisanan yaiku ndhaptar lan nginstal Heroku Command Line Interface (CLI). Iki bisa digunakake ing Ubuntu 16+.

sudo snap nginstal heroku --classic

Banjur kita mlebu:

mlebu log

2. Tambah file sing perlu.

Saiki kita kudu nambah file kanggo nerbitake menyang folder ing aplikasi kita:

  • requirements.txt karo dhaptar modul Python dibutuhake;
  • Procfile, sing nemtokake printah sing kudu dieksekusi kanggo mbukak aplikasi;
  • .gitignore - kanggo ngilangi file sing ora perlu ing server.

Berkas requirements.txt bakal ngemot baris ing ngisor iki:

  • flask
  • flask-restful
  • gunicorn

Elinga yen kita wis nambah gunicorn (Python WSGI HTTP Server) menyang dhaptar amarga kita kudu mbukak aplikasi kita ing server.

Profil bakal ngemot:

web: gunicorn app:app

Isi saka .giignore:

*.pyc
__pycache__/

Saiki file digawe, ayo miwiti git repo lan tundhuk:

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

3. Nggawe aplikasi Heroku anyar.

heroku create

Nyorong cabang master menyang repo Heroku remot:

git push heroku master

Saiki sampeyan bisa miwiti kanthi mbukak Layanan API kanthi printah:

heroku ps:scale web=1
heroku open
 

API bakal kasedhiya ing your-random-heroku-name.herokuapp.com/ai-quotes.

Cara nambah API Python menyang pasar RapidAPI

Sawise layanan API diterbitake ing Heroku, sampeyan bisa nambah menyang API Rapid. kene dokumentasi rinci babagan topik iki.

1. Nggawe akun RapidAPI.

Nulis API ing Python (karo Flask lan RapidAPI)

Kita ndhaptar akun gratis - iki bisa ditindakake nggunakake Facebook, Google, GitHub.

Nulis API ing Python (karo Flask lan RapidAPI)

2. Tambah API kanggo panel kontrol.

Nulis API ing Python (karo Flask lan RapidAPI)

3. Sabanjure, ketik informasi umum babagan API sampeyan.

Nulis API ing Python (karo Flask lan RapidAPI)

4. Sawise ngeklik "Tambah API" kaca anyar katon ing ngendi sampeyan bisa ngetik informasi babagan API kita.

Nulis API ing Python (karo Flask lan RapidAPI)

5. Saiki sampeyan bisa kanthi manual ngetik endpoints API, utawa download file swagger nggunakake OpenAPI.

Nulis API ing Python (karo Flask lan RapidAPI)

Saiki, sampeyan kudu nyetel titik pungkasan API kita ing kaca Endpoints. Ing kasus kita, titik pungkasan cocog karo konsep CRUD (entuk, kirim, pasang, mbusak).

Nulis API ing Python (karo Flask lan RapidAPI)

Sabanjure, sampeyan kudu nggawe titik pungkasan GET AI Quote sing nampilake kutipan acak (yen ID standar) utawa kutipan kanggo ID sing ditemtokake.

Kanggo nggawe endpoint, sampeyan kudu ngeklik tombol "Gawe Endpoint".

Nulis API ing Python (karo Flask lan RapidAPI)

Kita mbaleni proses iki kanggo kabeh titik pungkasan API liyane. Iku kabeh! Sugeng, sampeyan wis nerbitake API sampeyan!

Yen kabeh dadi apik, kaca API bakal katon kaya iki:

Nulis API ing Python (karo Flask lan RapidAPI)

kesimpulan

Ing artikel iki, kita ngliwati proses nggawe Layanan API RESTful dhewe ing Python, bebarengan karo proses nerbitake API menyang awan Heroku lan ditambahake menyang direktori RapidAPI.

Nanging ing versi tes, mung prinsip dhasar pangembangan API sing ditampilake - nuansa kayata keamanan, toleransi kesalahan lan skalabilitas ora dianggep.

Nalika ngembangake API nyata, kabeh iki kudu dianggep.

Source: www.habr.com

Add a comment