ال سترى اختصارات API أكثر من مرة ومرتين عندما تقرأ مقالات حول البرنامج. لكن لا يعرف الجميع ما هي واجهة برمجة التطبيقات (API) حقًا. هذا هو السبب في توضيحها في هذه المقالة. أول شيء يجب قوله هو أنها اختصارات لواجهة برمجة التطبيقات ، أي باللغة الإسبانية ، واجهة برمجة التطبيقات. وفي كثير من الأحيان تولد الارتباك حتى بين أولئك الذين يعرفون بعض البرمجة.
على سبيل المثال ، تمتلك Arduino واجهة برمجة تطبيقات برمجة خاصة بها ، حيث تقدم عددًا من الوظائف التي يمكنك استخدامها في Arduino IDE أو بيئات أخرى لبرمجة وحدة التحكم الدقيقة للسماح لك بإنشاء مشاريعك. لكن ... هل يمكن أن تخبرني الفرق بين مكتبة البرمجة وواجهة برمجة التطبيقات؟ هل هناك اختلافات بين إطار العمل وواجهة برمجة التطبيقات؟ هل API هو نفسه ABI؟ هناك العديد من الشكوك التي ربما تستمر في خلق الارتباك والتي سنقوم بتوضيحها الآن.
لا أعلم إذا كنت تعرف ذلك لغات منخفضة المستوى، مثل المجمّع أو ASM ، تعتمد بشكل مباشر على بنية الأجهزة ، في حين أن المستويات عالية المستوى تستخرج من الأجهزة لتسهيل مهمة المبرمج ، ولكنها تعتمد على نظام التشغيل (syscalls) أو على واجهات برمجة تطبيقات معينة ، إلخ. حتى لا يبدو كل هذا وكأنه صيني ، دعنا نرى ما يدور حوله ...
ما هي API؟
ل API هي أداة يتم توفيرها للمطورين بحيث يكون لديهم تحت تصرفهم سلسلة من الوظائف والروتينات الفرعية والإجراءات أو طرق OOP التي يمكن استخدامها من خلال المكتبات الحالية. من بين ما تقدمه واجهة برمجة التطبيقات من وظائف لإنشاء تطبيقات بسيطة ووظائف متعلقة بالذكاء الاصطناعي مع إنشاء الرسومات وإدارة موارد الأجهزة وما إلى ذلك
على سبيل المثال ، أنا متأكد من أنك على دراية بواجهات برمجة التطبيقات مثل تلك التي يقدمها Linux من خلال مكتبة glibc ، أو رسومات مثل OpenGL و Vulkan ، أو برامج أخرى مثل OpenCL للحوسبة غير المتجانسة ، OpenXR للواقع الافتراضي والواقع المعزز ، إلخ. تتضمن أنظمة التشغيل والبرامج الأخرى أيضًا واجهات برمجة التطبيقات الخاصة بها بحيث يمكن للمبرمجين الآخرين إنشاء وظائف إضافية أو مكونات إضافية أو وحدات نمطية لهذا النظام ، إلخ.
مثال مع اردوينو
إذا كان لديك شارة Arduino وأنت تستخدم Arduino IDE بشكل متكرر ، أو أي بيئة تطوير أخرى لـ Arduino ، ستعرف أنه عند إنشاء رمز ، فإنك تستخدم خيارات متعددة لتطلب من وحدة التحكم الدقيقة الخاصة بك القيام بسلسلة من الإجراءات. على سبيل المثال ، pinMode () هي وظيفة نموذجية لتكوين دبوس Arduino ، أليس كذلك؟
عندما تكتب pinMode (9 ، الإدخال)على سبيل المثال ، أنت تشير إلى أن الدبوس 9 من لوحة Arduino يجب أن يعمل كمدخل ، أي أن المتحكم الدقيق سينتظر إدخال المعلومات من خلال هذا الدبوس لقراءته وتنفيذ إجراء. لكن هل تساءلت يومًا كيف يمكنه فهم هذه الوصية؟
حسنًا ، يمتلك Arduino ملف تطوير API الذي يتم توفيره لنا. يمكن إضافة مكتبات الطرف الثالث إلى واجهة برمجة التطبيقات هذه كما رأينا في العديد من الأمثلة على هذه المدونة. مثل SparkFun لبعض المستشعرات ، إلخ. مع كل هذا ، يمكن إدخال الوظائف في Arduino IDE وسيقوم بترجمة الكود بشكل صحيح لتحميله في ذاكرة المتحكم الدقيق حتى يتمكن من معالجته.
إذا لم يكن لديك واجهة برمجة التطبيقات هذه ، فلن تتمكن من إنشاء هذه البرامج لـ Arduino بهذه الطريقة البسيطة ، حيث يجب أن نحاول جعلها في كود التجميع لوحدة التحكم الدقيقة ATMega328P ، أي ، ASM لهندسة AVR. وسيكون ذلك أكثر تعقيدًا ، حيث سيتعين عليك استخدام التعليمات المتوفرة بواسطة ISA مباشرة. إذا كان الأمر كذلك ، فلن تحتاج فقط إلى معرفة ذخيرة ISA بشكل كافٍ ، ولكن أيضًا الجوانب الأخرى مثل عدد التسجيلات ، وما إلى ذلك. بمعنى ، يجب أن تكون لديك معرفة منخفضة المستوى بالأجهزة التي تعمل من أجلها.
من قبل مثال ، رمز ASM ما يجب أن تولده حتى يومض LED في حلقة سيكون:
<br data-mce-bogus="1"> .ORG 0x0000 ; the next instruction has to be written to ; address 0x0000 rjmp START ; the reset vector: jump to "main" START: ldi r16, low(RAMEND) ; set up the stack out SPL, r16 ldi r16, high(RAMEND) out SPH, r16 ldi r16, 0xFF ; load register 16 with 0xFF (all bits 1) out DDRB, r16 ; write the value in r16 (0xFF) to Data ; Direction Register B LOOP: sbi PortB, 5 ; switch off the LED rcall delay_05 cbi PortB, 5 ; wait for half a second ; switch it on rcall delay_05 ; wait for half a secon rjmp LOOP ; jump to loop DELAY_05: ; the subroutine: ldi r16, 31 ; load r16 with 31 OUTER_LOOP: ; outer loop label ldi r24, low(1021) ; load registers r24:r25 with 1021, our new ; init value ldi r25, high(1021) ; the loop label DELAY_LOOP: ; "add immediate to word": r24:r25 are ; incremented adiw r24, 1 ; if no overflow ("branch if not equal"), go ; back to "delay_loop" brne DELAY_LOOP dec r16 ; decrement r16 brne OUTER_LOOP ret ; and loop if outer loop not finished ; return from subroutine
في حين بفضل API ، فإن التسهيلات كاملة ، كتابة الكود المكافئ التالي بمستوى عالٍ (أقصر بكثير وأكثر سهولة):
<br data-mce-bogus="1"> int ledPin = 13; // LED que se encuentra en el pin 13 void setup(){ pinMode(ledPin, OUTPUT); // El p1n 13 será una salida digital } void loop(){ digitalWrite(ledPin, HIGH); // Enciende el LED delay(1000); // Pausa de 1 segundo digitalWrite(ledPin, LOW); // Apaga el LED delay(1000); // Pausa de 1 segundo
الاختلافات مع ABI
ABI هو مصطلح أقل شهرة ، وهو أ واجهة التطبيق الثنائية ، أو واجهة التطبيق الثنائية باللغة الإنجليزية. في هذه الحالة ، تكون واجهة بين وحدات البرنامج ، بشكل عام بين مكتبة أو نظام تشغيل لغة الآلة للبنية التي أنت فيها: SPARC ، AMD64 ، ARM ، PPC ، RISC-V ، إلخ.
بفضل ABI ، يتم تحديد طريقة استدعاء الوظائف ، تنسيق ثنائي والتي يمكنها فهم الجهاز الذي تقوم بتجميعه أو مكالمات النظام ، وكيفية التعامل مع الاستثناءات ، وكيفية تمرير البيانات ، وما إلى ذلك.
الاختلافات مع الإطار
Un إطار العمل أو إطار العمل هو أكثر من مجموعة من الأدوات تحت تصرفك للمساعدة في تطوير مشروع معين. عادة ما يضع العمل الشائع بعض معايير الترميز ، ويوفر مكونات مفيدة ، وما إلى ذلك. على سبيل المثال ، JUnit هو إطار عمل لـ Java ، أو Symfony / Cake لـ PHP ، إلخ.
الاختلافات مع SDK و NDK
SDK هي مجموعة أدوات تطوير البرامج، وهي مجموعة أدوات تطوير البرامج. يتجاوز ما هو إطار عمل أو API. من الأمثلة على ذلك Android Studio أو iOS xCode ، إلخ. على سبيل المثال ، الأول ، بالإضافة إلى Android API نفسه ، يشتمل أيضًا على بيئة تطوير متكاملة أو بيئة تطوير متكاملة للبرمجة والتجميع والمكتبات والأدوات وما إلى ذلك.
وعلاوة على ذلك، NDK (مجموعة تطوير السكان الأصليين) إنه مكمل. على سبيل المثال ، يسمح Android NDK للمطورين بإعادة استخدام كود C / C ++ من خلال تقديمه إلى التطبيقات من خلال JNI (واجهة Java الأصلية) ...
الاختلافات مع المكتبة
وأخيرا، المكتبة عبارة عن مجموعة من التعليمات البرمجية المصدر القابلة لإعادة الاستخدام التي تجعل الحياة أسهل للمبرمجين. على سبيل المثال ، يوجد داخل مكتبة C stdio.h وظيفة printf لطباعة النص على الشاشة. لكي يكون هذا ممكنًا ، هناك حاجة إلى رمز مصدر يجعل نظام التشغيل يقوم بهذه المهمة. ولكن نظرًا لأنه شيء متكرر جدًا يتم استخدامه بشكل متكرر ، فببساطة عن طريق استدعاء تلك المكتبة ، يمكنك الاستفادة من printf دون كتابة كل التعليمات البرمجية من البداية. بمعنى آخر ، بعبارة أخرى ، يمكن اعتبارها كتلًا مسبقة الصنع.
يمكن الخلط بين المكتبة وواجهة برمجة التطبيقات بسهولة ، في الواقع ، المكتبات ملفوفة داخل API. مثال سي العمومية...
آمل أن يكون لديك فكرة بعد ذلك أكثر وضوحًا حول ماهية API و ABI وإطار العمل و SDK والمكتبة ، بالإضافة إلى القدرة على التمييز بينها من الآن فصاعدًا.