لا يزال الحفاظ على وثائق الخدمات المصغرة المحدثة يتطلب أقصى قدر من الانضباط في التنمية ، وتكاليف العمالة الكبيرة. على سبيل المثال ، يقدم GraphQL نهجًا معقولاً للغاية لإنشاء الوثائق ، حيث ترتبط الوثائق ارتباطًا وثيقًا برمز البرنامج وهذا يضمن الامتثال بنسبة 100٪ للوثائق والخدمات الموثقة. ومع ذلك ، فإن النهج غير المعتاد لـ GraphQL للمطورين الذين اعتادوا على REST-API ، لا يزال يجعل من الصعب الترويج لهذه التكنولوجيا في التطوير العملي للتطبيقات. هنا يمكنك أن تتذكر SOAP ، الذي حل لفترة طويلة مشكلة مطابقة الوثائق والخدمات ، ولكن بسبب التعقيد المفرط ، لم يتجذر بين الجماهير العريضة للمطورين.
أود أن أجد مثل هذا المكدس من التقنيات لتطوير الخدمات الدقيقة التي قدمت نفس التوثيق الذاتي لرمز البرنامج عند تطوير الخدمات الصغيرة REST-API "التقليدية". وهو ، كما اتضح ، موجود بالفعل.
نحدد الممثلين والفنانين الذين سيشاركون في مثالنا الصغير.
قاعدة بيانات ArangoDB هي قاعدة بيانات مختلطة وموجهة بالرسومات البيانية.
UPD كان معرفة أكثر تفصيلاً بقاعدة البيانات هذه سبب خيبة أمل أخرى. كما اتضح ، بعد أن تجاوزت قاعدة البيانات حدًا غير محدود ، والذي يقتصر على ذاكرة الوصول العشوائي المجانية ، تبدأ قاعدة البيانات في التباطؤ - تتوقف فقط مع الخادم. في الوقت نفسه ، تم التعبير عن افتراضات خجولة بأن الانتقال إلى محركات التخزين الجديدة ستعمل بشكل أفضل ، والتي لم يتم تأكيدها بعد.
Foxx هو إطار عمل خدمة مصغر مدمج في قاعدة بيانات ArangoDB. يتم تشغيله على محرك JavaScript ، والذي (على عكس nodejs) يمكن تنفيذه في وقت واحد في عدد غير محدود من الخيوط المتوازية (لا تحجب بعضها البعض) ، ونتيجة لذلك لا توجد حاجة للوعد / من / canch و async / انتظار بنيات. على النقيض من mongodb ، حيث لا يوصى بإساءة استخدام إجراءات الخادم وقواعد البيانات العلائقية ، حيث يتم استخدام الإجراءات المخزنة أيضًا بعناية وبالتأكيد لا تتفاعل مع العملاء (المتصفحات وتطبيقات الهاتف المحمول ، وما إلى ذلك) عبر REST-API ، فهو إطار عمل الخدمات الصغيرة تم تصميم Foxx خصيصًا لتطوير الخدمات الدقيقة التي تتواصل مباشرةً مع بروتوكول http مع العملاء.
Swagger هي بيئة برمجيات مفتوحة المصدر مدعومة بنظام بيئي كبير من الأدوات التي تساعد المطورين على تطوير خدمات الويب RESTful وإنشائها وتوثيقها واستهلاكها. على الرغم من أن معظم المستخدمين يتعرفون على Swagger باستخدام واجهة مستخدم Swagger ، فإن مجموعة أدوات Swagger تتضمن دعمًا للتوثيق التلقائي وإنشاء التعليمات البرمجية وإنشاء حالة الاختبار.
حقيقة أن Swagger يتضمن دعمًا لإنشاء التعليمات البرمجية هو موقف مناقض للحالة التي نود الحصول عليها - عندما يدعم الرمز إنشاء الوثائق. ما يقدمه لنا ArangoDB + Foxx يشمل فقط الخيار المعاكس. عندما يولد رمز الخدمة الصغيرة دائرة لـ Swagger. ومع ذلك ، يمكنك الآن التحقق من ذلك بنفسك بعد القيام بحد أدنى من العمل.
يجب أن يكون لديك ArangoDB مثبتًا من أجل تنفيذ المزيد من الإجراءات.
- ننتقل إلى لوحة الإدارة ونحدد العنصر لإنشاء خدمات خدمة مايكرو جديدة-> إضافة خدمة-> جديد.
- نملأ النموذج المطلوب في النموذج المفتوح. في حقل "مجموعات المستندات" ، أضف اسم مجموعة المستندات التي سيتم إنشاؤها عند نشر الخدمة المصغرة. على سبيل المثال ، القطط.
- نضغط على زر التثبيت ، وأدخل في حقل عنوان url الذي سيتم تركيب الخدمة عليه.
عند تثبيت خدمة صغيرة ، لكل مجموعة من حقل "مجموعات المستندات" (انظر القسم 2) ، سيتم إنشاء مسارات تنفذ عمليات CRUD باستخدام طرق POST و GET و PUT و DELETE. ومع ذلك ، هذه ليست سوى مسودة من الطرق التي يمكنك تغييرها أو حذفها أو إضافة طرق جديدة. لقد اخترنا مجموعة واحدة عند إنشاء خدمة صغيرة (قطط) ، على الرغم من أننا ربما لم نقم بذلك ، ولكننا أضفنا كل شيء يدويًا في وقت لاحق.
الآن ، تحتوي مجموعة القطط على مسارات لعمليات CRUD ، ويمكننا البدء في استدعاء هذه المسارات من لوحة إدارة قاعدة البيانات عن طريق تحديد علامة التبويب API (الخدمات -> [Microservice Name] -> API). تحتوي علامة التبويب هذه على واجهة Swagger المألوفة. من الممكن أيضًا نشر واجهة Swagger على مسار خارجي ، لا يمكن الوصول إليه ليس فقط من خلال لوحة المشرف ، ولكن أيضًا كعنوان URL عادي.
إذا حاولنا إضافة المستند إلى مجموعة القطط باستخدام طريقة POST {"name": "Tom"} ، نحصل على الحالة مع وجود خطأ. لأن حقل الاسم الذي لم نحدده بعد. لذلك ، سنستمر في العمل مع لوحة إدارة ArangoDB.
4. من أجل تطوير أكثر ملاءمة ، يوفر ArangoDB وضع التطوير ، الذي يتم تمكينه في علامة التبويب الإعدادات (الخدمات -> [اسم الخدمة الصغيرة] -> تطوير مجموعة الإعدادات)
الآن يمكنك تغيير رمز الخدمة العالمية وملاحظة النتيجة على الفور (بدون نشر إضافي). يمكن العثور على الدليل الذي يوجد فيه رمز برنامج microservice في لوحة الإدارة في علامة التبويب معلومات (خدمات -> [اسم Microservice] -> معلومات).
دعونا نرى كيف يبدو تعريف مسار POST.
'use strict'; const dd = require('dedent'); const joi = require('joi'); const httpError = require('http-errors'); const status = require('statuses'); const errors = require('@arangodb').errors; const createRouter = require('@arangodb/foxx/router'); const Cat = require('../models/cat'); const cats = module.context.collection('cats'); const keySchema = joi.string().required() .description('The key of the cat'); const ARANGO_NOT_FOUND = errors.ERROR_ARANGO_DOCUMENT_NOT_FOUND.code; const ARANGO_DUPLICATE = errors.ERROR_ARANGO_UNIQUE_CONSTRAINT_VIOLATED.code; const ARANGO_CONFLICT = errors.ERROR_ARANGO_CONFLICT.code; const HTTP_NOT_FOUND = status('not found'); const HTTP_CONFLICT = status('conflict'); const router = createRouter(); module.exports = router; router.tag('cat'); router.post(function (req, res) { const cat = req.body; let meta; try { meta = cats.save(cat); } catch (e) { if (e.isArangoError && e.errorNum === ARANGO_DUPLICATE) { throw httpError(HTTP_CONFLICT, e.message); } throw e; } Object.assign(cat, meta); res.status(201); res.set('location', req.makeAbsolute( req.reverse('detail', {key: cat._key}) )); res.send(cat); }, 'create') .body(Cat, 'The cat to create.') .response(201, Cat, 'The created cat.') .error(HTTP_CONFLICT, 'The cat already exists.') .summary('Create a new cat') .description(dd` Creates a new cat from the request body and returns the saved document. `);
يعتمد كل من التحقق والتوثيق على استخدام مخطط كائن. سنقوم بإجراء تغييرات طفيفة عليه بإضافة حقل الاسم:
'use strict'; const _ = require('lodash'); const joi = require('joi'); module.exports = { schema: {
بالانتقال إلى الإشارة المرجعية لواجهة برمجة التطبيقات ، يمكنك التأكد من تغيير النظام ويمكن الآن إضافة الكائن الذي يحتوي على حقل الاسم إلى مجموعة القطط.
apapacy@gmail.com
12 نوفمبر 2018.