API

Application programming interface
واجهة لبرمجة التطبيقات أو بيئة برمجة التطبيقاتApplication Programming Interface وتختصر إلى API) وصفٌ العناصر البرمجيّة حسب وظائفها، و مدخلاتها و مخرجاتها.ويتمثل الهدف الرئيسيّ منها في توفير قائمة من الوظائف المستقلّة تمامًا عن الآلية التي نفّذت بها، لتتيح للآخرين التواصل معها من خلال أيّ آلية أخرى.
وهي مجموعة تعاريف وبروتوكولات وأدوات خاصة بالروتين الفرعي ومصممة لبناء البرمجيات التطبيقية. وتعني بشكل عام مجموعة من الطرق الواضحة التعريف للتواصل بين مختلف مكونات البرمجيات. من شأن الواجهة الجيدة أن تسهّل تطوير برامج الحاسوب عبر توفير كافة الكتل البرمجية الإنشائية اللازمة، ليعمل المبرمج بعد ذلك على رصفها وجمعها.
وقد تكون الواجهة مخصصة لنظام على الويب أو لنظام تشغيل أو نظام قاعدة بيانات أو عتاد الحاسوب أو مكتبة برمجيات.
وتأتي مواصفات الواجهة بأشكال مختلفة ولكنها غالبًا ما تشمل مواصفات الروتين أو بنية البيانات أو أصناف الكائنات أو المتغيرات أو نداءات الإجراءات البعيدة. “بوزيكس” (POSIX) وواجهة برمجة تطبيقات ويندوز Windows API وواجهة البرمجة المتقدمة لناقل “سكزي”ASPI  هي أمثلة عن الأشكال المتعددة التي تتخذها واجهة برمجة التطبيقات. ويتم عادةً تزويد ملفات توثيق الواجهة لتسهيل الاستخدام وإعادة التنفيذ.

الغرض

مثلما تسهّل واجهة المستخدم الرسومية على الأشخاص استخدام البرامج، تسهّل واجهة برمجية التطبيق على مطوّر البرمجيات استعمال تكنولوجيات معينة في بناء التطبيقات. من خلال تجريد التنفيذ الكامن والكشف عن الكائنات أو الأعمال التي يحتاجها المطور فحسب، تسهّل واجهة برمجة التطبيقات عملية البرمجة. وفي حين أنّ الواجهة الرسومية لـعميل بريد إلكتروني قد تزوّد المستخدم بزرّ يؤدي كل الخطوات اللازمة لاستحضار كل الرسائل الإلكترونية الجديدة والإضاءة عليها، فإن واجهة برمجة التطبيقات الخاصة بوحدات إدخال/إخراج الملف قد تعطي المطوّر وظيفة تنسخ الملف من موقع إلى آخر بدون أن تستدعي من المطوّر أن يفهم عمليات نظام الملفات التي تجري خلف الكواليس.

الأنواع

هناك نوعان من الـ(API):

أحدهما يعتمد على لغة البرمجة ؛ بمعنى أنه متاحٌ فقط في لغة برمجة معينة، ويقوم على استخدام syntax وعناصر هذه اللغة لجعله ملائما للإستخدام في هذا السياق.

و الأخر مستقل عن اللغة وهذا يعني أنه مكتوب بطريقة تتيح له أن يستخدم في العديد من لغات البرمجة (عادةً an assembly/C-level interface) وهذا النمط مطلوب في أنواع الواجهات البرمجية API المستخدمة في service غير المرتبطة بعملية معينة process، أو نظام تشغيل وعادة ما تكون متاحة كروتين منفصل.

مثال عن النوع الثاني هو على سبيل المثال ،الموقع الذي يعرض أماكن تواجد المطاعم في مكان ما يتيح للمستخدم بوضع مجموعة معلومات إضافية على نفس خريطة الموقع التي جلبت من خرائط جوجل ، وذلك بسبب ان خرائط جوجل تحتوي على هذا النوع والذي يسمح بعمل هذا الشيء.واجهة برمجة التطبيقات الخاصة بخرائط جوجل تتحكم بماهية المعلومات التي يمكن للمستخدم استغلالها وما الذي يستطيع ان يعمل بهاوكذلك ليس على الخرائط الخاصة لجوجل فقط بل أنها تستخدم في العديد من المهام الأخرى مثل ربطها بموقع إلكتروني لإتاحة فرصة عملية الشراء من خلال الموقع بالفيزا او كروت الــ ATM.

الإستعمالات

يشكل إنشاء واستخدام واجهات برمجة التطبيقات موضوعًا رئيسيًا في البرمجة المعاصرة.تستفيد التطبيقات عادة من العديد من واجهات البرمجة؛ المنفذة من طرف المكتبات البرمجية التي يمكن أن تستخدم بدورها واجهات برمجة أخرى.

في البنيات الخدمية يمكن للتطبيقات أن تعتمد على الميزات التي تقدمها برامج طرف ثالث عن طريق واجهات برمجة منفذة من طرف خدمات الويب.

واجهة البرمجة تسمح على سبيل المثال للبرنامج بالوصول إلى الخدمات التي يقدمها نظام التشغيل الذي يستضيف البرنامج. واجهة socket هي مثال كلاسيكي من واجهة البرمجة، تسمح للبرنامج من استغلال إمكانيات طبقة الشبكة لنظام التشغيل.

المكتبات وأطر العمل

تكون عادةً واجهة برمجة التطبيقات مرتبطة بمكتبة برمجية. تصف هذه الواجهة وتحدد السلوك المتوقع (توصيف) حين تكون المكتبة في طور التنفيذ الفعلي لمجموعة القواعد هذه. يمكن للواجهة الواحدة أن تجري عدة عمليات تنفيذ (أو ألّا تجري أي عملية تنفيذ إذا كانت مجرّدة) على هيئة مكتبات مختلفة تتشارك واجهة البرمجة نفسها.

ويتيح فصل الواجهة عن تنفيذها للبرامج المكتوبة بلغة معينة استخدام مكتبة موضوعة بلغة أخرى. على سبيل المثال، بما أن لغتَي “سكالا” و”جافا” تتحولان إلى كود وحدات البايت (bytecode) المطابق، يستطيع مطوّر “سكالا” أن يستفيد من أي واجهة جافا.

تختلف وجهة استعمال واجهة برمجة التطبيقات باختلاف لغة البرمجة المستخدمة. فواجهة اللغة الإجرائية على غرار “لوا” قد تتكوّن بالدرجة الأولى من روتين أساسي لتنفيذ الكود والتصرّف بالبيانات أو التعامل مع الأخطاء، في حين أن واجهة اللغة الكائنية التوجّه مثل جافا قد تعطي توصيفًا للأصناف وطرق الأصناف الخاصة بها.

واجهة ربط اللغة هي أيضًا نوع من واجهات برمجة التطبيقات. عند ربط خصائص وإمكانيات لغة معينة بواجهة منفّذة بلغة أخرى، تسمح واجهة ربط اللغة باستخدام المكتبة أو الخدمة المكتوبة بلغة معينة عند التطوير بلغة أخرى. وثمة أدوات تسهّل إنشاء مثل هذه الواجهات، منها أداة “التضمين المبسّط وتوليد الواجهات” SWIG  وF2PY (مولّد واجهة من فورتران إلى بايثون).

من الممكن أيضًا أن ترتبط واجهة برمجة التطبيقات بإطار عمل برمجي، حيث يمكن أن يستند إطار العمل إلى عدة مكتبات تنفّذ عدة واجهات لبرمجة التطبيقات، ولكن بخلاف وجهة الاستعمال المعتادة لواجهة برمجة التطبيقات، يتم الوصول إلى السلوك المضمّن في إطار العمل بواسطة توسيع محتواه عبر أصناف جديدة موصولة بإطار العمل نفسه.

فضلاً عن ذلك، فإن آلية التحكم بالتدفق في البرنامج ككل قد تخرج عن سيطرة المتّصل وتصبح تحت سيطرة إطار العمل عبر تغيير وجهة التحكم أو آلية مشابهة.