در حال حاضر پایتون یکی از محبوبترین زبانهای برنامهنویسی در دنیا است. بسیاری از کارشناسان اعتقاد دارند طی سه یا چهار سال آینده پایتون جای زبانهای C و جاوا را به عنوان پرکاربردترین زبان برنامهنویسی خواهد گرفت و بنابراین، نیاز به یادگیری استفاده از API در پایتون بیش از پیش احساس میشود. در این پست، ما به نحوه استفاده از API در پایتون میپردازیم. قبل از شروع، پیشنهاد میکنیم مقاله زیر در مورد انواع API و به طور ویژه REST APIها را مطالعه کنید.
همچنین اگر برای پروژه خود نیاز به APIهایی برای تمرین دارید، پیشنهاد میکنیم فرم زیر را پر کنید تا همکاران ما با شما تماس بگیرند:
به طور خلاصه، REST API از پروتکلهای HTTP برای تعامل با وبسرویسها بهره میبرند و از دید پایتون، یک REST API در واقع یک منبع اطلاعات در سطح اینترنت است که در یک آدرس خاص قرار داشته و برای دسترسی به آن نیاز به کتابخانهها و اطلاعات خاصی است. یک REST API پنج ویژگی اصلی دارد که آن را تعریف میکنند:
- رابط کاربری یکپارچه: اجزای رابط کاربری با استفاده از قوانین عمومیسازی طراحی شدهاند تا معماری کلی سیستم سادهتر شده و ظاهر تعاملها بهبود پیدا کند.
- معماری کلاینت-سرور: الگوی طراحی کلاینت-سرور امکان جدایی این دو از یکدیگر را فراهم میکند. به این ترتیب، اجزای کلاینت و سرور میتوانند به صورت مستقل از یکدیگر توسعه پیدا کنند.
- بدون وضعیت: یعنی هر درخواست از سوی کلاینت باید حاوی تمام اطلاعات لازم برای انجام درخواست باشد و سرور نمیتواند از هیچکدام از اطلاعاتی که از قبل ذخیره شدهاند بهره ببرد.
- قابل کش شدن: هر پاسخ باید مشخص کند که قابل کش شدن است یا نه. اگر پاسخ قابل کش شدن باشد، کلاینت اجازه دارد از آن برای درخواستهای مشابه بعدی استفاده کند.
- سیستم لایهای: مدل لایهای به معماری اجازه میدهد تا یک سیستم سلسهمراتبی پیادهسازی کند و هر لایه تنها میتواند لایههایی که با آنها ارتباط دارد را ببیند.
در HTTP، چهار نوع اصلی درخواست یا متد وجود دارد:
- GET: دریافت داده از سرور
- POST: اضافه کردن ریسورس جدید در سرور
- PUT: تغییر داده موجود
- DELETE: پاک کردن داده موجود
پیشنیازهای استفاده از API در پایتون
برای استفاده از REST APIها در پایتون، ابتدا باید برای ارسال درخواستهای HTTP به یک کتابخانه وصل شویم. نوع کتابخانه انتخابی به ورژن پایتونی که استفاده میکنیم، بستگی دارد.
اگر از پایتون ۲ استفاده میکنید، پیشنهاد میکنیم از کتابخانه unirest استفاده کنید. این کتابخانه به دلیل سادگی، سرعت و قابلیت کار با درخواستهای همزمان و غیر همزمان گزینه بسیار خوبی برای پایتون ۲ است.
اما اگر کاربر پایتون ۳ هستید، بهتر از requests استفاده کنید. requests کتابخانه استاندارد برای ایجاد درخواستهای HTTP در پایتون است.
در ادامه این آموزش ما از پایتون ۳.۶ و کتابخانه requests استفاده میکنیم. با توجه به این موارد، یک درخواست GET در پایتون به صورت زیر نوشته میشود:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ |
... @app.route('/programming_languages/<programming_language_name>', methods=&#۹۱;'GET', 'PUT', 'DELETE']) def programming_language_route(programming_language_name): if request.method == 'GET': return get_programming_language(programming_language_name) elif request.method == "PUT": return update_programming_language(programming_language_name, request.get_json(force=True)) elif request.method == "DELETE": return delete_programming_language(programming_language_name) |
در اینجا کد Response به عنوان یک ابزار برای تایید اعتبار و صحت درخواست استفاده میشود. در مثال ما، Response برابر ۲۰۰ بود که یعنی درخواست با موفقیت ارسال شده است. حالا کدهای Response و معنی آنها را بیشتر بررسی میکنیم.
کدهای وضعیت HTTP
کدهای وضعیت به همراه پاسخ ارسال میشوند و به طور خلاصه نتیجه ارسال درخواست را نشان میدهند. در اینجا معنی برخی از پرکابردترین کدهای وضعیت که با آنها سر و کار خواهید داشت را توضیح دادهایم:
۲۰۰ – OK: درخواست موفقیتآمیز بوده است. پاسخ کامل به نوع درخواست (GET, POST و…) و مشخصات API بستگی دارد.
۲۰۱ – Created: درخواست موفقیتآمیز بوده و به ساخت یک ریسورس منجر شده است.
۲۰۴ – No Content: سرور با موفقیت درخوادست را پردازش کرده، اما هیچ پاسخی ارسال نکرده است.
۳۰۱ – Moved Permanently: سرور پاسخ داده که ریسورس درخواستی (اندپوینت) را به یک آدرس دیگر ارسال کرده و به آن آدرس ریدایرکت میکند.
۴۰۰ – Bad Request: سرور به دلیل وجود مشکل در فرمت درخواست قادر به ارسال پاسخ نیست.
۴۰۱ – Unauthorized: به دلیل درست نبودن اطلاعات احراز هویت سرور اجازه ارسال پاسخ را ندارد.
۴۰۳ – Forbidden: دسترسی به این ریسورس غیر مجاز است.
۴۰۴ – Not Found: ریسورس درخواستی در سرور وجود ندارد.
۵۰۰ – Internal Server Error: زمانی که مشکلی در سرور وجود دارد ارسال میشود.
کتابخانه request چندین دستور مفید و کاربردی برای کار کردن با کدهای وضعیت دارد. برای مثال، شما می توانید با استفاده از دستور status_code کد وضعیت یک Response را ببینید:
۱ ۲ ۳ ۴ |
print(response.status_code) >>> ۲۰۰ |
علاوه بر این شما میتوانید با استفاده از دستورهای شرطی وضعیت یک Response را بررسی کنید:
۱ ۲ ۳ ۴ ۵ ۶ |
if response: print('Request is successful.') else: print('Request returned an error.') |
اندپوینتها
به طور معمول اندپوینت یک آدرس خاص (برای مثال: https://api.pod.ir/srv/sc/nzh/doServiceCall ) است که با مراجعه به آن به یک سری داده و امکانات خاص دسترسی پیدا میکنید. به طور معمول نام (آدرس) اندپوینت با کاربرد آن هماهنگ است. برای درک بهتر کاربرد اندپوینت فرض کنید قصد دارید این سرویس را در اپیکیشن خود که با پایتون ۳.۶ نوشته شده، استفاده کنید. کد اپلیکیشن چیزی مشابه کد زیر خواهد بود:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ |
import requests response = requests.get(f"https://api.pod.ir/srv/sc/nzh/doServiceCall", headers={ "_token_": "توکن دریافتی از پنل", "_token_issuer_": "۱", "Content-Type": "application/x-www-form-urlencoded" } body={ "scProductId": "شناسه سرویس در حال استفاده", "scApiKey": " API Key دریافتی برای سرویس مورد نظر از پنل کسب و کاری" } ) |
دریافت پاسخ یک درخواست
به منظور دریافت بدنۀ (body) پاسخ یک وبسرویس از دستور زیر استفاده میکنیم. این دستور محتویات بدنه پاسخ را به صورت رشته کاراکتر (string) به دست میدهد.
۱ ۲ ۳ |
print(response.text) |
دریافت پاسخ JSON از یک درخواست
در اکثر موارد REST APIها برای راحتی کار پاسخ را در قالب JSON ارسال میکنند. کتابخانه requests یک متد ()json. دارد که پاسخ رشته را به یک JSON تبدیل میکند. در مثال بالا، اگر پارامتر country را که مقدار آن برابر با “ایران” و از نوع رشته (string) به اپلیکیشن اضافه کنیم، کد درخوسات و پاسخ دریافتی یک آرایه از نام استانها و شناسه آنها خواهد بود:
کد درخواست:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ ۱۴ |
import requests response = requests.get(f"https://api.pod.ir/srv/sc/nzh/doServiceCall", parameters = {"country": "ایران"} headers={ "_token_": "توکن دریافتی از پنل", "_token_issuer_": "۱", "Content-Type": "application/x-www-form-urlencoded" } body={ "scProductId": "شناسه سرویس در حال استفاده", "scApiKey": " API Key دریافتی برای سرویس مورد نظر از پنل کسب و کاری" } ) |
پاسخ دریافتی:
۱ ۲ ۳ ۴ ۵ ۶ ۷ ۸ ۹ ۱۰ ۱۱ ۱۲ ۱۳ |
&#۹۱; { "id": ۱, "name": "اذربایجان شرقی" }, { "id": ۲, "name": "اذربایجان غربی" }, ... ] |
استفاده از API در پایتون به کمک پادیوم
- اگر بخواهیم موارد گفتهشده را جمعبندی کنیم، برای استفاده API در پایتون مراحل زیر باید طی شوند:
- دریافت کلید و توکن API (برای دریافت توکن API در پادیوم، کافی است تا یک حساب کاربری ایجاد کنید)
- آزمایش اندپوینتها (در پایدوم امکان فراخوانی آزمایشی سرویسها بدون نیاز به ثبتنام فراهم شده است)
- وارد کردن مشخصات API در اپلیکیشن
نکته مهم قبل از شروع پروژه و استفاده از API، مطالعه مستندات فنی سرویسها است. در پادیوم هر سرویس دارای توضیحات کاملی برای نحوه استفاده و پیادهسازی هر سرویس است که میتواند شما را در مسیر توسعه پروژه راهنمایی کند. علاوه بر این اگر سوالی در خصوص سرویسها و یا نحوه پیادهسازی دارید، کارشناسان فنی پادیوم آماده هستند تا در تمامی مراحل پیادهسازی سرویس به شما کمک کنند.
سوالات متداول
از دید پایتون، یک REST API در واقع یک منبع اطلاعات در سطح اینترنت است که در یک آدرس خاص قرار دارد و برای دسترسی به آن نیاز به کتابخانهها و اطلاعات خاصی دارد.
برای استفاده از REST APIها در پایتون، ابتدا باید برای ارسال درخواستهای HTTP به یک کتابخانه وصل شویم. نوع کتابخانه انتخابی به ورژن پایتونی که استفاده میکنیم، بستگی دارد.