API

Application Programming Interface رابط برنامه‌نویسی اپلیکیشن





بیاید با یک مثال شروع کنیم :

به یک منو در رستورانی فکر کنید ، در این فهرست لیستی از غذا های قابل سفارش را به همراه توضیحات اون میتونید ببینید .

وقتی مشخص میکنید که چه آیتم هایی از منو را میخواهید ،آشپزخانه رستوران اونو برای شما آماده میکنه .

شما دقیقا نمیدونید که رستوران چگونه اون غذا را تهیه می کنه و نیازی هم به فهمیدن این موضوع ندارید.



بزارید یه مثال تخصصی تر بزنیم:

فرض کنید شما یک توسعه دهنده نرم افزار هستید و میخواهید یک برنامه برای سیتم عامل iosبنویسید ،اگر بخواهید که یک مرورگر وب را برای نشان دادن یک یا چند صفحه وب در برنامه تان جاسازی کنید آیا لازمه که از ابتدا یک مرورگر وب برای برنامه خودتون آماده کنید ؟

قطعا جواب خیر هست و شما میتونید از API مربوط به مروگر safari برای جاسازی یک شی مرورگر در برنامه خودتون استفاده کنید.

این برای هر سیستم عاملی صدق میکند .به عنوان مثال اگر بخواهید یک کادر محاوره ای در ویندوز ایجاد کنید میتوانید از APIهای اختصاصی که مایکروسافت برای ویندوز عرضه کرده هست استفاده کنید.

فرض کنید اگر مایکروسافت اقدام به عرضه این APIها برای توسعه دهندگان نمی کرد ، در چنین فضایی هر دولوپر مجبور میشد تا بسته به نیاز و سلیقه خودش اقدام به طراحی پنجره هایی بکنه و این مساله منجر می شه که یکپارچگی ظاهری بین نرم افزار های مختلف از بین میره، API ها به دلایل دیگری هم مورد استفاده قرار میگیرند مثلا اگه از نرم افزاری در موبایلتون استفاده میکنید که در آن از google maps برای نشان دادن نقشه استفاده می شود در واقع این نرم افزار از google maps api و در صورت عدم استفاده از این APIها خود توسعه دهندگان نرم افزار باید نقشه های خود را ایجاد کرده و داده ها را روی آن پیاده کنند.

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

کار با API ها تقریبا آسونه چون دیتا های مبادله شده ساختار یافته اند ، یعنی درخواست ها در یک چارچوب و فرمت استاندارد تعریف شده اند و نتیجه تعامل با API ها قابل پیش بینی هست.



خوب حالا که تقریبا با مفهوم API آشنا شدیم بریم سراغ بررسی جزئی تر اون :

انواع مختلف API ها:

ای‌پی‌آی سخت‌افزاری

به عنوان مثال یک توسعه دهنده میتونه با استفاده از API های سخت افزاری موجود در سیستم عامل به دوربین موبایل و یا سنسور GPS دسترسی داشته باشه و از اون در نرم افزار های خودش استفاده کنه.

ای‌پی‌آی سیستم‌عاملی

که پیش از این درقالب توسعه نرم افزار های دسکتاپ توضیح دادم.

ای‌پی‌آی زبان‌های برنامه‌نویسی

به عنوان مثال استفاده از API های java که فیچر های تکمیلی را در اختیار توسعه دهندگان میذاره.

ای‌پی‌آی تحت وب (وب سرویس)

متداول ترین و کاربردی ترین انواع API ها هستند که در پست های بعدی بیشتر با اون ها آشنا میشیم.




دسته بندی API ها بر اساس ابعاد دسترسی :

1-open APIs

تحت عنوان API های عمومی شناخته میشوند و محدودیتی در دسترسی به اونا وجود نداره.

2-partner APIs

این API ها صرفا در اختیار کسب و کار ها هستند ،معمولا پولی هستند و برای دسترسی به این ها یک توسعه دهنده نیاز به مجوز های خاصی داره چون در دسترس عموم نیست.

3-internal APIs

به عنوان API های خصوصی شناخته می شوند و برای سیستم های داخلی یک شرکت طراحی میشوند و تیم های مختلف داخلی یک سازمان میتونند از این نوع API ها استفاده کنند تا محصولات و خدماتشون رو بهبود ببخشند.

4-composite APIs

این APIها یک روش طراحی برای درخواست دسته های API پی در پی هستند یعنی تعداد بیشتری موارد استفاده ارائه می دهند و میتوان با یک ارسال درخواست زنجیره ای از تماس ها را انجام داد و یک پاسخ دریافت کرد

بزارید یک مثال بزنم :

برای ایجاد سفارش در یک API سبد خرید ممکن است به چندین نقطه پایانی نیاز داشته باشیم :

*ایجاد سفارش

*اضافه کردن مورد به سفارش

*تغییر وضعیت سفارش

*و ....

و برای ایجاد یک سفارش باید این تماس هارا پشت سر هم انجام دهیم.



خوب تا به اینجای کار با یه سری جزئیات آشنا شدیم و بقیه توضیحات رو میزارم برای پست بعدی و برای تموم کردن این پست میخوام یه نمونه عملی ساده از کار کردن با API ها در پایتون رو انجام بدیم.

میخوایم یه برنامه ساده بنویسم که به صورت انلاین قیمت ارز های دیجیتال رو برامون بنویسه :)

خوب برای اینکه بتونیم به یه سری API های باز دسترسی داشته باشیم میتونیم از حساب گیت هاب زیر استفاده کنیم:

https://github.com/public-apis/public-apis

و اونجا از قسمت crypto curency میتونیم به APIهای مربوط به ارز های دیجیتال دسترسی پیدا کنیم.


برای مثال من از APIهای مربوط به سایت COINLORE استفاده میکنم ، اولین کاری که باید بکنیم اینه که داکیومنت مربوط به اون APIکه میخوایم باهاش کار کنیم رو کامل بخونیم

به عنوان مثال برای اینکه به اطلاعات صد ارز دیجیتال با ارزش دسترسی پیدا کنیم باید به این صورت عمل کنیم
به عنوان مثال برای اینکه به اطلاعات صد ارز دیجیتال با ارزش دسترسی پیدا کنیم باید به این صورت عمل کنیم


خوب بعد از تسلط کامل بر داکیومنت میتونیم برنامه مورد نظر خودمون رو بنویسیم:


برای شروع کار لازمه که یه سری کتابخونه پایتون نصب کنیم تا بتونیم راحت تر باهاش کار کنیم

برای درخواست دادن به هر URL در پایتون میتونیم از کتابخونه request استفاده کنیم

همینطور برای نمایش زمان از کتابخونه time استفاده میکنیم.

import requests
import time

خوب برای این که ظاهر خوبی به برناممون بدیم یکم رنگیش میکنیم :)

class bcolors:
             HEADER = '\033[95m'
             OKBLUE = '\033[94m'
             OKGREEN = '\033[92m'
             WARNING = '\033[93m'
              FAIL = '\033[91m'
              ENDC = '\033[0m'
              BOLD = '\033[1m'
              UNDERLINE = '\033[4m'


خوب حالا با استفاده از کتابخونه request یک در خواست به API مورد نظرمون ارسال میکنیم:

res=requests.get('https://api.coinlore.net/api/tickers/?start=0&limit=10')

و زمان این درخواست رو هم به این صورت به دست میاریم :

localtime = time.asctime( time.localtime(time.time()) )


حالا میتونیم ظاهر برنامه مون رو درست کنیم و اطلاعاتی که به دست اوردیم رو چاپ کنیم :

import requests
import time
import matplotlib.pyplot as plt
class bcolors:
      HEADER = '\033[95m'
      OKBLUE = '\033[94m'
      OKGREEN = '\033[92m'
      WARNING = '\033[93m'
      FAIL = '\033[91m'
      ENDC = '\033[0m'
      BOLD = '\033[1m'
      UNDERLINE = '\033[4m'
#ارسال درخواست
res=requests.get('https://api.coinlore.net/api/tickers/?start=0&limit=10')
print(bcolors.OKGREEN+&quot---------cryptocurrency data---------&quot+ bcolors.ENDC)
#چاپ کردن چهار ارز باارزش اول
for i in range(0,4):
      print(bcolors.OKBLUE,res.json()['data'][i]['rank'],bcolors.ENDC,end=&quot&quot)
      print(res.json()['data'][i]['nameid'],&quot\t&quot,res.json()['data'][i]['price_usd'],&quot$&quot)
      print(bcolors.OKGREEN+&quot------------------------------------&quot+bcolors.ENDC)
#به دست اوردن زمان انجام درخواست
localtime = time.asctime( time.localtime(time.time()) )
print(bcolors.WARNING+&quotLocal current time :&quot, localtime,&quot&quot+bcolors.ENDC)
print(bcolors.OKGREEN+&quot------------------------------------&quot+bcolors.ENDC)

در نهایت خروجی برنامه به صورت زیر خواهد بود :

این یه نمونه ساده از کار با API ها بود ، شما هم میتونید کلی کار جالب و راحت با API ها انجام بدید و لذت ببرید :)

داخل پست بعدی در رابطه با نحوه ساخت API با استفاده از فریمورک Django توضیح دادم .