نحوه ایجاد یک API REST با Flask در سرور مجازی اوبونتو Ubuntu
۲۴ بهمن ۱۴۰۳
در توسعه وب، API های RESTful یکی از رایج ترین روش ها برای برقراری ارتباط بین برنامههای مختلف محسوب میشود. فریمورک Flask به عنوان یک ابزار سبک و قدرتمند در زبان پایتون، امکان پیاده سازی سریع و آسان این نوع API ها را فراهم میکند.
در ادامه مطلب، نحوه ایجاد یک REST API ساده با استفاده از Flask بررسی شده است. از راهاندازی محیط گرفته تا پیادهسازی مسیر های مختلف برای دریافت، ایجاد و بهروز رسانی و حذف دادهها، تمام مراحل به صورت گام به گام بررسی و معرفی شدهاند. در پایان این مطلب شما یک API کامل خواهد داشت که میتوانید آن را گسترش دهید و در پروژههای واقعی به کار ببرید.
در ادامه بخوانید:
- پیش نیاز ها
- راه اندازی محیط Flask
- ایجاد یک برنامه Flask
- ایجاد مسیر های RESTful
- اجرای API و تست آن
- جمع بندی
پیش نیاز ها
برای راه اندازی و اجرای یک REST API در Ubuntu، نیاز دارید شرایطی که در ادامه ارائه شده است فراهم باشد.
- سرور Ubuntu با یک کاربر غیر root که دسترسی sudo داشته باشد و یک فایروال فعال برای امنیت بیشتر تنظیم شده باشد.
- آشنایی با خط فرمان لینوکس برای اجرای دستورات و مدیریت بستهها، اگر با دستورات لینوکس آشنایی ندارید، پیشنهاد میشود ابتدا یک مرور کلی بر مقدمات خط فرمان لینوکس داشته باشید.
- دانش پایهای از برنامهنویسی پایتون.
- نصب Python 3.7 یا نسخههای بالاتر روی سیستم Ubuntu
راه اندازی محیط Flask
Ubuntu 24.04 به صورت پیش فرض دارای Python3 است، اما همیشه بهتر است قبل از شروع، مطمئن شوید که نسخه مناسب روی سیستم شما نصب است. برای بررسی این موضوع کافی است ترمینال را باز کنید و دستور زیر را اجرا کنید.
root@ubuntu:~# python3 --version
Python 3.12.3
اگر Python3 از قبل نصب باشد خروجی مشابه خروجی زیر را دریافت میکنید.
root@ubuntu:~# sudo apt install python3
برای مدیریت بسته های پایتون، نیاز به pip دارید. اگر روی سیستم شما نصب نیست، میتوانید آن را با این دستور اضافه کنید.
root@ubuntu:~# sudo apt install python3-pip
برای نصب Flask از pip استفاده میکنیم. پیشنهاد میشود این کا را در یک محیط مجازی (virtual environment) انجام دهید تا از تداخل با سایر پکیج ها جلوگیری شود.
root@ubuntu:~# python3 -m venv myprojectenv
root@ubuntu:~# source myprojectenv/bin/activate
root@ubuntu:~# pip install Flask
در ادامه بخوانید: API چیست؟

ایجاد یک برنامه Flask
مرجله بعد نوشتن کد پایتون برای برنامه Flask است. برای ایجاد اسکریپت جدید، به دایرکتوری مورد نظر خود بروید.
root@ubuntu:~# cd ~/path-to-your-script-directory
پس از ورود به دایرکتوری، یک فایل پایتون جدید به نام app.py
ایجاد کنید و Flask را درآن ایمپورت import کنید. سپس، یک برنامه Flask را راهاندازی کرده و یک مسیر (route) ساده ایجاد کنید.
root@ubuntu:~# nano app.py
این دستور یک ویرایشگر متنی خالی را باز میکند؛ منطق خود را در اینجا بنویسید یا کد زیر را کپی کنید.
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
# In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]
همچنین بخوانید: هاست رایگان Flask
ایجاد مسیر های RESTful
در این بخش، ما مسیر هایی (routes) را در برنامه Flask خود تعریف خواهیم کرد که با اقدامات مختلفی که یک کاربر میتواند روی API انجام دهد، مطابقت دارند. هر مسیر یک متد خاص HTTP را مدیریت خواهد کرد.
GET
, POST
, PUT
وDELETE
این متدها با چهار عملیات اصلی ذخیره سازی پایدار مطابقت دارند که معموا با نام CRUD (Create, Read, Update, Delete) شناخته میشود.
مسیر های زیر را به فایل app.py
پایتون خود اضافه کنید.
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.route('/')
def hello_world():
return jsonify(message="Hello, World!")
# In-memory data store
items = [{"id": 1, "name": "This is item 1"}, {"id": 2, "name": "This is item 2"}]
# GET request: Retrieve all items
@app.route('/api/items', methods=['GET'])
def get_items():
return jsonify(items)
# GET request: Retrieve a specific item by ID
@app.route('/api/items/<int:item_id>', methods=['GET'])
def get_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Item not found"}), 404
return jsonify(item)
# POST request: Create a new item
@app.route('/api/items', methods=['POST'])
def create_item():
new_item = {"id": len(items) + 1, "name": request.json.get('name')}
items.append(new_item)
return jsonify(new_item), 201
# PUT request: Update an existing item
@app.route('/api/items/<int:item_id>', methods=['PUT'])
def update_item(item_id):
item = next((item for item in items if item["id"] == item_id), None)
if item is None:
return jsonify({"error": "Item not found"}), 404
item['name'] = request.json.get('name', item['name'])
return jsonify(item)
# DELETE request: Delete an item
@app.route('/api/items/<int:item_id>', methods=['DELETE'])
def delete_item(item_id):
global items
items = [item for item in items if item["id"] != item_id]
return '', 204
if __name__ == "__main__":
app.run(debug=True)
در ادامه هر عملکرد هر تابع بررسی شده است.
- وارد کردن Flask: کد، اجزای لازم را از Flask وارد میکند:
Flask
،jsonify
وrequest
. - ذخیرهسازی دادهها در حافظه:
items
یک لیست ساده از دیکشنریها است که به عنوان یک ذخیرهسازی موقت داده برای API عمل میکند.
هر آیتم دارای یک شناسه (ID) و یک نام (name) است. - GET /api/items: هنگامی که یک درخواست GET به
/api/items
ارسال میشود، سرور لیستی از تمام آیتمهای موجود در مخزن داده را برمیگرداند. این متد برای بازیابی همه منابع در یک مجموعه مفید است. - POST /api/items: یک درخواست POST به
/api/items
به کلاینت اجازه میدهد یک آیتم جدید ایجاد کند. سرور انتظار دارد که یک شیء JSON حاوی جزئیات آیتم جدید در بدنه درخواست باشد. پس از ایجاد آیتم، سرور با آیتم جدید ایجادشده و کد وضعیت201 Created
پاسخ میدهد. - PUT /api/items/int:item_id: درخواست PUT به
/api/items/<item_id>
برای بهروزرسانی یک آیتم موجود با شناسه مشخص (item_id
) استفاده میشود. کلاینت اطلاعات بهروزرسانیشده را در بدنه درخواست ارسال میکند و سرور آیتم موجود را اصلاح میکند. اگر آیتم پیدا نشود، سرور خطای404 Not Found
بازمیگرداند. - DELETE /api/items/int:item_id: درخواست DELETE به
/api/items/<item_id>
آیتمی را که دارای شناسه مشخص است، از مخزن داده حذف میکند. اگر آیتم با موفقیت حذف شود، سرور با کد وضعیت204 No Content
پاسخ میدهد که نشان میدهد حذف انجام شده و محتوای دیگری برای بازگرداندن وجود ندارد. - اجرای برنامه: بلوک
if __name__ == "__main__":
تضمین میکند که برنامه Flask تنها زمانی اجرا شود که اسکریپت بهطور مستقیم اجرا شود.
اجرای API و تست آن
برای اجرای سرور Flask از دستور زیر استفاده کنید.
root@ubuntu:~# python3 app.py
پس از اجرای دستور خروجی زیر را مشاهده خواهید کرد.
Output
* Serving Flask app 'app'
* Debug mode: on
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on http://127.0.0.1:5000
Press CTRL+C to quit
* Restarting with stat
* Debugger is active!
* Debugger PIN: 837-877-972
از خروجی بالا مشخص است که سرور Flask در حال اجرا بوده و روی آدرس http://127.0.0.1
و پورت 5000
در حال گوش دادن است.
اکنون میتوانید اندپوینتها (Endpoints) را با استفاده از curl
، Postman یا هر کلاینت HTTP دیگری تست کنید.
در این ادامه از curl
برای ارسال درخواستهای HTTP استفاده شده است.
از هاست ابری Flask لیارا استفاده کنید و API خود را بدون دردسر اجرا کنید!
یک ترمینال جدید باز کنید و دستورات زیر را یکی یکی اجرا کنید.
GET: curl http://127.0.0.1:5000/api/items
POST: curl -X POST -H "Content-Type: application/json" -d "{"name": "This is item 3"}" http://127.0.0.1:5000/api/items
PUT: curl -X PUT -H "Content-Type: application/json" -d "{"name": "This is updated item 1"}" http://127.0.0.1:5000/api/items/1
DELETE: curl -X DELETE http://127.0.0.1:5000/api/items/1
1. ارسال درخواست GET برای دریافت همه آیتم ها
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
خروجی:
Output[
{
"id": 1,
"name": "This is item 1"
},
{
"id": 2,
"name": "This is item 2"
}
]
سرور لیستی از تمام آیتم های موجود را برمیگرداند.
2. ارسال درخواست POST برای افزودن یک آیتم جدید
root@ubuntu:~# curl -X POST -H "Content-Type: application/json" -d '{"name": "This is item 3"}' http://127.0.0.1:5000/api/items
خروجی:
Output{
"id": 3,
"name": "This is item 3"
}
سرور آیتم جدید را اضافه کرده و آن را برمیگرداند.
نکته: در کنسولی که سرور Flask در آن اجرا شده است، میتوانید تمام درخواستهای HTTP و کدهای وضعیت آنها را مشاهده کنید.
127.0.0.1 - - [23/Aug/2024 06:57:27] "GET /api/items HTTP/1.1" 200 -
127.0.0.1 - - [23/Aug/2024 06:59:56] "POST /api/items HTTP/1.1" 201 -
این روش برای نظارت، اشکالزدایی و رفع مشکلات سرور بسیار مفید است.
3. ارسال درخواست PUT برای بهروز رسانی یک آیتم
root@ubuntu:~# curl -X PUT -H "Content-Type: application/json" -d '{"name": "This is updated item 1"}' http://127.0.0.1:5000/api/items/1
خروجی:
Output{
"id": 1,
"name": "This is updated item 1"
}
آیتم با id=1
بهروز رسانی شد.
برای بررسی تغییرات، درخواست GET
را اجرا کنید.
root@ubuntu:~# curl http://127.0.0.1:5000/api/items/1
خروجی:
Output{
"id": 1,
"name": "This is updated item 1"
}
4. ارسال درخواست DELETE برای حدف یک آیتم
root@ubuntu:~# curl -X DELETE http://127.0.0.1:5000/api/items/1
این درخواست آیتم را از مخزن داده حذف میکند.
برای اطمینان ار حذف آیتم، دوباره درخواست GET
را اجرا کنید.
root@ubuntu:~# curl http://127.0.0.1:5000/api/items
خروجی:
Output[
{
"id": 2,
"name": "This is item 2"
},
{
"id": 3,
"name": "This is item 3"
}
]
آیتم 1 دیگر در لسیت وجود ندارد و به صورت دائمی حذف شده است.

جمع بندی
در این مطلب شما یک برنامه REST API پایه با استفاده از Flask آموزش داده شد. اکنون میتوانید این API را با مسیر های اضافی گسترش دهید، آن را با یک پایگاه داده ادغام کنید یا در یک پلتفرم ابری مانند لیارا مستقر کنید. Flask ابزاری قدرتمند برای ساخت سریع و کارآمدAPI ها است و با این اصول اولیه، آمده هستید تا برنامه های پیچیده تری بسازید.