ما هو API؟

محتوى



تومض كلمة "API" في الوظائف الشاغرة ، حتى بالنسبة للمبتدئين في الاختبار. إما REST API ، ثم SOAP API ، ثم مجرد API. أي نوع من الحيوانات هذا؟ دعونا معرفة ذلك!

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

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

ولكن حتى لو لم يكن لديك تكامل مع الأنظمة الأخرى ، فلا يزال لديك واجهة برمجة تطبيقات! لأن النظام داخل نفسه يتصل أيضا عبر api. وبينما يقوم المطور الأمامي بنشر واجهة المستخدم الرسومية بشكل كبير (واجهة رسومية) ، يمكنك:

  • أن تشعر بالملل أثناء الانتظار ؛
  • تحقق من منطق عمل API

بالطبع ، أنا مع الخيار الثاني! لذلك دعونا نفهم ما هو API. يمكنك مشاهدة الفيديو على يوتيوب ، أو قراءته كمقال.

ما هو API؟


صورة

API (واجهة برمجة التطبيقات) هي عقد يوفره البرنامج. "يمكن الاتصال بي بهذه الطريقة وأتعهد بذلك وذاك."

إذا تم ترجمتها إلى اللغة الروسية ، فستكون كلمة "عقد". اتفاق بين الطرفين ، كاتفاق لشراء سيارة:

  • مسؤولياتي هي جعل هذا المبلغ
  • واجب البائع هو إعطاء السيارة.

يمكنك ترجمة ، نعم. ولكن لا أحد يفعل ذلك ¯ \ _ (ツ) _ / ¯

الجميع يستخدم كلمة "عقد". مقبول جدا. بالإضافة إلى ذلك ، يتم تضمين هذه الكلمة في اسم نمط التطوير:

  • الكود أولاً - نكتب الكود أولاً ، ثم ننشئ عقدًا عليه
  • العقد أولاً - أولاً ننشئ عقدًا ، ثم نكتب أو ننتج رمزًا (في هذه المقالة سأتحدث عن هذا النمط)

لا نقول "عقد لبيع سيارة"؟ لذلك المطورين لا يقولون "العقد". اتفاق ضمني.

API - مجموعة الميزات


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

وفقًا لذلك ، يجيب API عن السؤال "كيف يمكنني الاتصال بنظامي؟" ، ويشمل:

  • العملية نفسها التي يمكننا القيام بها
  • إدخال البيانات
  • بيانات الإخراج (محتوى البيانات أو رسالة خطأ).

صورة

هنا يمكنك أن تقول لي:

- هم ، انتظر. العملية ، بيانات المدخلات ، بيانات المخرجات - كل هذا يشبه إلى حد كبير وصف الوظيفة!

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

ونعم! سوف تكون على حق أن التعاريف متشابهة. لماذا؟ نعم ، لأن واجهة برمجة التطبيقات عبارة عن مجموعة من الوظائف. قد تكون هذه وظيفة واحدة ، أو قد تكون كثيرة.

صورة

كيف يتم تجميع الميزة


نعم لا يهم. كما يريد المطور ، وسوف المجموعة. على سبيل المثال ، يمكنك تجميع واجهة برمجة التطبيقات حسب الوظيفة. هذا هو:

  • واجهة برمجة تطبيقات منفصلة لدخول النظام ، حيث سيكون التسجيل والترخيص ؛
  • واجهة برمجة تطبيقات منفصلة لإعداد التقارير - التقرير 1 ، التقرير 2 ، التقرير 3 ... التقرير ن. بالنسبة للتقارير المختلفة ، لدينا صيغ مختلفة = وظائف مختلفة. ونحن جميعا نجمعها في مجموعة واحدة ، api للإبلاغ.
  • واجهة برمجة تطبيقات نظام دفع منفصل - هناك وظيفة للعمل مع كل بنك.
  • ...

صورة

لا يمكنك التجميع على الإطلاق ، ولكن إنشاء واجهة برمجة تطبيقات واحدة مشتركة.

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

صورة

اتضح أنه يوجد في نظامنا العديد من واجهات برمجة التطبيقات المختلفة ، ولكل منها عقد مكتوب. يوضح كل عقد بوضوح العمليات التي يمكن تنفيذها ، والوظائف التي ستكون هناك

صورة

وبالطبع ، يمكن إعادة استخدام الوظائف. وهذا هو ، يمكن أن تدرج نفس الوظيفة في مجموعات مختلفة ، في api مختلفة. لا أحد يحرم هذا.

صورة

اتضح أن المطور يأتي بنوع API الذي سيحصل عليه. إما أن يعمم أو يوزع وفقًا للوظيفة أو بعض المعايير الخاصة به ، ويضيف في كل api مجموعة من الوظائف التي يحتاجها.

ماذا تعني كلمة "واجهة"


- انتظر لحظة ، عليا! كتبت بنفسك أعلاه أن واجهة برمجة التطبيقات هي واجهة برمجة التطبيقات. لماذا تتحدث بعد ذلك عن العقد ، على الرغم من وجود واجهة الكلمة؟

نعم ، لأنه في البرمجة العقد هو الواجهة. في الوصف الكلاسيكي لـ OOP (البرمجة الشيئية) هناك 3 حيتان:

  1. التغليف
  2. ميراث
  3. تعدد الأشكال

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

ليس دائمًا يوفر البرنامج واجهة رسومية. يمكن أن يكون SOAP أو واجهة REST أو API آخر. لاستخدام هذه الواجهة ، يجب أن تفهم:

  • ماذا تدخل
  • ماذا يخرج
  • ما هي الاستثناءات التي تحتاج إلى معالجة.

يعمل المستخدمون مع واجهة المستخدم الرسومية - واجهة المستخدم الرسومية . برامج العمل مع API - واجهة برمجة التطبيقات . لا يحتاجون إلى رسومات ، فقط عقد.

كيف يتم استدعاء API


يمكنك الاتصال بـ api إما بشكل مباشر أو غير مباشر.

مباشرة:

  1. يستدعي النظام وظائف داخل نفسه.
  2. يستدعي النظام طريقة نظام آخر
  3. رجل يدعو وسيلة
  4. طرق السحب التلقائي

بشكل غير مباشر:

  1. يعمل المستخدم مع واجهة المستخدم الرسومية

استدعاء API مباشرة


1. يستدعي النظام وظائف داخل نفسه


أجزاء مختلفة من البرنامج التواصل بطريقة أو بأخرى مع بعضها البعض. يفعلون ذلك على مستوى البرنامج ، أي على مستوى واجهة برمجة التطبيقات!

هذه هي أسهل طريقة للاستخدام ، لأن مؤلف واجهة برمجة التطبيقات التي يتم استدعاؤها هو المطور. وهو مستهلكه! لذلك ، لا توجد مشاكل مع الوثائق غير ذات الصلة =)

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


2. يستدعي النظام طريقة نظام آخر


لكن هذه حالة نموذجية يختبرها المختبرون في الأعداد الصحيحة. أو المختبرين الذين يقومون باختبار تكامل نظامهم مع شخص آخر.

نظام واحد يسحب api بعض طريقة نظام آخر. قد تحاول الحصول على البيانات من نظام آخر. أو العكس ، أرسل البيانات إلى هذا النظام.

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

أقوم بربط تلميحات API. والآن ، عندما يبدأ المستخدم في إدخال العنوان على موقعي ، يرى المطالبات من Dadata . كيف اتضح:

  • يدخل رسالة على موقعي
  • يرسل موقعي طلبًا في تلميحات API Dadat
  • إرجاع Dadata الجواب
  • يعالج موقعي ذلك ويعرض النتيجة للمستخدم.

هناك الكثير من الخطوات! وهكذا لكل شخصية دخلت. المستخدم لا يرى هذا التفاعل ، لكنه كذلك.

وبالطبع ، لا تنسى الحالة عندما نطور طريقة API. والتي لا يمكن استدعاؤها إلا من خلال SOAP ، فلا يمكن العثور عليها في الواجهة. ما طلب العميل ، فعلنا ¯ \ _ (ツ) _ / ¯

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

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

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

في هذه الحالة ، عادة ما يكون لديك TK ، وفقًا لطريقة عمل API. مهمتك هي التحقق من ذلك. مهمة نموذجية للاختبار ، ما عليك سوى إضافة تصميم الاختبار القياسي إلى اختبار ميزات اختبار واجهة برمجة التطبيقات ، وكل شيء يتعلق بالقبعة!

(ما الذي يجب اختباره بالضبط في واجهة برمجة التطبيقات - سأقول في مقالة منفصلة بعد ذلك بقليل)


3. الشخص يدعو الأسلوب


الأسباب مختلفة:

  1. لتسريع العمل
  2. لتوطين الخطأ (أين المشكلة؟ على الخادم أو العميل؟)
  3. لاختبار المنطق دون يدور الحافة

إذا كان النظام يوفر واجهة برمجة تطبيقات (API) ، فعادة ما يكون من الأسهل التخلص منها بدلاً من القيام بالشيء نفسه عبر واجهة رسومية. علاوة على ذلك ، يمكن حفظ استدعاء API في الأداة. بمجرد الحفظ - يمكنك التقديم في أي قاعدة ، حتى لو تم تنظيفها 10 مرات في اليوم.

على سبيل المثال نذهب مرة أخرى إلى المستخدمين . إذا أردنا إنشاء مستخدم ، فنحن بحاجة لملء الكثير من الحقول!

صورة

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

ملء الحقول يدويا أمر محزن ومحبط! وإذا كنت بحاجة إلى تكرار هذا كل أسبوع أو يوم على قاعدة اختبار نظيفة - كابوس بشكل عام. هذه هي الأولوية الأولى على الفور لأتمتة الإجراءات الروتينية.

وفي هذه الحالة ، يؤدي دور الأتمتة ... ساعي البريد. يمكن إنشاء مستخدم من خلال طلب CreateUser REST. بمجرد تسجيل البيانات "الحقيقية مثل" العادية ، في كل مرة نستخدمها. الربح!

بدلاً من ملء النموذج يدويًا (دقيقة واحدة من ملء الحقول بدون تفكير بقيم "lprulpk") ، نحصل على ثانية واحدة من الضغط على زر "إرسال". في هذه الحالة ، ستكون القيم أكثر ملاءمة.

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

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

4. طرق السحب التلقائي


هناك هرم الأتمتة النموذجي:

  • اختبارات واجهة المستخدم الرسومية هي اختبار صريح ، "كيف يمكن للمستخدم القيام بذلك."
  • اختبارات واجهة برمجة التطبيقات - ننتقل إلى المستوى أدناه ، ونطرد زائدة عن الحاجة.
  • اختبارات الوحدة - اختبارات لوظيفة واحدة

صورة

تشير كلمة API إلى ما سيتم استخدامه في الاختبارات ツ

دعنا نقول لدينا:

  • العملية : تقرير التحميل ؛
  • عند الإدخال : البيانات من التعديلات اليدوية أو التلقائية أو من بعض الأماكن الأخرى ؛
  • الإخراج : تقرير بنيت وفقا لقواعد معينة

تقرير قواعد البناء:

  • الخلية 1 : س - ص
  • الخلية 2 : Z * 6
  • ...

صورة

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

اختبارات API هي نفسها ، فقط من دون متصفح. نحن ببساطة إرسال البيانات إلى المدخلات والتحقق من البيانات في الإخراج. على سبيل المثال ، يمكنك إدخال الإجابة النهائية في Excel ، والسماح للروبوت بالتوفيق بينها ، هل البيانات مملوءة بشكل صحيح؟ تحديد موقع المشكلة يصبح أسهل.

اختبارات الوحدة هي عندما نختبر كل وظيفة على حدة. ننظر بشكل منفصل في حساب الخلية 1 ، بشكل منفصل عن الخلية 2 ، وهكذا. تتم مطاردة مثل هذه الاختبارات بسرعة ، ومن السهل تحديد الخلل عليها.


استدعاء API غير المباشر


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

أي عندما يفتح المستخدم النظام ويحاول تنزيل التقرير ، لا يهم كيف يعمل النظام ، وما نوع السحر الذي بداخله. لديه زر "تقرير التنزيل" ، والذي ينقر عليه. يعمل المستخدم من خلال واجهة المستخدم الرسومية (واجهة المستخدم الرسومية).

صورة

ولكن في الواقع ، هناك واجهة برمجة تطبيقات (API) ضمن واجهة المستخدم الرسومية هذه. وعندما ينقر المستخدم على الزر ، يقوم الزر باستدعاء وظيفة إنشاء التقرير.

صورة

ويمكن لوظيفة بناء التقارير استدعاء 10 وظائف مختلفة بالفعل ، إذا كان ذلك ضروريًا.

والآن يرى المستخدم تقريرًا جاهزًا أمامه. ودعا API معقدة دون معرفة ذلك!

ماذا يعني اختبار API؟


بادئ ذي بدء ، نعني اختبار VIA API. "اختبار واجهة برمجة التطبيقات" هو مصطلح شائع الاستخدام ، يقولون حقًا ذلك ، ولكن من الناحية الفنية ، فإن المصطلح غير صحيح. نحن لا نختبر واجهة برمجة التطبيقات ، ولا نختبر واجهة المستخدم الرسومية (واجهة رسومية). نحن نختبر نوعًا من الوظائف من خلال واجهة رسومية أو برمجية.

لكن هذا تعبير ثابت. يمكنك استخدامه وقول "اختبار API". وعندما نتحدث عن ذلك ، فإننا نعني:

  • اختبارات مستوى API الذاتي
  • أو التكامل بين نظامين مختلفين.

التكامل - عندما يتصل نظام ما بنظام آخر من خلال نوع من بروتوكول نقل البيانات. وهذا ما يسمى API عن بعد ، أي التواصل عبر الشبكة ، عبر بعض البروتوكول (HTTP ، JMS ، إلخ). على عكس ذلك ، هناك أيضًا واجهة برمجة تطبيقات محلية (تُعرف أيضًا باسم "واجهة الذاكرة المشتركة API") - وهي واجهة برمجة التطبيقات التي يتواصل البرنامج بواسطتها أو يتواصل مع برنامج آخر داخل نفس الذاكرة الظاهرية.

صورة

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

وإذا رأيت "اختبار واجهة برمجة التطبيقات" في الوظيفة الشاغرة ، فمن المحتمل أن يتضمن ذلك إمكانية الاتصال بخدمة SOAP أو REST واختبارها. على الرغم من أنه يستحق دائما توضيح!

ملخص


API (واجهة برمجة التطبيقات) هي عقد يوفره البرنامج. "يمكن الاتصال بي بهذه الطريقة وأتعهد بذلك وذاك."

يتضمن العقد:

  • العملية نفسها التي يمكننا القيام بها
  • إدخال البيانات
  • بيانات الإخراج (محتوى البيانات أو رسالة خطأ). ".

Source: https://habr.com/ru/post/ar464261/


All Articles