للعديد من التطبيقات التي تشغلها على حاسوبك واجهة مستخدم، تحتوي غالبًا على أزرار للنقر أو أيقونات للسحب أو حقول نصية للكتابة فيها، وتستخدم بعض التطبيقات الطرفية terminal (أو سطر الأوامر) واجهةً لها، حيث يكتب المستخدم الأوامر بدلاً من النقر فوق الأزرار أو سحب الأيقونات، وتخصَّص الواجهة البرمجية للتطبيقات Application Programming Interface -واختصارًا API- للتطبيقات بدلًا من المستخدمين.
تُوجَّه جميع أجهزة الحاسوب في النهاية للمستخدم، ولكن الواجهة البرمجية للتطبيقات تسهّل على المستخدمين كتابة تعليمات برمجية للتحكم بالتطبيق، وقد تكون الواجهة البرمجية للتطبيقات غير فعالة وغير مباشرة لاستخدام التطبيق بالنسبة للبشر، ولكنها طريقة مناسبة لأجهزة الحاسوب لإرسال الإشارات، والحصول على بيانات مفيدة من التطبيقات الأخرى، ويمكن الوصول إليها محليًا أو عبر شبكة -أكبرها الإنترنت-، ويمكن تصميمها لتقبل مدخلات من عدة لغات برمجة وبروتوكولات، ويكثر استخدامها في تصميم ألعاب الفيديو وتعديلها، وتوسيع التطبيقات المعقدة، واستخراج البيانات data scraping والتفاعل معها.
البرمجة المبسطة باستخدام الواجهة البرمجية للتطبيقات API
من ميزات الواجهة البرمجية للتطبيقات قدرتها على إخفاء متطلبات التعليمات البرمجية المعقدة عن المستخدم، فعلى سبيل المثال، هذا برنامج بسيط مكتوب بلغة C لطباعة جملة "Hello world" على الشاشة:
#include <stdio.h> int main(int argc, char *argv[]) { int i; for(i=1;i<argc;i++) { printf("%s\n",argv[i]); } return 0; }
يمكن للواجهة البرمجية للتطبيقات المكتوبة لإخراج نفس النتيجة أي طباعة جملة "Hello world" أن تبسط التعليمات البرمجية تبسيطًا كبيرًا، وفيما يلي واجهة برمجية لتطبيقات وهميةً مثالًا على ذلك:
cprint(hello_msg)
تعليمات إنشاء API معقدةً عادةً، كما هو موضح في مثال Lua، لكن المستخدم النهائي ليس مضطرًا للتعامل مع ذلك، فالشيء الوحيد الذي سيراه هو لغة برمجة مبسطة تمكنه من الوصول إلى نتائج الحسابات المعقدة للغاية.
الاستعلامات المبسطة باستخدام الواجهة البرمجية للتطبيقات API
يمكن من خلال الواجهة البرمجية للتطبيقات توفير تعليمات للمستخدمين النهائيين لتنفيذ إجراءات محددة أو استعلامات queries عن المعلومات، إذ تمكّن الواجهة البرمجية API المستخدمين من الاستفادة من ميزات البرنامج دون الحاجة لتعلم أوامر برمجية معقدة أو كشف بياناتهم الحساسة، فمثلًا إذا شغلت منتدى دعم أو خادم دردشة فقد ترغب في مشاركة عدد المستخدمين الآخرين -فكلما زاد عدد المستخدمين الموجودين زادت فرصة الحصول على إجابة لسؤال الدعم- لكنك لن تشارك أسماءهم أو أنشطتهم.
ومن أمثلة ذلك إصدار API الذي نُفذ بواسطة مضيف Git مفتوح المصدر GitLab، حيث يحتوي GitLab على واجهة برمجية للتطبيقات غنية بالميزات تساعد المطورين على تحديد أحدث إصدارات برامجهم، ويمكن للمبرمجين إنشاء إصدار من خلال واجهة الويب في GitLab، إلا أن العديد من المطورين يفضلون أتمتة العملية بحيث لا نحتاج للنقر يدويًا عبر شاشات الخيارات، ويتيح GitLab إرسال الأوامر عبر بروتوكول HTTP باستخدام طريقة الإرسال POST، وهذا مثال عن ذلك:
$ curl --header 'Content-Type: application/json' \ --header "PRIVATE-TOKEN: example_token" \ --data '{ "name": "Release", "tag_name": "2.4", "description": "Fixed Makefile.am" }' \ --request POST https://gitlab.com/api/v4/projects/trashy%2Ftrashy
للواجهة البرمجية للتطبيقات GitLab العديد من الميزات، منها الحصول على معلومات حول الوسوم والإصدارات وحذف الإصدارات وتحديثها وما إلى ذلك، ومن السهل على المطورين استخدامها ودمجها في عملياتهم الحالية، لأنها تستخدم طرائق إرسال HTTP القياسية.
مفتاح الواجهة البرمجية للتطبيقات API
نلاحظ في مثال GitLab أن مفتاح الواجهة البرمجية للتطبيقات API key كان مطلوبًا، ووظيفته هي نفس وظيفة اسم المستخدم وكلمة المرور في الواجهات التفاعلية، ولكن سيكون تقديم حقل اسم مستخدم وكلمة مرور -مثل الذي تراه عند تسجيل الدخول للتحقق من بريدك الإلكتروني- معقدًا؛ لأنه من المتوقع أن يكون الكيانان المتفاعلان من خلال الواجهة أجهزة حاسوب، لذا يُصدر للمبرمج مفتاح الواجهة البرمجية للتطبيقات يضمَّن في التعليمات البرمجية المكتوبة ليتمكن من التفاعل مع الواجهة.
يختلف الحصول على المفتاح بناءً على كاتب الواجهة البرمجية للتطبيقات التي تريد استخدامها، فمثلًا توفر GitHub مفتاح واجهة برمجية للتطبيقات في لوحة إعدادات رموز الوصول Access Tokens، بينما تقدم خدمة Twitter -مغلق المصدر- المفاتيح من خلال نطاق فرعي subdomain للمطورين، وتعدّ مفاتيح الواجهة البرمجية للتطبيقات من أدوات المطور؛ لذا نادرًا ما تُصدر لكل مستخدم تلقائيًا، لكنها تحجَز للمستخدمين المتقدمين عند الطلب، ولها نفس مزايا اسم المستخدم وكلمة المرور، فهي تنظم الوصول إلى البيانات الحساسة، وتسمح الواجهة البرمجية للتطبيقات بالكشف عن المعلومات كشفًا انتقائيًا بناءً على الاستدعاءات التي تُوفر من خلالها، وهنا يمكن للمفتاح إجراء استثناءات أيضًا بناءً على احتواء طلب الاستدعاء على مفتاح صالح أم لا .
الفرق بين حزمة أدوات تطوير البرامج SDK والواجهات البرمجية للتطبيقات API
تجرد الواجهة البرمجية للتطبيقات الدوال البرمجية لتطبيق عن أدوات التحكم بها، أما حزمة أدوات تطوير البرامج SDK فهي دوال البرمجة للتطبيق حرفيًا.
تستخدم الواجهة البرمجية للتطبيقات API في التطبيقات المفتوحة المصدر غالبًا لتوفير الراحة أو الأمان، وتسهل في بعض الأحيان على المبرمج إنشاء أدوات حول تطبيق معقد دون الحاجة إلى فهم الكثير حول كيفية عمله، كما يمكن أن تعمل على حماية البيانات المهمة أو الحساسة مع السماح بالوصول إلى البيانات الأخرى، أما في التطبيقات مسجلة الملكية، فتقدَّم حزمة أدوات تطوير البرامج SDK على أنها الجزء "الأكثر انفتاحًا" من شيفرة البرنامج المصدرية، ويلزمنا غالبًا دفع المال للحصول عليه قانونيًا، ويكون جزء المنتج الذي يدفع المطورون ثمنه ليتمكنوا من التطوير باستخدامه.
لا حاجة إلى أدوات تطوير البرامج في التطبيقات مفتوحة المصدر من الناحية التقنية؛ لأن الشيفرة المصدرية متاحة للاستخدام والتعديل مباشرةً من قبل أي شخص، ومع ذلك توفر بعض المشاريع مفتوحة المصدر حزمة أدوات تطوير البرامج مثل طريقة لتوضيح الدوال الأكثر أهميةً لحالات الاستخدام الأكثر شيوعًا للمطورين، فعلى سبيل المثال عندما تطور تطبيق Qt، يمكنك استخدام أدوات تطوير برامج Qt بالرغم من أن Qt مفتوحة المصدر، أي أنك ستستخدم مكتبات Qt لتطوير التطبيق، أما إذا أردت تطوير Qt نفسها، فستكتب مكتبات بنفسك، لذا لن تستخدمها في عملية التطوير.
يمكن ألا يكون الفرق بين حزمة أدوات تطوير البرامج والواجهة البرمجية للتطبيقات واضحًا في بعض الحالات، ولكن عمومًا توفر حزمة أدوات تطوير البرامج الوصول إلى المكتبات، بينما تستخدم الواجهة البرمجية للتطبيقات هذه المكتبات لإنتاج نتيجة بناءً على أمر معين يمكن تنفيذه من خلالها.
إنشاء واجهة برمجية للتطبيقات API
تعمل الواجهة البرمجية للتطبيقات على تسهيل التفاعل، وفي علم الحواسيب غالبًا ما يكون التفاعل عبارةً عن طلب وإجابة، وإذا كتبت شيفرةً تستمع إلى التعليمات عبر بروتوكول -دون تدخل بشري مباشر أو معه- فمن المحتمل أنك أنشأت واجهة برمجية لتطبيقات.
يمكن كتابة API بأي لغة برمجة، وكُتِب العديد منها بلغة Java بمساعدة البرامج الوسيطة middleware مثل JBoss وscale3، بينما كُتب البعض الآخر بلغة Python باستخدام Flask أو Django أو Pyramid، بينما لا يزال البعض الآخر مكتوبًا بلغات Ruby وPerl وLua وC و++C وNET.، وأي لغة أخرى تقريبًا.
الواجهة البرمجية للتطبيقات من نمط RESTful
وصف الدكتور روي فيلدنغ Roy Fielding في إحدى أطروحاته أسلوب API الذي أسماه "Representational State Transfer"، والذي يعرف اختصارًا REST، وهنالك عدد من المعايير والشروط التي تجعل الواجهة البرمجية واجهةً من النمط RESTful، ومن أهمها أن تكون عديمة الحالة statelessness، أي أن لا يخزن الخادم (وهو جانب الواجهة البرمجية للتطبيقات الذي يتخذ إجراءً بناءً على الطلبات الواردة من العميل) أي بيانات للمستخدم، وأن يستلم كل ما يحتاجه من البيانات منه، أي يجب أن تحتوي الواجهة البرمجية للتطبيقات من النمط RESTful على استدعاءات مصممة لتوفير جميع البيانات اللازمة لإكمال التفاعل.
فإذا كتبت واجهةً برمجيةً للتطبيقات لتوفير الرصيد المصرفي للمستخدم، فيجب أن تستقبل اسم المستخدم وكلمة المرور -أو مفتاح API- والحساب المصرفي المقصود، والأمر المطلوب لاسترداد الرصيد المصرفي، بالإضافة إلى أي خيارات مثل نوع العملة واللغة، ويجب تقديم كل هذه المعلومات مع كل طلب؛ لأن الخادم سيعود -بعد كل طلب- إلى حالة عدم المعرفة الافتراضية، كما لو أنه لم يستلم أي طلب من أي شخص، حتى لو أجرى المستخدم مهامًا ذات صلة من قبل، مثل الحصول على رصيد الحساب قبل تحويل الأموال من هذا الحساب إلى حساب آخر، وسيطلب الخادم مرةً أخرى إرسال جميع بيانات الاعتماد والتفاصيل ضمن الطلب.
توجد عدة فوائد للواجهة البرمجية للتطبيقات من النمط RESTful، منها فصل العميل والخادم، ولكن هذا ليس كل شيء، فنظرًا لعدم تخزين الخادم لبيانات المستخدم وعدم اعتماده على نوع معين من الواجهات؛ فيمكن لعدة مطورين تطوير عملاء فريدين للخوادم، أي سنتمكّن من تطوير تطبيق هاتف وتطبيق قائم على الطرفية terminal-based لنفس الخادم دون تعديل، لأن الواجهة البرمجية للتطبيقات توفر واجهةً متوافقةً مع كليهما، إذ تعمل معظم الأوامر الطرفية بنفس الطريقة، حتى أن الأوامر التي تسمح لملفات الإعدادات (التي تخزن الخيارات الدائمة) لا زالت توفر متغيرات البيئة أو خيارات سطر الأوامر لتحديد المعاملات parameter والمدخلات والمخرجات المهمة، لذا يشبه التعامل مع الواجهة البرمجية للتطبيقات من النمط RESTful إلى حد كبير تنفيذ أمر على نظام آخر.
الاستفادة من الواجهة البرمجية للتطبيقات
إذا لم تستخدم الواجهة البرمجية للتطبيقات مطلقًا، فحاول استخدامها لشيء بسيط، ودوّن ملاحظات حول ما يعجبك فيها وما حدودها، وإذا كنت مطورًا فحاول كتابة واجهة برمجية للتطبيقات، إذ ساعد مفهوم الواجهة البرمجية للتطبيقات، مثل التطبيقات مفتوحة المصدر نفسها، على أن تصبح الحوسبة أكثر مرونةً وسهولةً وكفاءةً، فتعلمه، واجعله مفتوح المصدر!
لمعرفة المزيد حول الواجهة البرمجية للتطبيقات يمكنك الرجوع إلى المقالات ضمن وسم api
ترجمة -وبتصرف- للمقال ?What is an API من موقع opensource.com.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.