حول المحتوى:
شرح واضح خطوة بخطوة لتحويل سكربت بايثون بسيط إلى API جاهز للاستخدام، مع شرح المسارات، المعاملات، والتشغيل.
الكلمات المفتاحية الرئيسية: تحويل سكربت FastAPI، تحويل سكربت بايثون إلى API، FastAPI للمبتدئين
في كثير من الأحيان نكتب سكربتات بايثون صغيرة لحساب شيء ما، معالجة ملف، أو تنفيذ مهمة معينة، ثم نكتشف أننا نريد استخدامها من أماكن أخرى: من موقع ويب، من تطبيق موبايل، أو حتى من سكربتات أخرى على سيرفرات مختلفة. هنا تأتي فكرة تحويل السكربت إلى API.
في هذا الكورس المصغر سنشرح خطوة بخطوة كيفية تحويل أي سكربت بايثون بسيط إلى API باستخدام FastAPI، مع توضيح المسارات (Endpoints)، المعاملات (Parameters)، وطريقة التشغيل محلياً. الهدف أن تخرج في النهاية بقالب جاهز تقدر تعيد استخدامه في أي مشروع.
مكتبة FastAPI أصبحت من أشهر الأطر في بايثون لبناء RESTful APIs لعدة أسباب:
إن كنت مهتماً ببناء REST APIs متقدمة باستخدام FastAPI يمكن الرجوع لاحقاً إلى هذا الشرح المفصل: بناء RESTful APIs باستخدام FastAPI.
قبل أن نبدأ في تحويل السكربت، تأكد من:
لو ما زلت في بداية طريقك مع بايثون، يمكنك الرجوع لمسار واضح للتعلم من هنا: مسار تعلم لغة بايثون من الصفر خطوة بخطوة.
لنبدأ بمثال بسيط، نفترض أن لدينا سكربت بايثون اسمه calculator.py يقوم بعملية جمع عددين:
# الملف: calculator.py
def add_numbers(a, b):
return a + b
if __name__ == "__main__":
x = float(input("أدخل الرقم الأول: "))
y = float(input("أدخل الرقم الثاني: "))
result = add_numbers(x, y)
print("النتيجة:", result)
هذا السكربت يعمل من الـ Terminal فقط، يسأل المستخدم عن الأرقام ويطبع النتيجة. هدفنا الآن:
add_numbers متاحة كـ API Endpoint.أنشئ مجلد جديد مثلاً:
mkdir fastapi-calculator
cd fastapi-calculator
يفضل إنشاء بيئة عمل افتراضية (اختياري لكنه مستحسن):
python -m venv venv
# تفعيلها على ويندوز
venv\Scripts\activate
# تفعيلها على لينكس / ماك
source venv/bin/activate
قم بتنصيب الحزم المطلوبة:
pip install fastapi uvicorn
مكتبة FastAPI لإنشاء الـ API، وUvicorn هو خادم ASGI لتشغيل التطبيق.
سننشئ الآن ملف جديد باسم main.py في نفس المجلد:
# الملف: main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "أهلاً بك في API التجريبية باستخدام FastAPI"}
هذا أبسط تطبيق FastAPI: فيه مسار واحد / يعيد رسالة ترحيبية.
لتشغيل التطبيق، استخدم الأمر التالي داخل مجلد المشروع:
uvicorn main:app --reload
main هو اسم ملف بايثون (بدون امتداد .py).app هو اسم كائن FastAPI الذي أنشأناه.--reload تجعل السيرفر يعيد التشغيل تلقائياً عند تعديل الكود.الآن افتح المتصفح على العنوان:
http://127.0.0.1:8000/
سترى رسالة JSON مثل:
{"message": "أهلاً بك في API التجريبية باستخدام FastAPI"}
كما يمكنك رؤية التوثيق التلقائي للـ API من خلال:
الآن نريد نقل دالة add_numbers من calculator.py إلى مشروع FastAPI، أو على الأقل استيرادها.
ضع ملف calculator.py بجانب main.py في نفس المجلد، واحذف الجزء الخاص بـ input و print لأننا سنستبدله بـ API:
# الملف: calculator.py
def add_numbers(a: float, b: float) -> float:
return a + b
إضافة الـ Type Hints (float) مفيدة جداً مع FastAPI لأنها تساعد في إنشاء توثيق واضح وفي التحقق من المدخلات.
نعدّل ملف main.py ليصبح كالتالي:
# الملف: main.py
from fastapi import FastAPI
from calculator import add_numbers # استيراد الدالة من السكربت الأصلي
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "أهلاً بك في API التجريبية باستخدام FastAPI"}
@app.get("/add")
def add(a: float, b: float):
result = add_numbers(a, b)
return {"a": a, "b": b, "result": result}
ما الذي حدث هنا؟
/add.add هما a و b من نوع float.a و b هما Query Parameters في الرابط.مع تشغيل السيرفر كما في السابق، افتح في المتصفح:
http://127.0.0.1:8000/add?a=10&b=20
ستحصل على استجابة JSON مثل:
{
"a": 10.0,
"b": 20.0,
"result": 30.0
}
بهذا الشكل نكون حولنا دالة بسيطة في سكربت بايثون إلى API حقيقية قابلة للاستخدام من مشاريع أخرى.
عند تحويل سكربت FastAPI من مجرد كود داخلي إلى API، تحتاج أن تختار كيف يستقبل الـ API البيانات. FastAPI يوفر عدة طرق:
مثل المثال السابق: /add?a=10&b=20. هذه الطريقة مناسبة:
يمكنك جعل الأرقام جزءاً من الرابط، مثل:
@app.get("/add/{a}/{b}")
def add_path(a: float, b: float):
return {"a": a, "b": b, "result": add_numbers(a, b)}
ثم تجربته هكذا:
http://127.0.0.1:8000/add/10/20
عندما يكون السكربت يستقبل بيانات معقدة (قوائم، قواميس، إعدادات كثيرة)، الأفضل إرسالها في الـ Body بصيغة JSON.
مثال: سنعرّف نموذج بيانات باستخدام Pydantic:
pip install pydantic
from fastapi import FastAPI
from pydantic import BaseModel
from calculator import add_numbers
app = FastAPI()
class AddRequest(BaseModel):
a: float
b: float
@app.post("/add-body")
def add_body(data: AddRequest):
result = add_numbers(data.a, data.b)
return {"a": data.a, "b": data.b, "result": result}
هنا نستخدم POST بدلاً من GET، ونرسل JSON مثل:
{
"a": 10,
"b": 20
}
يمكنك تجربة ذلك بسهولة من صفحة Swagger UI على: /docs حيث يوفر FastAPI واجهة تفاعلية لإرسال الطلبات.
في الواقع، السكربتات غالباً لا تتوقف عند عملية جمع بسيطة. قد يكون لديك سكربت:
المبدأ لا يتغير: أهم شيء أن تعزل منطق العمل في دوال واضحة، ثم تناديها من مسارات FastAPI. على سبيل المثال، تحويل نموذج تعلم آلي إلى API تم شرحه بشكل موسع هنا: تحويل نماذج التعلم الآلي إلى API قابل للنشر باستخدام FastAPI.
افترض أن لديك سكربت يحسب طول نص معين:
# text_utils.py
def text_length(text: str) -> int:
return len(text)
يمكنك تحويله إلى API بهذه البساطة:
# main.py
from fastapi import FastAPI
from pydantic import BaseModel
from text_utils import text_length
app = FastAPI()
class TextRequest(BaseModel):
text: str
@app.post("/text-length")
def get_text_length(data: TextRequest):
length = text_length(data.text)
return {"text": data.text, "length": length}
أحياناً تريد الاحتفاظ بإمكانية تشغيل السكربت من سطر الأوامر، بالإضافة إلى الـ API. يمكنك فعل ذلك بوضع منطق الدوال في ملف، وتشغيل كل من:
main.py).cli.py) يستدعي نفس الدوال.مثال سريع:
# calculator.py
def add_numbers(a: float, b: float) -> float:
return a + b
# cli.py
from calculator import add_numbers
if __name__ == "__main__":
x = float(input("أدخل الرقم الأول: "))
y = float(input("أدخل الرقم الثاني: "))
print("النتيجة:", add_numbers(x, y))
# main.py (FastAPI)
from fastapi import FastAPI
from calculator import add_numbers
app = FastAPI()
@app.get("/add")
def add(a: float, b: float):
return {"result": add_numbers(a, b)}
بهذا الشكل تفصل بين:
في هذا الكورس المصغر ركزنا على كيفية تحويل سكربت FastAPI خطوة بخطوة للتشغيل محلياً. لكن غالباً سترغب لاحقاً في نشر الـ API على:
يمكنك الانتقال لاحقاً لشرح مفصل عن نشر مشاريع Django و FastAPI على VPS باستخدام Docker Compose من هنا: نشر مشاريع Django و FastAPI على VPS باستخدام Docker Compose خطوة بخطوة.
/docs.HTTPException من FastAPI لإرجاع أكواد أخطاء مناسبة (400، 404، 500...).تحويل أي سكربت بايثون إلى API باستخدام FastAPI ليس معقداً كما يبدو. الخطوات الأساسية:
main.py وأنشئ كائن app = FastAPI().@app.get أو @app.post… إلخ.بعد إتقان هذه الخطوات البسيطة يمكنك تحويل أغلب سكربتاتك الصغيرة إلى خدمات ويب قابلة للاستخدام في أي مشروع آخر، سواء كان موقع، تطبيق موبايل، أو حتى أنظمة داخلية بين السيرفرات.
إن كنت تريد خطوة إضافية بعد هذا الكورس المصغر، يمكنك استكشاف بناء تطبيق ويب كامل باستخدام نفس التقنية في مقال: بناء أول موقع باستخدام FastAPI.
بهذا تكون قد امتلكت أساس قوي لتجاوز مرحلة السكربتات المحلية إلى عالم الـ APIs والخدمات القابلة للنشر.
شرح واضح خطوة بخطوة لتحويل سكربت بايثون بسيط إلى API جاهز للاستخدام، مع شرح المسارات، المعاملات، والتشغيل.
مساحة اعلانية