Cara Membangun REST API Dengan Flask dan Database Postgres

Table of content:
Antarmuka Pemrograman Aplikasi (API) adalah bagian penting dalam membangun dan menghubungkan sistem yang berbeda, memungkinkan aplikasi Anda untuk berkomunikasi dan bertukar data dengan layanan lain.
Meskipun pengembangan backend melibatkan lebih dari sekadar menulis API — ini juga mencakup penulisan logika bisnis sisi server, merancang arsitektur sistem yang efisien, dan fungsi utama lainnya, baca terus untuk mempelajari cara membuat CRUD REST API sederhana dengan Flask (kerangka kerja Python yang ringan) , dan basis data Postgres.
Menggunakan Flask untuk Membuat Backend API
Labu adalah framework Python ringan yang menyediakan sejumlah fitur untuk menyederhanakan penulisan API backend untuk klien web yang ditulis menggunakan teknologi berbeda seperti React dan Angular.
Panduan ini akan memandu Anda menulis REST API yang mengimplementasikan empat operasi CRUD: buat, baca, perbarui, dan hapus untuk mengelola data pengguna yang disimpan dalam database Postgres.
Siapkan Database Postgres
Untuk memulai, pergilah ke ElephantSQLsolusi hosting database berbasis cloud yang menyediakan platform untuk membuat dan mengelola database Postgres di cloud, mendaftar, dan masuk ke halaman ikhtisar akun Anda.
Klik Buat Instance Baru untuk membuat instance baru untuk aplikasi Anda.
Berikan nama instans Anda dan pilih paket gratis, dan terakhir pilih wilayah tempat instans akan dihosting untuk menyelesaikan proses penyiapan.
Setelah instance dibuat, navigasikan ke halaman pengaturan dan salin URL basis dataAnda akan menggunakannya untuk membuat koneksi dengan database.
Siapkan Server Flask
Di terminal Anda, buat folder proyek, dan ubah direktori saat ini ke folder baru itu.
Sebelum menginstal Flask, konfirmasikan bahwa Anda menjalankan Python versi 3.6+ di mesin Anda. Jika tidak, Anda perlu menginstal yang terbaru Piton Versi: kapan.
python --version
Setelah itu, instal virtualenvuntuk membuat lingkungan pengembangan virtual yang terisolasi.
pip install virtualenv
Selanjutnya, jalankan perintah di bawah ini untuk membuat lingkungan virtual.
virtualenv venv
Terakhir, aktifkan lingkungan virtual.
# On Windows:
.\venv\Scripts\activate
# On Unix or MacOS:
source venv/bin/activate
Instal Paket yang Diperlukan
Di direktori root folder proyek Anda, buat a persyaratan.txt file dan tambahkan paket-paket ini.
flask
python-dotenv
psycopg2-binary
Selanjutnya, instal paket.
pip install -r requirements.txt
Itu psycopg2-binary adalah library Python yang bertindak sebagai middleware, untuk memungkinkan Anda membuat koneksi dengan database Postgres Anda dan melakukan berbagai operasi database.
Terakhir, buat a .env file dan rekatkan URL basis data Anda.
DATABASE_URL= your database URL
Buat Server Flask
Terakhir, buat sebuah app.py file di direktori root, dan tambahkan kode di bawah ini.
import os
import psycopg2
from dotenv import load_dotenv
from flask import Flask, request, jsonifyload_dotenv()
app = Flask(__name__)
url = os.getenv("DATABASE_URL")
connection = psycopg2.connect(url)
@app.get("https://www.makeuseof.com/")
def home():
return "hello world"
Kode ini mengatur sebuah instance dari aplikasi Flask. Itu kemudian membuat koneksi ke database yang ditentukan dalam string URL dan terakhir, mengatur rute rumah yang mengembalikan string sebagai respons.
Buat REST API Mengaktifkan Operasi CRUD
Sekarang, bangun REST API yang mengimplementasikan empat operasi CRUD.
Buat Tabel Demo
Buat tabel pengguna di dalam database.
Di file app.py, tambahkan kode di bawah ini.
CREATE_USERS_TABLE = "CREATE TABLE IF NOT EXISTS users (id SERIAL PRIMARY KEY, name TEXT);"with connection:
with connection.cursor() as cursor:
cursor.execute(CREATE_USERS_TABLE)
- Kode ini membuat tabel PostgreSQL baru bernama pengguna dengan dua kolom.
- Itu menggunakan metode koneksi psycopg2 untuk membuat koneksi dengan database dan membuat objek kursor baru menggunakan connection.cursor metode yang digunakan untuk mengeksekusi query SQL.
1. Tentukan Metode POST
Buat rute pos untuk menambahkan data.
INSERT_USER_RETURN_ID = "INSERT INTO users (name) VALUES (%s) RETURNING id;"
@app.route("/api/user", methods=["POST"])
def create_user():
data = request.get_json()
name = data["name"]
with connection:
with connection.cursor() as cursor:
cursor.execute(INSERT_USER_RETURN_ID, (name,))
user_id = cursor.fetchone()[0]
return {"id": user_id, "name": name, "message": f"User {name} created."}, 201
- String kueri SQL mendefinisikan pernyataan SQL yang akan dieksekusi menggunakan kursor.eksekusi metode untuk menyisipkan baris baru dengan nama pengguna ke dalam pengguna tabel di database. Ini mengembalikan ID pengguna yang baru dibuat.
- Itu buat pengguna fungsi mengambil nama sebagai parameter untuk disimpan dalam database sementara kursor.ambil metode dipanggil untuk mengambil ID pengguna yang baru dibuat. Terakhir, sebuah kamus yang berisi ID dan nama pengguna yang baru dibuat, bersama dengan pesan yang menunjukkan bahwa pengguna telah berhasil dibuat, dikembalikan.
2. Tentukan Metode GET
Tetapkan dua rute pengambilan: satu, untuk mengambil semua data dalam database, dan dua, untuk mengambil data tertentu dari database berdasarkan ID.
SELECT_ALL_USERS = "SELECT * FROM users;"@app.route("/api/user", methods=["GET"])
def get_all_users():
with connection:
with connection.cursor() as cursor:
cursor.execute(SELECT_ALL_USERS)
users = cursor.fetchall()
if users:
result = []
for user in users:
result.append({"id": user[0], "name": user[1]})
return jsonify(result)
else:
return jsonify({"error": f"Users not found."}), 404
@app.route("/api/user/<int:user_id>", methods=["GET"])
def get_user(user_id):
with connection:
with connection.cursor() as cursor:
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
user = cursor.fetchone()
if user:
return jsonify({"id": user[0], "name": user[1]})
else:
return jsonify({"error": f"User with ID {user_id} not found."}), 404
- Rute API pertama ini menangani permintaan HTTP GET untuk mengambil semua pengguna dari database. Ini mengambil semua pengguna dari database dan mengembalikan hasilnya dalam format JSON sebagai respons.
- Rute API kedua ini menangani permintaan HTTP GET untuk mengambil data untuk pengguna tertentu dari database. Dibutuhkan di identitas pengguna sebagai parameter, mengambil data pengguna dari database, dan mengembalikan hasilnya dalam format JSON dalam respons.
3. Tentukan Metode PUT
Buat rute put untuk memperbarui data yang disimpan dalam database.
@app.route("/api/user/<int:user_id>", methods=["PUT"])
def update_user(user_id):
data = request.get_json()
name = data["name"]
with connection:
with connection.cursor() as cursor:
cursor.execute(UPDATE_USER_BY_ID, (name, user_id))
if cursor.rowcount == 0:
return jsonify({"error": f"User with ID {user_id} not found."}), 404
return jsonify({"id": user_id, "name": name, "message": f"User with ID {user_id} updated."})
- Itu perbarui_pengguna fungsi mengambil parameter ID pengguna sebagai input dan menggunakannya untuk memperbarui nama pengguna yang ditentukan dalam database.
- Jika operasi pembaruan berhasil, ia mengembalikan objek JSON dengan ID pengguna yang diperbarui, nama, dan pesan sukses dalam respons.
4. Tentukan Metode HAPUS
Terapkan rute hapus untuk menghapus data yang disimpan dari pengguna tertentu dalam database.
@app.route("/api/user/<int:user_id>", methods=["DELETE"])
def delete_user(user_id):
with connection:
with connection.cursor() as cursor:
cursor.execute(DELETE_USER_BY_ID, (user_id,))
if cursor.rowcount == 0:
return jsonify({"error": f"User with ID {user_id} not found."}), 404
return jsonify({"message": f"User with ID {user_id} deleted."})
- Rute API ini menangani fungsi hapus pengguna tertentu dari database berdasarkan ID mereka. Jika pengguna tidak ditemukan, ia mengembalikan kode status 404 dengan pesan kesalahan. Namun, jika operasi penghapusan berhasil, ia mengembalikan objek JSON dengan pesan sukses sebagai respons.
Menulis REST API Dengan Flask
Panduan ini mendemonstrasikan cara menggunakan Flask dan Postgres untuk membuat CRUD REST API sederhana, cara membuat koneksi database dan menjalankan kueri SQL yang berbeda untuk membaca dan menulis data ke database. Anda sekarang dapat membuat REST API sederhana yang dapat menangani empat operasi CRUD yang diperlukan dalam aplikasi web apa pun.
Apakah Anda sedang membangun blog sederhana atau aplikasi web yang kompleks, Flask dan Postgres menawarkan fitur dan kemampuan canggih yang diperlukan untuk membuat sistem backend yang tangguh. Sebagai alternatif, Anda dapat menggunakan teknologi lain seperti FastAPI dan MongoDB untuk membuat RESTful API.