Menulis API dengan Python (dengan Flask dan RapidAPI)
Jika Anda membaca artikel ini, Anda mungkin sudah familiar dengan kemungkinan penggunaan API (Application Programming Interface).
Dengan menambahkan salah satu dari banyak API terbuka ke aplikasi Anda, Anda dapat memperluas fungsionalitas aplikasi atau memperkayanya dengan data yang diperlukan. Namun bagaimana jika Anda mengembangkan fitur unik yang ingin Anda bagikan kepada komunitas?
Jawabannya sederhana: Anda perlu buat API Anda sendiri.
Meskipun ini mungkin tampak seperti tugas yang sulit pada awalnya, namun sebenarnya ini sederhana. Kami akan menunjukkan cara melakukannya menggunakan Python.
Apa yang Anda butuhkan untuk memulai
Untuk mengembangkan API, Anda memerlukan:
Piton 3;
Labu — kerangka kerja sederhana dan mudah digunakan untuk membuat aplikasi web;
Labu-TENANG adalah ekstensi untuk Flask yang memungkinkan Anda mengembangkan REST API dengan cepat dan dengan konfigurasi minimal.
Instalasi dilakukan dengan perintah:
pip install flask-restful
Kami merekomendasikan kursus pemrograman intensif gratis untuk pemula: Pengembangan bot Telegram di C# — 26–28 Agustus. Kursus intensif gratis yang memungkinkan Anda memahami cara kerja asisten bot, spesifikasi bekerja dengan API Telegram, dan nuansa lainnya. Tiga peserta terbaik akan menerima 30 rubel dari Skillbox.
Untuk memahami tugas ini sepenuhnya, mari kita pahami dua istilah yang disebutkan di atas.
Apa itu REST?
REST API (Representational State Transfer) adalah API yang menggunakan permintaan HTTP untuk bertukar data.
REST API harus memenuhi kriteria tertentu:
Arsitektur klien-server: Klien berinteraksi dengan antarmuka pengguna, dan server berinteraksi dengan backend dan penyimpanan data. Klien dan server bersifat independen, salah satunya dapat diganti secara terpisah dari yang lain.
Stateless - tidak ada data klien yang disimpan di server. Status sesi disimpan di sisi klien.
Cacheability - Klien dapat menyimpan respons server dalam cache untuk meningkatkan kinerja secara keseluruhan.
Apa itu CRUD?
kasar adalah konsep pemrograman yang menjelaskan empat tindakan dasar (membuat, membaca, memperbarui, dan menghapus).
Di REST API, jenis permintaan dan metode permintaan bertanggung jawab atas tindakan seperti memposting, mendapatkan, memasukkan, menghapus.
Sekarang setelah kita memahami istilah dasarnya, kita dapat mulai membuat API.
Pembangunan
Mari buat gudang kutipan tentang kecerdasan buatan. AI adalah salah satu teknologi dengan pertumbuhan tercepat saat ini, dan Python adalah alat yang populer untuk bekerja dengan AI.
Dengan API ini, pengembang Python dapat dengan cepat mendapatkan informasi tentang AI dan mendapatkan inspirasi dari kemajuan baru. Jika pengembang mempunyai pemikiran berharga mengenai topik ini, dia akan dapat menambahkannya ke repositori.
Mari kita mulai dengan mengimpor modul yang diperlukan dan menyiapkan Flask:
from flask import Flask
from flask_restful import Api, Resource, reqparse
import random
app = Flask(__name__)
api = Api(app)
Dalam cuplikan ini, Flask, Api dan Resource adalah kelas yang kita butuhkan.
Reqparse adalah antarmuka penguraian kueri Flask-RESTful... Anda juga memerlukan modul acak untuk menampilkan kutipan acak.
Sekarang kita akan membuat gudang kutipan tentang AI.
Setiap entri repo akan berisi:
tanda pengenal digital;
nama penulis kutipan;
mengutip.
Karena ini hanyalah contoh pelatihan, kami akan menyimpan semua entri dalam daftar Python. Dalam aplikasi nyata, kita mungkin akan menggunakan database.
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."
}
]
Sekarang kita perlu membuat kelas sumber daya Quote yang akan menentukan operasi titik akhir API kita. Di dalam kelas Anda perlu mendeklarasikan empat metode: get, post, put, delete.
Mari kita mulai dengan metode GET
Ini memungkinkan untuk mendapatkan penawaran harga tertentu dengan menentukan ID-nya, atau penawaran acak jika ID tidak ditentukan.
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
Metode GET mengembalikan kutipan acak jika ID berisi nilai default, yaitu. tidak ada ID yang ditentukan saat memanggil metode ini.
Jika ditentukan, maka metode akan mencari di antara kutipan dan menemukan kutipan yang berisi ID yang ditentukan. Jika tidak ada yang ditemukan, pesan “Kutipan tidak ditemukan, 404” ditampilkan.
Ingat: metode ini mengembalikan status HTTP 200 jika permintaan berhasil dan 404 jika catatan tidak ditemukan.
Sekarang mari kita buat metode POST untuk menambahkan kutipan baru ke repositori
Ini akan mendapatkan ID dari setiap kutipan baru saat Anda mengetik. Selain itu, POST akan menggunakan reqparse untuk mengurai parameter yang akan masuk ke isi permintaan (teks penulis dan 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
Pada kode di atas, metode POST menerima ID kutipan. Kemudian, dengan menggunakan reqparse, ia mengambil penulis dan kutipan dari kueri, menyimpannya dalam kamus params.
Jika kutipan dengan ID yang ditentukan sudah ada, metode akan menampilkan pesan terkait dan kode 400.
Jika kutipan dengan ID yang ditentukan belum dibuat, metode ini akan membuat catatan baru dengan ID dan penulis yang ditentukan, serta parameter lainnya. Kemudian menambahkan entri ke daftar ai_quotes dan mengembalikan entri dengan kutipan baru bersama dengan kode 201.
Sekarang kita membuat metode PUT untuk mengubah kutipan yang ada di repositori
Metode PUT, mirip dengan contoh sebelumnya, mengambil ID dan memasukkan serta mem-parsing parameter kutipan menggunakan reqparse.
Jika ada kutipan dengan ID yang ditentukan, metode akan memperbaruinya dengan parameter baru dan kemudian mengeluarkan kutipan yang diperbarui dengan kode 200. Jika belum ada kutipan dengan ID yang ditentukan, catatan baru dengan kode 201 akan dibuat.
Terakhir, mari buat metode DELETE untuk menghapus kutipan yang tidak lagi menginspirasi
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
Metode ini mendapatkan ID kutipan sebagai masukan dan memperbarui daftar ai_quotes menggunakan daftar bersama.
Sekarang kita telah membuat semua metode, yang perlu kita lakukan hanyalah menambahkan sumber daya ke API, mengatur jalur, dan menjalankan Flask.
api.add_resource(Quote, "/ai-quotes", "/ai-quotes/", "/ai-quotes/<int:id>")
if __name__ == '__main__':
app.run(debug=True)
Layanan REST API kami sudah siap!
Selanjutnya, kita dapat menyimpan kode ke file app.py dengan menjalankannya di konsol menggunakan perintah:
python3 app.py
Jika semuanya baik-baik saja, maka kita akan mendapatkan sesuatu seperti ini:
* Mode debug: aktif
*Berjalan 127.0.0.1:5000/ (Tekan CTRL+C untuk keluar)
* Memulai ulang dengan stat
* Debugger aktif!
* PIN Debugger: XXXXXXX
Menguji API
Setelah API dibuat, API perlu diuji.
Hal ini dapat dilakukan menggunakan utilitas konsol curl atau klien Insomnia REST, atau dengan menerbitkan API di Rapid API.
Menerbitkan API kami
RapidAPI adalah pasar terbesar di dunia dengan lebih dari 10 API (dan sekitar 000 juta pengembang).
RapidAPI tidak hanya menyediakan antarmuka tunggal untuk bekerja dengan API pihak ketiga, namun juga memberi Anda kemampuan untuk mempublikasikan API Anda sendiri dengan cepat dan mudah.
Bagaimana cara menambahkan API Python Anda ke pasar RapidAPI
Setelah layanan API Anda dipublikasikan di Heroku, Anda dapat menambahkannya ke Rapid API. Di Sini dokumentasi rinci pada topik ini.
1. Buat akun RapidAPI.
Daftarkan akun gratis - ini dapat dilakukan menggunakan Facebook, Google, GitHub.
2. Tambahkan API ke panel kontrol.
3. Selanjutnya, masukkan informasi umum tentang API Anda.
4. Setelah mengklik “Tambahkan API” akan muncul halaman baru di mana Anda dapat memasukkan informasi tentang API kami.
5. Sekarang Anda dapat memasukkan titik akhir API secara manual atau mengunduhnya file angkuh menggunakan OpenAPI.
Nah, sekarang kita perlu mengatur endpoint API kita di halaman Endpoints. Dalam kasus kami, titik akhir sesuai dengan konsep CRUD (dapatkan, posting, taruh, hapus).
Selanjutnya, Anda perlu membuat titik akhir GET AI Quote yang menampilkan kutipan acak (jika ID default) atau kutipan untuk ID yang ditentukan.
Untuk membuat titik akhir, klik tombol “Buat Titik Akhir”.
Kami mengulangi proses ini untuk semua titik akhir API lainnya. Itu saja! Selamat, Anda telah memublikasikan API Anda!
Jika semuanya baik-baik saja, halaman API akan terlihat seperti ini:
Kesimpulan
Dalam artikel ini, kita mempelajari proses pembuatan Layanan RESTful API Anda sendiri dengan Python, serta proses penerbitan API ke cloud Heroku dan menambahkannya ke direktori RapidAPI.
Namun versi pengujian hanya menunjukkan prinsip dasar pengembangan API - nuansa seperti keamanan, toleransi kesalahan, dan skalabilitas tidak dipertimbangkan.
Saat mengembangkan API nyata, semua ini perlu diperhitungkan.