Pelajari cara membuat RESTful API menggunakan Flask dan Postgres, memungkinkan pertukaran data yang lancar antara aplikasi Anda dan sistem eksternal.

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 sistem yang efisien arsitektur, dan fungsi utama lainnya, baca terus untuk mempelajari cara membuat CRUD REST API sederhana dengan Flask (kerangka kerja Python yang ringan), dan Postgres basis data.

Menggunakan Flask untuk Membuat Backend API

Labu adalah ringan kerangka kerja Python yang menyediakan sejumlah fitur untuk menyederhanakan penulisan API backend untuk klien web yang ditulis menggunakan teknologi berbeda seperti React dan Angular.

Anda dapat menemukan kode sumber proyek ini di sini repositori GitHub.

instagram viewer

Panduan ini akan memandu Anda menulis a 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 ElephantSQL, solusi 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 data, Anda 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 --versi

Setelah itu, instal virtualenv, untuk membuat lingkungan pengembangan virtual yang terisolasi.

pip instal virtualenv

Selanjutnya, jalankan perintah di bawah ini untuk membuat lingkungan virtual.

virtualenv venv

Terakhir, aktifkan lingkungan virtual.

# Di Windows: 
.\venv\Scripts\aktifkan
# Di Unix atau MacOS:
sumber venv/bin/aktifkan

Instal Paket yang Diperlukan

Di direktori root folder proyek Anda, buat a persyaratan.txt file dan tambahkan paket-paket ini.

labu
python-dotenv
psycopg2-binary

Selanjutnya, instal paket.

pip instal -r persyaratan.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= URL basis data Anda

Buat Server Flask

Terakhir, buat sebuah app.py file di direktori root, dan tambahkan kode di bawah ini.

impor os 
impor psycopg2
dari dotenv impor load_dotenv
dari labu impor Labu, permintaan, jsonify

load_dotenv()

aplikasi = Labu (__nama__)
url = os.getenv("DATABASE_URL")
koneksi = psycopg2.connect (url)

@aplikasi.dapatkan("/")
defrumah():
kembali"Halo Dunia"

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 = "BUAT TABEL JIKA TIDAK ADA pengguna (id SERIAL PRIMARY KEY, nama TEKS);"

dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
kursor.jalankan (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 kueri SQL.

1. Tentukan Metode POST

Buat rute pos untuk menambahkan data.

INSERT_USER_RETURN_ID = "MASUKKAN KE pengguna (nama) NILAI (%s) MENGEMBALIKAN id;"
@ aplikasi.rute("/api/pengguna", metode=["POST"])
defbuat pengguna():
data = permintaan.get_json()
nama = data["nama"]
dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
kursor.jalankan (INSERT_USER_RETURN_ID, (nama,))
user_id = cursor.fetchone()[0]
kembali {"pengenal": identitas pengguna, "nama": nama, "pesan": f"Pengguna {nama} diciptakan."}, 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 = "PILIH * DARI pengguna;"

@ aplikasi. rute("/api/pengguna", metode = ["DAPATKAN"])
defget_all_users():
dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
kursor.jalankan (SELECT_ALL_USERS)
pengguna = kursor.fetchall()
jika pengguna:
hasil = []
untuk pengguna di dalam pengguna:
result.append({"pengenal": pengguna[0], "nama": pengguna[1]})
kembali jsonify (hasil)
kalau tidak:
kembali jsonify({"kesalahan": f"Pengguna tidak ditemukan."}), 404

@aplikasi.rute("/api/pengguna/", metode=["DAPATKAN"])
defget_user(identitas pengguna):
dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
kursor.jalankan("PILIH * DARI pengguna MANA id = %s", (identitas pengguna,))
pengguna = kursor.fetchone()
jika pengguna:
kembali jsonify({"pengenal": pengguna[0], "nama": pengguna[1]})
kalau tidak:
kembali jsonify({"kesalahan": f"Pengguna dengan ID {identitas pengguna} tidak ditemukan."}), 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.

@aplikasi.rute("/api/pengguna/", metode=["PUT"])
defperbarui_pengguna(identitas pengguna):
data = permintaan.get_json()
nama = data["nama"]
dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
cursor.execute (UPDATE_USER_BY_ID, (nama, user_id))
jika kursor.jumlahbaris == 0:
kembali jsonify({"kesalahan": f"Pengguna dengan ID {identitas pengguna} tidak ditemukan."}), 404
kembali jsonify({"pengenal": identitas pengguna, "nama": nama, "pesan": f"Pengguna dengan ID {identitas pengguna} diperbarui."})
  • 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.

@aplikasi.rute("/api/pengguna/", metode=["HAPUS"])
defHapus pengguna(identitas pengguna):
dengan koneksi:
dengan koneksi.kursor() sebagai kursor:
kursor.jalankan (DELETE_USER_BY_ID, (user_id,))
jika kursor.jumlahbaris == 0:
kembali jsonify({"kesalahan": f"Pengguna dengan ID {identitas pengguna} tidak ditemukan."}), 404
kembali jsonify({"pesan": f"Pengguna dengan ID {identitas pengguna} dihapus."})
  • 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 menunjukkan cara menggunakan Flask dan Postgres untuk membuat CRUD REST API sederhana bersama, caranya untuk membuat koneksi database dan menjalankan kueri SQL yang berbeda untuk membaca dan menulis data ke a basis data. 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.