فصل ۲۰: کار حرفهای با API و وبسرویس در پایتون

مقدمه: API دقیقا یعنی چی؟
API واسطهایه که دو برنامه باهم صحبت کنن، بدون اینکه طرف مقابل جزئیات داخلی رو بدونه.
ما معمولا با وبسرویسها (REST API) سروکار داریم. دنیای اینترنت پر از API؛
مثلا:
- گرفتن نرخ ارز
- اطلاعات آب و هوا
- دریافت پروفایل کاربر
- ارسال پیام به ربات تلگرام
- …
چطوری؟ با درخواستهای HTTP (مثل GET, POST, PUT, DELETE و …)
مرحله ۱: راهاندازی requests
requests سادهترین و محبوبترین کتابخانه برای کار با HTTP در پایتونه.
نصب:
pip install requests
مرحله ۲: ارسال یک درخواست GET
فرض کن یک API هست که اطلاعات یک شهر رو میده:
import requests
url = "https://api.open-meteo.com/v1/forecast?latitude=35.6892&longitude=51.3890¤t_weather=true"
response = requests.get(url)
print(response.status_code) # 200 یعنی اوکی
print(response.text) # داده خام (معمولا JSON)
مرحله ۳: تبدیل داده خام به دیکشنری پایتون (parse JSON)
دادههای API اغلب در قالب JSON میان (شبیه دیکشنری):
weather = response.json() # الان یه dict داریم
print(weather["current_weather"]["temperature"]) # دسترسی به کلید خاص
مرحله ۴: ارسال داده به API — متد POST
اگر بخوایم تو یک سایت ثبتنام کنیم یا اطلاعات جدید بفرستیم، باید از متد POST استفاده کنیم.
مثال:
import requests
payload = {
"username": "aliakbar",
"password": "123456"
}
response = requests.post("https://httpbin.org/post", json=payload)
print(response.status_code)
print(response.json())
کلید json= باعث میشود خود requests دیتا را به JSON تبدیل کند و با header مناسب ارسال کند.
مرحله ۵: ارسال headers (برای احراز هویت یا سایر تنظیمات)
خیلی از APIها، به توکن نیاز دارند:
headers = {
"Authorization": "Bearer 1234567890abcdef"
}
response = requests.get("https://some-site.com/api/me", headers=headers)
print(response.json())
یا گاهی باید نوع فرمت داده رو مشخص کنی:
headers = {
"Content-Type": "application/json"
}
مرحله ۶: مدیریت خطاهای API
همیشه مطمئن شو درخواستت موفق بوده!
if response.status_code == 200:
print("👍 موفق")
else:
print("خطا:", response.status_code)
print(response.text)
یا با try-except:
try:
response = requests.get(url, timeout=5)
response.raise_for_status() # اگر خطایی باشه، Exception میده
data = response.json()
except Exception as e:
print("Error:", e)
مرحله ۷: کار با دادههای واقعی و تکرار نتایج
مثال با دریافت لیست چند کاربر تصادفی:
import requests
for i in range(5):
r = requests.get("https://randomuser.me/api/")
user = r.json()["results"][0]
print("نام:", user['name']['first'])
print("ایمیل:", user['email'])
print("عکس:", user['picture']['large'])
print("-"*30)
مرحله ۸: ارسال پارامترها (Query Params)
بعضی APIها اطلاعات ورودی رو در لینک دریافت میکنند:
params = {
"q": "python",
"limit": 3
}
r = requests.get("https://api.example.com/search", params=params)
print(r.json())
مزیت: خود requests آدرس رو درست میسازه و کاراکترها رو encode میکنه.
مرحله ۹: سایر متدها (PUT، DELETE)
مثلاً برای حذف یک کاربر با id=3:
requests.delete("https://api.example.com/users/3")
مرحله ۱۰: نکات مفید برای حرفهایها
- همیشه مستندات API را بخوان — هر سایتی فرق دارد!
- کد پاسخ 401 : احراز هویت اشتباه است!
- درخواستها را throtlle کن: (یعنی پشت سر هم اسپم نفرست!)
- کل داده را log نکن؛ اطلاعات حساس شاید لو برود!
- با رفرش کردن توکن مراقب expiry باش!
- اگر پاسخ پیچیده بود type(data) را چک کن تا مطمئن شی DataType چیست.
تمرین عملی ویژه
از API آبوهوا، دمایشهر خودت را با مختصات جغرافیایی دقیقش (latitude, longitude) بگیر و نمایش بده!
منابع فارسی و انگلیسی معتبر برای تمرین بیشتر
جمعبندی:
با requests و کمی جستجو در مستندات هر API، میتوانی تقریباً هر ارتباطی را با وبسرویسها پیادهسازی کنی.