کار با API در پایتون یکی از مهارتهای ضروری برای توسعهدهندگان است که نقش بسیار مهمی در ساخت اپلیکیشنهای مدرن ایفا میکند. APIها یا همان رابطهای برنامهنویسی کاربردی، به سیستمهای نرمافزاری این امکان را میدهند که با یکدیگر ارتباط برقرار کرده و دادهها را منتقل کنند. این قابلیت به شما این امکان را میدهد که سرویسهای مختلف را به هم متصل کنید و برنامههایی کارآمد بسازید. اگر در دنیای پایتون فعالیت میکنید، بهویژه اگر علاقه دارید با دادهها کار کنید، یادگیری نحوه استفاده از APIها مهارت بسیار مهمی است. وقتی این مهارت را به دست بیاورید، میتوانید وباپلیکیشنهای پیشرفته بسازید، به سرویسهای خارجی متصل شوید و حتی از دادههای لحظهای در پروژههای یادگیری ماشین بهره ببرید.
در این مقاله، با دنیای APIها آشنا میشویم و یاد میگیریم چگونه از آنها در پایتون استفاده کنیم. همچنین روش ساخت APIهای خودمان با FastAPI و چالشهای رایجی که ممکن است با آنها مواجه شویم را بررسی خواهیم کرد. در پایان این آموزش، شما درک خوبی از نحوه استفاده از APIها در پروژهها خواهید داشت و میتوانید بهراحتی اپلیکیشنهای خود را بهبود بخشید.
API چیست؟
API یا رابط برنامهنویسی کاربردی مثل یک پل بین برنامههای نرمافزاری مختلف عمل میکند. این امکان را به این برنامهها میدهد که با یکدیگر ارتباط برقرار کرده و اطلاعات را با هم به اشتراک بگذارند.
تصور کنید که API مثل یک گارسون در رستوران است. شما به گارسون میگویید که چه چیزی میخواهید (سفارش شما)، و او درخواست شما را به آشپزخانه منتقل میکند. آشپزخانه غذای شما را آماده کرده و گارسون آن را به شما میآورد. به همین ترتیب، شما یک درخواست به API میفرستید، و آن درخواست شما را پردازش کرده و نتایج را به شما برمیگرداند.
برای روشنتر شدن این موضوع، بیایید به برخی استفادههای واقعی اشاره کنیم: مثلاً ممکن است از یک API عمومی برای دریافت دادههای مالی جهت تحلیل بازار بورس استفاده کنید یا برای دسترسی به دادههای لحظهای آب و هوا برای مدل پیشبینی وضعیت اقلیمی. همانطور که متوجه شدهاید، کار با API در پایتون بهویژه در زمینههایی مانند دادههای بزرگ و دادههای لحظهای بسیار اهمیت دارد. در غیر این صورت، شاید نیازی به اینگونه یکپارچهسازی نداشته باشید.
کار با API در پایتون
استفاده از APIها در پایتون یک روش قدرتمند برای تعامل با سرویسهای خارجی، دریافت دادهها و ادغام قابلیتهای مختلف در اپلیکیشنهای شماست. پایتون کار با APIها را ساده و کارآمد کرده است، بهویژه با استفاده از کتابخانه requests که به شما این امکان را میدهد که درخواستهای HTTP ارسال کرده و با APIها تعامل کنید.
مقدمهای بر APIها در پایتون
در پایتون، تعامل با APIها فرآیند سادهای است، به لطف کتابخانه requests. این کتابخانه ارسال درخواستهای HTTP را ساده میکند و به شما این امکان را میدهد که با APIها ارتباط برقرار کرده و دادهها را ارسال یا دریافت کنید.
ارسال درخواستهای API در پایتون
قبل از اینکه بتوانید درخواستهای API را در پایتون ارسال کنید، باید کتابخانه requests را نصب کنید. برای این کار میتوانید از دستور زیر استفاده کنید:
pip install requests
اصول اولیه درخواستهای API
بیایید مثال مفهومیمان درباره رستوران را با آنچه که در پایتون اتفاق میافتد ترکیب کنیم. در اینجا یک توضیح ساده از مراحل این فرایند آورده شده است:
جای مناسب را پیدا کنید: ابتدا باید نقطه پایانی API را شناسایی کنید، که آدرس وب خاصی است که درخواست خود را به آن ارسال میکنید.
سفارش خود را ثبت کنید: از کتابخانه requests پایتون برای ارسال درخواست به API استفاده کنید. شما باید مشخص کنید که چه نوع عملیاتی میخواهید انجام دهید (مانند دریافت دادهها یا ارسال دادهها).
غذای خود را دریافت کنید: API پاسخی ارسال میکند که شما میتوانید آن را پردازش کرده و اطلاعات مورد نیازتان را استخراج کنید.
پیشنهاد مطالعه: API در برنامه نویسی چیست؟ راهنمای جامع برای مبتدیان
پیشنهاد مطالعه: بهترین روش های یادگیری پایتون در سال 2025 + دلایل محبوبیت، روش های یادگیری و وفرصت های شغلی
درخواستهای GET
درخواست GET رایجترین نوع درخواست HTTP است که برای دریافت دادهها از سرور استفاده میشود. این همانند درخواست اطلاعات است؛ وقتی شما آدرس URL را در مرورگر خود وارد میکنید و دکمه Enter را فشار میدهید، در واقع درخواستی از نوع GET به سرور ارسال میکنید، جایی که منبع مورد نظر را مشخص کردهاید. سرور دادههای درخواستشده را پردازش کرده و آن را در قالبی مانند JSON یا XML برای شما ارسال میکند.
import requestsresponse = requests.get('https://api.example.com/data')data = response.json()print(data)
در این مثال، ما یک درخواست GET به یک API فرضی ارسال میکنیم و پاسخ JSON آن را چاپ میکنیم. درخواستهای GET معمولاً برای دریافت دادهها بدون تغییر آنها استفاده میشوند.
درخواستهای POST
در حالی که درخواستهای GET برای دریافت دادهها استفاده میشوند، درخواستهای POST برای ارسال دستورالعملها به سرور هستند. این درخواستها معمولاً برای ایجاد منابع جدید (مثل افزودن یک کاربر) یا بهروزرسانی منابع موجود (مثل ویرایش پروفایل) استفاده میشوند.
تصور کنید که شما در حال پر کردن یک فرم آنلاین برای ثبتنام در یک سرویس هستید. وقتی دکمه ارسال را میزنید، در واقع در حال ارسال یک درخواست POST با اطلاعات خود هستید. در اینجا یک مثال ساده شده آورده شده است:
# Data to send (like user information)data = {'name': 'John Doe', 'email': 'john.doe@example.com'}# Send the data to the API (replace the URL with the actual API endpoint)response = requests.post('https://api.example.com/users', json=data)# Check if the request was successful (usually a status code of 201 for creation)if response.status_code == 201: print("User created successfully!")else: print("Error:", response.status_code)
این مثال یک دیکشنری با اطلاعات کاربر را بهعنوان دادههای JSON به API ارسال میکند. سپس وضعیت پاسخ را بررسی میکنیم تا ببینیم آیا کاربر با موفقیت ایجاد شده است یا نه.
مدیریت پاسخها
زمانی که یک درخواست API ارسال میکنید، سرور پاسخی ارسال میکند که شامل دو بخش کلیدی است:
-
کد وضعیت: یک عدد که موفقیت یا شکست درخواست را نشان میدهد. بهطور مثال، کد 200 معمولاً به معنای موفقیت است، در حالی که کد 404 نشان میدهد که منبع مورد نظر پیدا نشد.
-
دادهها: اطلاعاتی که درخواست کردهاید معمولاً در قالب JSON است. اینجا جایی است که محتوای ارزشمند قرار دارد.
در اینجا یک مثال پایتون آورده شده است:
response = requests.get('https://api.example.com/data')if response.status_code == 200: data = response.json() print(data) else: print(f"Request failed with status code {response.status_code}")
درک کدهای وضعیت API در پایتون
کدهای وضعیت API پاسخهای استانداردی هستند که سرورها برای نشان دادن نتیجه درخواست مشتری ارسال میکنند. این کدها به توسعهدهندگان کمک میکنند تا متوجه شوند آیا درخواست موفقیتآمیز بوده است، خطایی رخ داده یا نیاز به اقدام بیشتر وجود دارد.
کدهای وضعیت رایج
-
200 OK: این کد وضعیت نشان میدهد که درخواست با موفقیت انجام شده است. برای مثال، زمانی که یک درخواست GET ارسال میکنید تا دادهها را از یک API دریافت کنید، پاسخ 200 OK به این معناست که دادهها بهدرستی دریافت شدهاند.
-
404 Not Found: این کد زمانی باز میگردد که سرور نتواند منبع درخواستشده را پیدا کند. بهعنوان مثال، اگر تلاش کنید به یک نقطه پایانی که وجود ندارد دسترسی پیدا کنید، خطای 404 Not Found دریافت خواهید کرد.
-
500 Internal Server Error: این کد نشاندهنده وجود مشکلی در سمت سرور است. این یک پیام خطای عمومی است که ممکن است به دلایل مختلفی رخ دهد، مانند باگ در کد سرور یا مشکلات در پایگاهداده.
مدیریت کدهای وضعیت مختلف
مدیریت مؤثر کدهای وضعیت API در اپلیکیشنهای پایتون شما باعث میشود کد بهطور قابل پیشبینی رفتار کند و خطاها بهخوبی مدیریت شوند. اگر پاسخ 200 دریافت کردید، میتوانید دادههای برگشتی را پردازش کنید. هنگام مواجهه با خطای 404، بررسی کنید که آیا آدرس URL نقطه پایانی درست است یا خیر و در صورت لزوم، منطق جایگزین پیادهسازی کنید یا به کاربر اطلاع دهید که منبع در دسترس نیست. برای خطاهای 500، ممکن است درخواست را پس از تأخیر کوتاهی دوباره امتحان کنید یا خطا را برای بررسی بیشتر ثبت کنید. با این حال، از انجام تلاشهای مکرر خودداری کنید تا از بار اضافی روی سرور جلوگیری شود.
پیشنهاد مطالعه: فریمورک جنگو چیست؟ محبوب ترین فریمورک پایتون
پیشنهاد مطالعه: راهنمای کامل کاربردهای برنامه نویسی پایتون | از بازی سازی تا توسعه وب
ساخت APIهای پایتون
ساخت API با پایتون به شما این امکان را میدهد که رابطهای کاربری قدرتمند و کارآمد بسازید. سادگی و کتابخانههای قدرتمند پایتون، آن را به انتخابی عالی برای توسعه API تبدیل کرده است.
مقدمهای بر FastAPI
حالا که میدانید چگونه از APIها استفاده کنید، بیایید ببینیم چطور میتوانیم API خود را بسازیم. FastAPI یک فریمورک وب مدرن و سریع (با عملکرد بالا) برای ساخت API با پایتون است. همانطور که از نامش پیداست، این فریمورک بهگونهای طراحی شده که استفاده از آن آسان باشد. یکی از ویژگیهایی که من درباره FastAPI دوست دارم این است که بهطور خودکار مستندات تعاملی ایجاد میکند.
راهاندازی FastAPI
برای شروع، به پایتون و مدیر بسته آن، pip، نیاز دارید. سپس، FastAPI و Uvicorn، یک سرور ASGI با عملکرد بالا را نصب کنید:
pip install fastapi uvicorn
ساخت یک API ساده
بیایید یک API ساده بسازیم که یک پیام سلام را باز میگرداند:
from fastapi import FastAPIapp = FastAPI()@app.get("/")def read_root(): return {"Hello": "World"}
برای راهاندازی این API، دستور زیر را اجرا کنید:
uvicorn main:app --reload
این دستور سرور Uvicorn را راهاندازی میکند و API شما را در آدرس http://127.0.0.1:8000 ارائه میدهد. با دسترسی به این URL در مرورگر وب، پاسخ {"Hello": "World"} را خواهید دید.
ویژگیهای پیشرفته FastAPI
FastAPI فقط به ایجاد APIهای ساده محدود نمیشود؛ بلکه ویژگیهای پیشرفتهای را ارائه میدهد که آن را برای برنامههای پیچیده و با عملکرد بالا مناسب میکند. در اینجا برخی از قابلیتهای کلیدی FastAPI آمده است:
پارامترهای کوئری
در FastAPI، افزودن و مدیریت پارامترهای کوئری ساده است، بهطوریکه به راحتی از ویژگیهای تایپینگ پایتون استفاده میشود. پارامترهای کوئری بخشی از URL هستند و برای ارسال دادههای اختیاری به نقطه پایانی API استفاده میشوند، معمولاً برای فیلتر کردن یا تغییر دادههای برگشتی.
افزودن پارامترهای کوئری
برای افزودن یک پارامتر کوئری در FastAPI، کافی است آن را بهعنوان یک آرگومان تابع در تابع عملیات مسیر خود تعریف کنید. اگر پارامتر اختیاری باشد، میتوانید یک مقدار پیشفرض مانند None به آن اختصاص دهید. برای مثال، فرض کنید که یک نقطه پایانی دارید که اقلام را از یک پایگاهداده بازیابی میکند. شما میخواهید به کاربران اجازه دهید تا اقلام را با استفاده از یک عبارت جستجو فیلتر کنند:
app = FastAPI()@app.get("/items/")def read_items(q: str = None): if q: return {"items": ["Item 1", "Item 2", "Item 3"], "query": q} return {"items": ["Item 1", "Item 2", "Item 3"]}
در این مثال، q یک پارامتر کوئری اختیاری است. اگر مقداری برای q وارد کنیم، نتایج بر اساس آن فیلتر میشوند. اگر q وارد نشود، نقطه پایانی تمام اقلام را باز میگرداند.
مدیریت پارامترهای کوئری
FastAPI بهطور خودکار پارامترهای کوئری را مدیریت میکند، از جمله اعتبارسنجی نوع داده و تبدیل آنها. بهعنوان مثال، اگر یک پارامتر کوئری را بهعنوان یک عدد صحیح مشخص کنید، FastAPI اعتبارسنجی میکند که ورودی واقعاً عدد صحیح است. اگر ورودی با نوع داده مورد انتظار مطابقت نداشته باشد، FastAPI یک پیام خطای واضح برمیگرداند.
در اینجا مثالی با یک پارامتر کوئری الزامی و اعتبارسنجی نوع داده آمده است:
@app.get("/items/{item_id}")def read_item(item_id: int, q: str = None): return {"item_id": item_id, "query": q}
در این حالت، item_id یک پارامتر مسیر است و q یک پارامتر کوئری اختیاری است. FastAPI اطمینان حاصل میکند که item_id یک عدد صحیح باشد و در صورتی که q وارد شود، آن را پردازش میکند.
مدیریت متدهای مختلف HTTP
پیادهسازی متدهای مختلف HTTP مانند GET، POST، PUT و DELETE ساده است و مشابه نحوه تعریف مسیرها در سایر فریمورکها میباشد. هر متد به نوع خاصی از عملیات مربوط است، مانند دریافت دادهها (GET)، ایجاد دادههای جدید (POST)، بهروزرسانی دادههای موجود (PUT) یا حذف دادهها (DELETE).
متد GET
متد GET برای بازیابی دادهها از سرور استفاده میشود. در FastAPI، شما یک نقطه پایانی GET را به این صورت تعریف میکنید:
@app.get("/items/")def get_items(): return {"items": ["Item 1", "Item 2", "Item 3"]}
متد POST
متد POST برای ایجاد دادههای جدید استفاده میشود. شما میتوانید یک نقطه پایانی POST تعریف کنید و دادهها را در بدنه درخواست دریافت کنید:
@app.post("/items/")def create_item(item: dict): return {"item": item}
متد PUT
متد PUT برای بهروزرسانی دادههای موجود استفاده میشود. این متد معمولاً نیاز به یک شناسه و دادههای جدید دارد:
@app.put("/items/{item_id}")def update_item(item_id: int, item: dict): return {"item_id": item_id, "updated_item": item}
متد DELETE
متد DELETE برای حذف دادهها استفاده میشود. در FastAPI، یک نقطه پایانی DELETE به صورت زیر تعریف میشود:
@app.delete("/items/{item_id}")def delete_item(item_id: int): return {"message": f"Item {item_id} deleted"}
پیشنهاد مطالعه: 7 کتابخانه قدرتمند پایتون برای هک که همین حالا باید امتحانش کنید
احراز هویت و امنیت در کار با API در پایتون
FastAPI چندین مکانیزم برای پیادهسازی احراز هویت و امنیت ارائه میدهد:
- HTTP Basic Auth: یک روش ساده، اما به دلیل مشکلات امنیتی معمولاً برای محیطهای تولید توصیه نمیشود.
- API Keys: یک گزینه امنتر که شامل تولید کلیدهای منحصر به فرد برای مشتریان است.
- OAuth 2.0: یک استاندارد پیچیده اما قدرتمند برای مجوزدهی که بهطور معمول برای ادغامهای شخص ثالث استفاده میشود.
- JSON Web Tokens (JWT): رویکردی محبوب برای نمایندگی ادعاها بهصورت امن بین دو طرف.
ملاحظات عملکرد API در پایتون
در کار با API در پایتون، کارایی درخواستهای API تأثیر زیادی بر عملکرد کلی برنامه شما دارد. روشهای مختلف درخواست API پیچیدگیهای زمانی متفاوتی دارند:
- درخواستهای GET: معمولاً سریع هستند زیرا برای بازیابی دادهها طراحی شدهاند بدون اینکه تغییرات در سرور ایجاد کنند.
- درخواستهای POST: اینها ممکن است زمان بیشتری بگیرند زیرا شامل ارسال دادهها به سرور برای پردازش یا ذخیرهسازی هستند.
- درخواستهای PUT و DELETE: پیچیدگی زمانی آنها میتواند بسته به زمان پاسخ سرور و عملیاتی که انجام میدهند متفاوت باشد.
بهینهسازی استفاده از API در پایتون
برای بهینهسازی عملکرد درخواستهای API در پایتون، میتوانید از راهکارهایی مانند درخواستهای گروهی، کش کردن پاسخها، استفاده از درخواستهای غیرهمزمان، و استخر اتصالات استفاده کنید تا از زمانهای انتظار کاسته شود و عملکرد بهبود یابد.
خطاهای رایج در کار با API در پایتون و نحوه مدیریت آنها
در کار با API، ممکن است با مشکلات مختلفی مواجه شوید که میتوانند عملکرد برنامه شما را مختل کنند. دو مشکل رایج شامل خطاهای تایماوت و محدودیت نرخ هستند که میتوان با استراتژیهایی مانند افزایش مدت زمان تایماوت، استفاده از مکانیزمهای retry با backoff نمایی و بهینهسازی بار درخواستها به آنها رسیدگی کرد.
نتیجهگیری
کار با API در پایتون یک مهارت ضروری برای هر توسعهدهنده پایتون است که میخواهد در دنیای مدرن برنامهنویسی پیشرفت کند. یادگیری نحوه تعامل با APIها، مدیریت خطاها و بهینهسازی عملکرد آنها میتواند تأثیر زیادی در توسعه برنامههای کارآمد و مقیاسپذیر داشته باشد. با استفاده از فریمورکهای قدرتمند مانند FastAPI، شما میتوانید به سرعت و به صورت مؤثر APIهای پیچیده بسازید و به راحتی از دادهها استفاده کنید.
امیدوارم این مقاله به شما کمک کرده باشد تا درک بهتری از کار با API در پایتون پیدا کنید. اگر سوالی دارید یا تجربهای در این زمینه دارید که میخواهید به اشتراک بگذارید، حتماً در بخش نظرات بنویسید. همچنین اگر این مقاله برای شما مفید بود، لطفاً آن را با دوستان و همکاران خود به اشتراک بگذارید تا دیگران نیز از این مطالب بهرهمند شوند.
برای درج نظر می بایست وارد حساب کاربری خود شوید