نحوه ایجاد یک API RESTful با استفاده از Flask و Postgres را بیاموزید که امکان تبادل یکپارچه داده بین برنامه شما و سیستم های خارجی را فراهم می کند.
رابط های برنامه نویسی برنامه (API) بخش مهمی از ایجاد و اتصال سیستم های مختلف هستند و به برنامه های کاربردی شما اجازه می دهند با سرویس های دیگر ارتباط برقرار کرده و داده ها را مبادله کنند.
در حالی که توسعه بکاند فراتر از نوشتن APIها را شامل میشود – نوشتن منطق کسبوکار سمت سرور، طراحی معماریهای کارآمد سیستم و سایر عملکردهای کلیدی را نیز پوشش میدهد، برای یادگیری نحوه ساخت یک CRUD REST API ساده با Flask (یک چارچوب پایتون سبک وزن) به ادامه مطلب مراجعه کنید. و پایگاه داده Postgres.
استفاده از Flask برای ساخت API های Backend
Flask یک چارچوب سبک وزن پایتون است که تعدادی ویژگی را برای ساده کردن APIهای پشتیبان برای کلاینتهای وب که با استفاده از فناوریهای مختلفی مانند React و Angular نوشته شدهاند، فراهم میکند.
شما می توانید کد منبع این پروژه را در این مخزن GitHub پیدا کنید.
این راهنما شما را در نوشتن یک REST API راهنمایی می کند که چهار عملیات CRUD را اجرا می کند: ایجاد، خواندن، به روز رسانی و حذف برای مدیریت داده های کاربر ذخیره شده در پایگاه داده Postgres.
یک پایگاه داده Postgres راه اندازی کنید
برای شروع، به ElephantSQL بروید، یک راه حل میزبانی پایگاه داده مبتنی بر ابر که بستری را برای ایجاد و مدیریت پایگاه های داده Postgres در ابر، ثبت نام و ورود به صفحه نمای کلی حساب خود فراهم می کند.
برای ایجاد یک نمونه جدید برای برنامه خود، روی دکمه Create New Instance کلیک کنید.
نام نمونه خود را وارد کنید و طرح رایگان را انتخاب کنید و در نهایت منطقه ای را که نمونه میزبانی می شود انتخاب کنید تا فرآیند راه اندازی به پایان برسد.
پس از ایجاد نمونه، به صفحه تنظیمات بروید و URL پایگاه داده را کپی کنید، از آن برای ایجاد ارتباط با پایگاه داده استفاده خواهید کرد.
یک سرور Flask را راه اندازی کنید
در ترمینال خود، یک پوشه پروژه ایجاد کنید و دایرکتوری فعلی را به آن پوشه جدید تغییر دهید.
قبل از نصب Flask، تأیید کنید که پایتون نسخه 3.6+ را روی دستگاه خود اجرا می کنید. اگر نه، باید آخرین نسخه پایتون را نصب کنید.
python --version
پس از آن، virtualenv را نصب کنید تا یک محیط توسعه مجازی ایزوله ایجاد کنید.
pip install virtualenv
سپس دستور زیر را برای ایجاد یک محیط مجازی اجرا کنید.
virtualenv venv
در نهایت محیط مجازی را فعال کنید.
# On Windows:
.\venv\Scripts\activate
# On Unix or MacOS:
source venv/bin/activate
بسته های مورد نیاز را نصب کنید
در دایرکتوری ریشه پوشه پروژه خود، یک فایل requires.txt ایجاد کنید و این بسته ها را اضافه کنید.
flask
python-dotenv
psycopg2-binary
بعد، بسته ها را نصب کنید.
pip install -r requirements.txt
psycopg2-binary یک کتابخانه پایتون است که به عنوان یک میان افزار عمل می کند تا به شما امکان می دهد با پایگاه داده Postgres خود ارتباط برقرار کنید و عملیات های مختلف پایگاه داده را انجام دهید.
در نهایت، یک فایل .env ایجاد کنید و URL پایگاه داده خود را جایگذاری کنید.
DATABASE_URL= your database URL
سرور Flask را ایجاد کنید
در نهایت یک فایل app.py در پوشه اصلی ایجاد کنید و کد زیر را اضافه کنید.
import os
import psycopg2
from dotenv import load_dotenv
from flask import Flask, request, jsonify
load_dotenv()
app = Flask(__name__)
url = os.getenv("DATABASE_URL")
connection = psycopg2.connect(url)
@app.get("/")
def home():
return "hello world"
این کد نمونه ای از برنامه Flask را تنظیم می کند. سپس یک اتصال به پایگاه داده مشخص شده در رشته URL ایجاد می کند و در نهایت یک مسیر اصلی را تنظیم می کند که یک رشته را به عنوان پاسخ برمی گرداند.
ایجاد REST API فعال کردن عملیات CRUD
اکنون، REST API را بسازید که چهار عملیات CRUD را اجرا می کند.
یک جدول نمایشی ایجاد کنید
یک جدول کاربر در پایگاه داده ایجاد کنید.
در فایل app.py کد زیر را اضافه کنید.
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)
- این کد یک جدول جدید PostgreSQL به نام کاربران با دو ستون ایجاد می کند.
- از روش اتصال psycopg2 برای برقراری ارتباط با پایگاه داده استفاده می کند و یک شی مکان نما جدید با استفاده از متد connect.cursor ایجاد می کند که برای اجرای پرس و جوهای SQL استفاده می شود.
1. روش POST را تعریف کنید
مسیر پست را برای افزودن داده ایجاد کنید.
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
- رشته پرس و جو SQL یک عبارت SQL را تعریف می کند که با استفاده از روش cursor.execute برای درج یک ردیف جدید با نام کاربر در جدول کاربران در پایگاه داده اجرا می شود. شناسه کاربر تازه ایجاد شده را برمی گرداند.
- تابع create_user یک نام را به عنوان پارامتر برای ذخیره در پایگاه داده می گیرد در حالی که متد cursor.fetchone برای بازیابی شناسه کاربر جدید ایجاد شده فراخوانی می شود. در نهایت، یک فرهنگ لغت حاوی شناسه و نام کاربر تازه ایجاد شده، همراه با پیامی که نشان می دهد کاربر با موفقیت ایجاد شده است، برگردانده می شود.
2. متد GET را تعریف کنید
دو مسیر دریافت را تعریف کنید: یکی، برای بازیابی تمام داده های پایگاه داده، و دوم، برای بازیابی داده های خاص از پایگاه داده بر اساس شناسه.
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
- این اولین مسیر API درخواست های HTTP GET را برای بازیابی همه کاربران از پایگاه داده مدیریت می کند. همه کاربران را از پایگاه داده بازیابی می کند و نتایج را در قالب JSON در پاسخ برمی گرداند.
- این مسیر API دوم درخواستهای HTTP GET را برای بازیابی دادهها برای یک کاربر خاص از پایگاه داده مدیریت میکند. شناسه کاربر را به عنوان پارامتر می گیرد، داده های کاربر را از پایگاه داده بازیابی می کند و نتایج را در قالب JSON در پاسخ برمی گرداند.
3. روش PUT را تعریف کنید
مسیر put را برای به روز رسانی داده های ذخیره شده در پایگاه داده ایجاد کنید.
@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."})
- تابع update_user پارامتر شناسه کاربر را به عنوان ورودی می گیرد و از آن برای به روز رسانی نام کاربر مشخص شده در پایگاه داده استفاده می کند.
- اگر عملیات به روز رسانی موفقیت آمیز باشد، یک شی JSON با شناسه کاربر به روز شده، نام و یک پیام موفقیت آمیز در پاسخ برمی گرداند.
4. روش DELETE را تعریف کنید
برای حذف داده های ذخیره شده یک کاربر خاص در پایگاه داده، مسیر حذف را اجرا کنید.
@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."})
- این مسیر API عملکرد حذف یک کاربر خاص از پایگاه داده را بر اساس شناسه آنها کنترل می کند. اگر کاربر پیدا نشد، کد وضعیت 404 را با پیام خطا برمی گرداند. با این حال، اگر عملیات حذف موفقیت آمیز باشد، یک شی JSON را با یک پیام موفقیت آمیز در پاسخ برمی گرداند.
نوشتن API های REST با Flask
این راهنما نحوه استفاده از Flask و Postgres را برای ساختن یک CRUD REST API ساده در کنار آن، نحوه ایجاد اتصال پایگاه داده و اجرای پرس و جوهای مختلف SQL برای خواندن و نوشتن داده ها در پایگاه داده را نشان می دهد. اکنون می توانید یک REST API ساده ایجاد کنید که می تواند چهار عملیات CRUD مورد نیاز در هر برنامه وب را انجام دهد.
چه در حال ساخت یک وبلاگ ساده یا یک برنامه وب پیچیده باشید، Flask و Postgres ویژگی ها و قابلیت های قدرتمندی را ارائه می دهند که برای ایجاد یک سیستم پشتیبان قوی لازم است. از طرف دیگر، می توانید از فناوری های دیگری مانند FastAPI و MongoDB برای ساخت API های RESTful استفاده کنید.