در ادامهی یادگیری ساخت DAGهای پارامتریشده (مرحلهی قبل)، حالا وقت آن است که این دگها را خودکار و بیرون از UI ایرفلو اجرا کنیم.
استفاده از API برای فراخوانی DAGها مزایای زیر را به همراه دارد:
در نسخه ۳ ایرفلو، برای فراخوانی APIها نیاز به توکن JWT دارید. برای دریافت این توکن، میتوانید از دستور زیر استفاده کنید:
curl -X POST http://localhost:8080/auth/token \
-H "Content-Type: application/json" \
-d '{
"username": "airflow",
"password": "airflow"
}'
در پاسخ، توکن JWT دریافت خواهید کرد که باید در هدر درخواستهای بعدی استفاده شود. (این نام کاربری و پسورد در فایل داکر کامپوز تنظیم شده است)
logical_date منحصر به فردبرای جلوگیری از خطاهای تکرار، هر فراخوانی باید دارای logical_date منحصر به فرد باشد. در ادامه، نمونهای از درخواست cURL برای فراخوانی یک DAG با پارامترهای زمان اجرا آورده شده است:
curl -X POST http://localhost:8080/api/v2/dags/your_dag_id/dagRuns \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <JWT-TOKEN>" \
-d '{
"logical_date": "2025-09-14T12:00:00+00:00",
"conf": {
"max_tx_number": 10,
"start_date": "2025-09-14T00:00:00+00:00",
"end_date": "2025-09-14T23:59:59+00:00"
}
}'
در این مثال:
logical_date: زمان اجرای DAG به فرمت ISO 8601.conf: پارامترهای ورودی برای DAG.import requests
import json
from datetime import datetime, timezone
ENDPOINT_URL = "http://localhost:8080"
JWT_TOKEN = "<JWT-TOKEN>"
DAG_ID = "your_dag_id"
conf = {
"max_tx_number": 10,
"start_date": "2025-09-14T00:00:00+00:00",
"end_date": "2025-09-14T23:59:59+00:00"
}
logical_date = datetime.now(timezone.utc).isoformat()
response = requests.post(
f"{ENDPOINT_URL}/api/v2/dags/{DAG_ID}/dagRuns",
headers={
"Content-Type": "application/json",
"Authorization": f"Bearer {JWT_TOKEN}"
},
data=json.dumps({"logical_date": logical_date, "conf": conf})
)
print(response.status_code)
print(response.json())
در نسخه ۳ ایرفلو، اندپوینتهای API به /api/v2 تغییر یافتهاند. لیست کامل آنها را در مستندات رسمی ایرفلو می توانید ببینید. در ادامه، جدول اندپوینتهای اصلی آورده شده است:
| عملیات | اندپوینت API | توضیحات |
|---|---|---|
| دریافت لیست DAGها | /api/v2/dags | دریافت اطلاعات تمامی DAGها |
| دریافت اطلاعات یک DAG | /api/v2/dags/{dag_id} | دریافت اطلاعات یک DAG خاص |
| دریافت وضعیت DAG Run | /api/v2/dags/{dag_id}/dagRuns/{dag_run_id} | دریافت وضعیت یک اجرای خاص از یک DAG |
| دریافت لیست Taskها | /api/v2/dags/{dag_id}/tasks | دریافت لیست تمامی تسکهای یک DAG |
| دریافت اطلاعات یک Task | /api/v2/dags/{dag_id}/tasks/{task_id} | دریافت اطلاعات یک تسک خاص از یک DAG |
| دریافت لیست متغیرها | /api/v2/variables | دریافت لیست تمامی متغیرهای تعریفشده در ایرفلو |
| دریافت اطلاعات یک متغیر | /api/v2/variables/{variable_name} | دریافت اطلاعات یک متغیر خاص |
| ایجاد یک DAG Run جدید | /api/v2/dags/{dag_id}/dagRuns | ایجاد یک اجرای جدید برای یک DAG |
| دریافت لیست اتصالها | /api/v2/connections | دریافت لیست تمامی اتصالهای تعریفشده در ایرفلو |
| دریافت اطلاعات یک اتصال | /api/v2/connections/{connection_id} | دریافت اطلاعات یک اتصال خاص |
logical_date منحصر به فرد: برای جلوگیری از خطاهای تکرار در فراخوانی DAG.conf: ارسال پارامترهای ورودی به DAG از طریق فیلد conf.کارگاه عملی دوم جلسه پنجم به فراخوانی یک دگ پارامتر دار از طریق خط فرمان و به کمک API ایرفلو میپردازد و مثالی که در بالا توضیح داده شده است را می توانید به صورت عملی در فیلم آموزشی زیر مشاهده کنید.
نکته : اگر فیلم در قسمت زیر قابل مشاهده نیست، مطمئن شوید که با آی پی ایران متصل شده اید یا یک اینترنت پروایدر دیگر را امتحان کنید .