چگونه در پایتون از APIهای تحت وب استفاده کنیم؟

چگونه در پایتون از APIهای تحت وب استفاده کنیم؟

در این مقاله قصد داریم به معرفی APIهای وب پرداخته و همچنین نحوۀ برقراری ارتباط با آنها را در پایتون با استفاده از ماژول Requests بررسی کنیم. 

API چیست؟
API
مخفف کلمۀ Application Programming Interface است. در واقع، Interface نمای بیرونی و مرز مشترک میان دو آبجکت است. مثلاً User Interface یا همان UI به مرز مشترک میان یک برنامه یا سیستم‌عامل و یک کاربر واقعی اشاره می‌کند. کاربر در سیستم‌عامل داس با نوعی رابط کاربری که شبیه متن بود سر و کار داشت ولی در ویندوز با پنجره‌ها کار می‌کند.

حال با همین تعریف هم API به مرز مشترک میان دو اپلیکیشن اشاره می‌کند؛ به عبارت دیگر هنگامی که می‌خواهیم یک اپلیکیشن طراحی کنیم، نحوۀ تعامل اپلیکیشن با سایر اپلیکیشن‌ها به عهدۀ API خواهد بود (برای آشنایی بیشتر با این مفهوم، به مقالهٔ API چیست و آیا به کار ما می‌آید؟ مراجعه نمایید). 

Web API چیست؟
Web API در واقع همان APIیی می‌باشد که اپلیکیشن‌های تحت وب پیاده‌سازی کرده و با استفاده از آن اجازه می‌دهند تا برنامه‌های دیگر با یکسری پارامترهای خاص به آنها متصل شده و یک خروجی با یک فرمت مشخص از آن بگیرند. از مهم‌ترین APIهای وب می‌توان به APIهای شبکه‌های اجتماعی (فیسبوک، توئیتر، اینستاگرام، تلگرام و ...)، گوگل، آمازون و ... اشاره کرد.

مزایای استفاده از APIهای وب چیست؟
مهم‌ترین دلیل شاید بتواند Real Time (در لحظه) و به‌روز بودن دیتاهای استخراج شده باشد و دلیل بعدی را می‌توان عدم ذخیره‌سازی دیتاهای بزرگ دانست؛ چرا که شما فقط دیتایی که احتیاج دارید را فراخوانی می‌کنید.

RESTful API چیست؟
RESTful برگرفته از کلمۀ Representational State Transfer، در واقع یکی از انواع معماری‌های APIهای وب است که اخیراً به محبوبیت زیادی رسیده است. در معماری Restful، کلاینت شبیه یک مرورگر درخواست خود را به صورت HTTP و با متدهای قابل‌فهم برای مرورگر (مانند GET ،POST ،PUT ،DELETE و ...) به سمت API با معماری RESTful می‌فرستد و پاسخی دریافت می‌کند که عموماً این پاسخ به صورت JSON یا XML است (از RESTful API بیشتر برای دسترسی به منابع استفاده می‌شود).

استفاده از ماژول Requests در پایتون
در پایتون برای اینکه بتوانیم با یک API وب ارتباط برقرار کنیم، از ماژول Requests برای ارسال درخواست‌های HTTP استفاده می‌کنیم. البته ماژول‌های دیگری مثل Urllib که به صورت اصطلاحاً Built-In در خود زبان برنامه‌نویسی پایتون هستند نیز می‌توان استفاده نمود اما کار با آنها به سادگی ماژول Requests نیست. برای کار با ماژول Requests، ابتدا باید آن را نصب کنیم:

pip install requests

برای اطمینان از نصب این ماژول، به صورت زیر در کنسول آن را import می‌کنیم:

import requests

اگر اروری مشاهده نشد، این بدان معنا است که ماژول Requests به درستی نصب شده است. حال فرض کنیم که می‌خواهیم یک درخواست GET به یک لینک دلخواه فرستاده و پاسخ را بررسی کنیم:

import requests
req = requests.get('https://github.com/timeline.json')

درخواست GET به صفحۀ تایم‌لاین GitHub فرستاده شده است (گویی در مرورگر لینک مذکور را باز کرده باشیم.) و پاسخ را در متغیری تحت عنوان req ذخیره کرده‌ایم و حال می‌توان با استفاده از متدهای مختلف، اطلاعات دلخواه‌مان را کسب کنیم. به طور مثال خواهیم داشت:

req.text
u'{"message":"Hello there, wayfaring stranger. If you\u2019re reading this then you probably didn\u2019t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.","documentation_url":"https://developer.github.com/v3/activity/events/#list-public-events"}

با استفاده از متد text می‌توانیم محتوای صفحه را مشاهده کنیم و یا با:

req.json()
{u'documentation_url': u'https://developer.github.com/v3/activity/events/#list-public-events', u'message': u'Hello there, wayfaring stranger. If you\u2019re reading this then you probably didn\u2019t see our blog post a couple of years back announcing that this API would go away: http://git.io/17AROg Fear not, you should be able to get what you need from the shiny new Events API instead.'}

می‌توان همۀ اطلاعات صفحه را به صورت JSON درآورد و یا با استفاده از متد encoding به صورت زیر:

req.encoding
'utf-8'

می‌توان فرمت encoding صفحه را مشاهده کرد.

ماژول Requests در پایتون همچنین شامل متدهای POST و PUT نیز می‌باشد. از POST برای ایجاد یک آبجکت جدید و از PUT برای ویرایش و آپدیت آبجکت قدیمی استفاده می‌شود. به عنوان مثال داریم:

r = requests.post('http://127.0.0.1/api/v1/add_item', data = {'task':'Shopping'})
r = requests.put('http://127.0.0.1/api/v1/add_item', data = {'task':'Shopping at 2'})

و در آخر باید گفت که Requests شامل امکانات متنوع دیگری همانند متدهای Authentication و ... نیز می‌باشد که جزو کاربردهای حرفه‌ای‌تر این ماژول محسوب می‌شوند.

منبع


محمد طاهری