Nulis API dina Python (kalayan Flask sareng RapidAPI)

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Lamun nuju maca artikel ieu, Anjeun meureun geus wawuh jeung kemungkinan nu datang kalawan ngagunakeun hiji API (Application Programming Interface).

Ku nambahkeun salah sahiji loba API kabuka pikeun aplikasi Anjeun, Anjeun bisa manjangkeun pungsionalitas aplikasi atawa enrich eta kalawan data diperlukeun. Tapi kumaha upami anjeun ngembangkeun fitur unik anu anjeun hoyong bagikeun ka masarakat?

Dina jawaban eta basajan: anjeun peryogi nyieun API sorangan.

Sanajan ieu bisa sigana kawas tugas hésé dina mimitina, éta sabenerna basajan. Kami bakal nunjukkeun anjeun kumaha ngalakukeun ieu nganggo Python.

Naon anu anjeun peryogikeun pikeun ngamimitian

Pikeun ngembangkeun API anjeun peryogi:

  • Python3;
  • Flask — kerangka anu sederhana sareng gampang dianggo pikeun nyiptakeun aplikasi wéb;
  • Flask-RESTful mangrupa extension pikeun Flask nu ngidinan Anjeun pikeun ngamekarkeun REST API gancang tur kalawan konfigurasi minimal.

Pamasangan dilaksanakeun nganggo paréntah:

pip install flask-restful

Kami nyarankeun kursus program intensif gratis pikeun pamula:
Pangembangan bot Telegram dina C # — 26–28 Agustus. Kursus intensif gratis anu ngamungkinkeun anjeun ngartos kumaha asisten bot damel, spésifikasi gawé bareng Telegram API sareng nuansa sanésna. Tilu pamilon pangalusna bakal nampa 30 rubles ti Skillbox.

Sateuacan Anjeun ngamimitian

Kami badé ngembangkeun API RESTful kalayan dasar fungsionalitas CRUID.

Pikeun ngartos tugasna, hayu urang ngartos dua istilah anu disebatkeun di luhur.

Naon ari REST?

REST API (Representational State Transfer) nyaéta API anu ngagunakeun pamundut HTTP pikeun tukeur data.

REST API kedah minuhan kriteria nu tangtu:

  • Arsitéktur klien-server: Klién berinteraksi sareng antarbeungeut pangguna, sareng server berinteraksi sareng backend sareng neundeun data. Klién sareng server bebas, salah sahijina tiasa digentos sacara misah ti anu sanés.
  • Stateless - euweuh data klien disimpen dina server. Kaayaan sési disimpen di sisi klien.
  • Cacheability - Klién tiasa cache réspon server pikeun ngaronjatkeun kinerja sakabéh.

Naon CRUD?

atah mangrupakeun konsép programming anu ngajelaskeun opat lampah dasar (nyieun, maca, ngamutahirkeun jeung ngahapus).

Dina REST API, jinis pamundut sareng metode pamenta tanggung jawab pikeun tindakan sapertos posting, kéngingkeun, nempatkeun, ngahapus.

Ayeuna urang ngartos istilah dasar, urang tiasa ngamimitian nyieun API.

rarancang

Hayu urang nyieun gudang tina tanda petik ngeunaan kecerdasan jieunan. AI mangrupikeun salah sahiji téknologi anu paling gancang ngembang ayeuna, sareng Python mangrupikeun alat anu populér pikeun damel sareng AI.

Kalayan API ieu, pamekar Python tiasa gancang kéngingkeun inpormasi ngeunaan AI sareng diideuan ku kamajuan énggal. Upami pamekar gaduh pamikiran anu berharga dina topik ieu, anjeunna bakal tiasa nambihanana kana gudang.

Hayu urang mimitian ku ngimpor modul anu diperyogikeun sareng nyetél Flask:

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

Dina snippet ieu, Flask, Api sareng Sumberdaya mangrupikeun kelas anu urang peryogikeun.

Reqparse mangrupakeun panganteur query parsing Flask-RESTful ... Anjeun ogé bakal butuh modul acak pikeun nembongkeun hiji cutatan acak.

Ayeuna urang bakal nyiptakeun gudang kutipan ngeunaan AI.

Unggal éntri repo bakal ngandung:

  • ID digital;
  • ngaran pangarang cutatan;
  • cutatan.

Kusabab ieu ngan conto latihan, urang bakal nyimpen sakabéh éntri dina daptar Python. Dina aplikasi nyata, urang dipikaresep bakal ngagunakeun database gantina.

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

Ayeuna urang kudu nyieun kelas sumberdaya Quote anu bakal nangtukeun operasi titik tungtung API urang. Di jero kelas anjeun kedah nyatakeun opat metode: kéngingkeun, pasang, nempatkeun, ngahapus.

Hayu urang mimitian ku metoda GET

Ieu ngamungkinkeun pikeun meunangkeun cutatan husus ku nangtukeun ID na, atawa cutatan acak lamun ID teu dieusian.

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

Metoda GET mulih kutipan acak lamun ID ngandung nilai standar, i.e. euweuh ID dieusian nalika nelepon metoda.

Lamun dieusian, mangka métode maluruh diantara citations sarta manggihan hiji nu ngandung ID dieusian. Upami teu aya anu kapendak, pesen "Kutipan henteu kapendak, 404" ditampilkeun.

Émut: metodeu ngabalikeun status HTTP 200 upami pamundutna suksés sareng 404 upami catetan henteu kapendak.

Ayeuna hayu urang ngadamel metode POST pikeun nambihan kutipan énggal kana gudang

Bakal kéngingkeun ID unggal kutipan énggal nalika anjeun ngetik. Salaku tambahan, POST bakal nganggo reqparse pikeun ngémutan parameter anu bakal aya dina badan pamundut (panulis sareng kutipan téks).

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

Dina kode di luhur, metode POST nampi ID kutipan. Teras, nganggo reqparse, éta nyandak panulis sareng kutipan tina pamundut, disimpen dina kamus params.

Upami kutipan sareng ID anu ditunjuk parantos aya, metodena nunjukkeun pesen sareng kode 400 anu saluyu.

Upami kutipan sareng ID anu ditangtukeun henteu acan didamel, metodena nyiptakeun rékaman énggal kalayan ID sareng panulis anu ditangtukeun, ogé parameter anu sanés. Teras nambihan éntri kana daptar ai_quotes sareng mulangkeun éntri kalayan kutipan énggal sareng kode 201.

Ayeuna urang nyiptakeun metode PUT pikeun ngarobih kutipan anu tos aya dina gudang

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

Metoda PUT, sarupa jeung conto saméméhna, nyokot ID na input sarta parses parameter cutatan maké reqparse.

Upami aya kutipan sareng ID anu ditangtukeun, metodena bakal ngamutahirkeun ku parameter anyar teras kaluaran kutipan anu diropéa nganggo kode 200. Upami teu aya kutipan sareng ID anu ditunjuk, rékaman énggal kalayan kode 201 bakal didamel.

Tungtungna, hayu urang ngadamel metode DELETE pikeun ngahapus kutipan anu henteu deui mereun

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

Metoda ieu nampi ID kutipan salaku input sareng ngapdet daptar ai_quotes nganggo daptar anu dibagikeun.

Ayeuna urang parantos nyiptakeun sadaya metode, anu kedah urang laksanakeun nyaéta ngan ukur nambihan sumber pikeun API, nyetél jalur, sareng ngajalankeun Flask.

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

Service REST API kami geus siap!

Salajengna, urang tiasa nyimpen kodeu kana file app.py ku ngajalankeun éta dina konsol nganggo paréntah:

python3 app.py

Upami sadayana saé, maka urang bakal nampi sapertos kieu:

* Modeu debug: on
* Ngajalankeun 127.0.0.1:5000/ (Pencét Ctrl+C pikeun kaluar)
* Balikan deui sareng stat
* Debugger aktip!
* PIN Debugger: XXXXXXX

Nguji API

Sakali API dijieun, éta perlu diuji.

Ieu tiasa dilakukeun nganggo utilitas konsol curl atanapi klien Insomnia REST, atanapi ku nyebarkeun API dina Rapid API.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Nyebarkeun API kami

RapidAPI mangrupikeun pasar panggedéna di dunya kalayan langkung ti 10 API (sareng sakitar 000 juta pamekar).

RapidAPI henteu ngan ukur nyayogikeun antarmuka tunggal pikeun damel sareng API pihak katilu, tapi ogé ngamungkinkeun anjeun gancang sareng gampang nyebarkeun API anjeun nyalira.

ka pikeun ngalakukeun ieu, Anjeun mimitina kudu nyebarkeun eta dina sababaraha server dina jaringan. Dina hal urang urang bakal ngagunakeun Heroku. Gawe sareng éta teu matak ngabalukarkeun kasusah, (anjeun tiasa mendakan langkung seueur ngeunaan anjeunna di dieu).

Kumaha Nyebarkeun API anjeun dina Heroku

1. Pasang Heroku.

Léngkah munggaran nyaéta ngadaptar sareng masang Heroku Command Line Interface (CLI). Ieu jalan dina Ubuntu 16+.

sudo snap install heroku —classic

Lajeng login:

login heroku

2. Tambahkeun file perlu.

Ayeuna urang kedah nambihan file anu bakal diterbitkeun kana polder dina aplikasi urang:

  • requirements.txt kalawan daptar modul Python diperlukeun;
  • Procfile, anu nangtukeun paréntah naon anu kedah dieksekusi pikeun ngajalankeun aplikasi;
  • .gitignore - ngaluarkeun file nu teu diperlukeun dina server.

The requirements.txt file bakal ngandung garis handap:

  • kolbu
  • kolésténg
  • gunicorn

Punten dicatet yén kami parantos nambihan gunicorn (Python WSGI HTTP Server) kana daptar sabab kami kedah ngajalankeun aplikasi kami dina server.

Procfile bakal ngandung:

wéb: aplikasi gunicorn: aplikasi

Eusi .giignore:

*.pyc
__pycache__/

Ayeuna yén file didamel, hayu urang ngamimitian git repo sareng komitmen:

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

3. Jieun aplikasi Heroku anyar.

heroku create

Kami nyorong cabang master kana repo Heroku jauh:

git push heroku master

Ayeuna anjeun tiasa ngamimitian ku muka Layanan API nganggo paréntah:

heroku ps:scale web=1
heroku open
 

API bakal sadia di your-random-heroku-name.herokuapp.com/ai-quotes.

Kumaha cara nambihan API Python anjeun ka pasar RapidAPI

Saatos jasa API anjeun diterbitkeun dina Heroku, anjeun tiasa nambihanana kana API Rapid. Ieuh dokuméntasi lengkep ngeunaan topik ieu.

1. Jieun akun RapidAPI.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Ngadaptarkeun akun gratis - ieu tiasa dilakukeun nganggo Facebook, Google, GitHub.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

2. Tambahkeun API kana panel kontrol.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

3. Salajengna, asupkeun informasi umum ngeunaan API Anjeun.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

4. Saatos ngaklik "Tambahkeun API" kaca anyar nembongan dimana anjeun bisa ngasupkeun informasi ngeunaan API urang.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

5. Ayeuna anjeun bisa boh sacara manual ngasupkeun titiktungtung API atawa ngundeur swagger-file ngagunakeun OpenAPI.

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Nya, ayeuna urang kedah nyetél titik tungtung API urang dina halaman Endpoints. Dina kasus urang, titik tungtung pakait sareng konsép CRUD (meunang, masang, nempatkeun, ngahapus).

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Salajengna, anjeun kedah nyiptakeun titik GET AI Quote anu nampilkeun kutipan acak (upami ID standar) atanapi kutipan pikeun ID anu ditangtukeun.

Pikeun nyieun titik tungtung, klik tombol "Jieun Endpoint".

Nulis API dina Python (kalayan Flask sareng RapidAPI)

Urang ngulang prosés ieu pikeun sakabéh titik tungtung API séjén. Éta hungkul! Gening, anjeun parantos nyebarkeun API anjeun!

Upami sadayana leres, halaman API bakal katingali sapertos kieu:

Nulis API dina Python (kalayan Flask sareng RapidAPI)

kacindekan

Dina artikel ieu, urang diajar prosés nyieun Service API RESTful anjeun sorangan dina Python, babarengan jeung prosés medarkeun API ka awan Heroku jeung nambahkeun kana diréktori RapidAPI.

Tapi versi test némbongkeun ukur prinsip dasar tina ngembangkeun API - nuances kayaning kaamanan, kasabaran sesar sarta scalability teu dianggap.

Nalika ngembangkeun API nyata, sadaya ieu kedah diperhatoskeun.

sumber: www.habr.com

Tambahkeun komentar