API لإنشاء صور جذابة لمنتجات الشركة المصنوعة من الشوكولاتة أو الذهب أو LEGO. يعتمد التنفيذ المرجعي على Openai (Dall-E ، GPT-3).
هناك بعض منتجات الشركات المذهلة الجذابة المصنوعة من الشوكولاتة أو LEGO
مستوحاة من إمكانيات الصور والتحديد النصية في Openai ، تقوم واجهة برمجة التطبيقات هذه بإنشاء صور للمنتجات ، والشركات تشتهر بها ، وتحولها إلى الذهب أو الشوكولاتة أو LEGO أو أي مادة أخرى.
اتبع وثائق API التي تم إنشاؤها وانقر فوق الزر "تشغيل في Postman"
تم إنشاء هذا الخادم باستخدام مشروع OpenAPI Generator. يتيح لك مولد الرمز ، ورمزه الذي تم إنشاؤه تطوير نظامك بموقف من واجهة برمجة التطبيقات (API) ، حيث يكون عقد API هو مرساة مشروعك ومحدده ، ويهدف التعليم عقد API.
nodejs> = 10.6
NPM> = 6.10.0
تمت كتابة الرمز على جهاز Mac ، لذا بافتراض أن الجميع يجب أن يعملوا بسلاسة على أجهزة الكمبيوتر المستندة إلى Linux. ومع ذلك ، لا يوجد سبب لعدم تشغيل هذه المكتبة على الآلات المستندة إلى Windows. إذا وجدت مشكلة متعلقة بـ OS ، فيرجى فتح مشكلة وسيتم حلها.
استخدم مولد OpenAPI لإنشاء التطبيق الخاص بك: على افتراض أن لديك Java (1.8+) ، ولديك الجرة لإنشاء التطبيق ، Run: java -jar {path_to_jar_file} generate -g nodejs-express-server -i {openapi yaml/json file} -o {target_directory_where_the_app_will_be_installed}
إذا لم يكن لديك الجرة ، أو لا ترغب في تشغيل Java من الجهاز المحلي الخاص بك ، اتبع التعليمات على صفحة OpenApitools. يمكنك تشغيل البرنامج النصي عبر الإنترنت ، وعلى Docker ، وطرق أخرى مختلفة.
انتقل إلى الدليل الذي تم إنشاؤه قمت بتعريفه. هناك خادم NodeJS-ExpressJS يعمل بالكامل في انتظارك. هذا مهم - الرمز الخاص بك هو تغيير وتحديث! انظر إلى config.js وانظر إلى أن الإعدادات هناك موافق - سيتم تشغيل الخادم على المنفذ 3000 ، وسيتم تحميل الملفات على دليل جديد "TOPLOADED_FILES".
سيقوم الخادم بإعداد نفسه على ملف OpenApi.yaml الموجود تحت /api/openapi.yaml. هذا ليس بالضبط application/json
الملف الذي استخدمته لإنشاء التطبيق: I. الثاني. تحتوي كل عملية على عنصر جديد إضافي إليه- x-eov-operation-handler: controllers/PetController
التي توجه المكالمة إلى هذا الملف. ثالثا. لدينا تطبيق Java يترجم OperationId إلى طريقة ، ونص نصي NodeJS الذي يقوم بنفس العملية لاستدعاء هذه الطريقة. كلاهما يحولون الطريقة إلى camelCase
، ولكن قد يكون لهما تباين. يرجى الانتباه إلى أسماء العمليات ، ومعرفة أنها ممثلة في أدلة controllers
services
.
خذ الوقت الكافي لفهم بنية التطبيق. قد تكون هناك أخطاء ، وقد تكون هناك إعدادات وحطام أعمال لا تفي بتوقعاتك. بدلاً من إلقاء هذا الحل والبحث عن شيء آخر - تعرف على ما إذا كان يمكنك جعل الرمز الذي تم إنشاؤه يعمل من أجلك. للحفاظ على التفسير قصيرًا (سيتابع شرح أكثر تفصيلاً): يبدأ التطبيق بمكالمة إلى index.js (هذا هو المكان الذي ستقوم فيه بتوصيل DB لاحقًا). إنه يدعو ExpressServer.js وهو المكان الذي يركل فيه Express.js و OpenAPi-validator. هذا ملف مهم. تعلم ذلك. جميع المكالمات إلى نقاط النهاية التي تم تكوينها في مستند OpenApi.yaml ، انتقل إلى controllers/{name_of_tag_which_the_operation_was_associated_with}.js
، وهي طريقة صغيرة جدًا. جميع الأزواج في مجال الأعمال في controllers/Controller.js
، ومن هناك - إلى services/{name_of_tag_which_the_operation_was_associated_with}.js
.
بمجرد أن تفهم ما سيحدث ، قم بتشغيل التطبيق والتأكد من أن كل شيء يعمل كما هو متوقع:
npm start
(بافتراض عدم إجراء تغييرات على config.js)
وثائق API ، ولتحقق من نقاط النهاية المتاحة: http: // localhost: 3000/api-docs/. ل
قم بتنزيل مستند OpenAPI.yaml: http: // localhost: 3000/OpenAPI.
ستعيد كل مكالمة إلى نقطة نهاية تم تعريفها في مستند OpenAPI 200 وقائمة بجميع المعلمات والكائنات التي تم إرسالها في الطلب.
تحتاج نقاط النهاية التي تتطلب الأمان إلى تكوين معالجات أمان قبل أن يتمكنوا من إرجاع استجابة ناجحة. في هذه المرحلة ، سيعودون رمز الاستجابة 401.
في دليل الجذر لدينا (إلى جانب ملفات package.json و config.js و log):
logger.js - حيث نحدد المسجل للمشروع. يستخدم المشروع Winston ، لكن الغرض من هذا الملف هو تمكين المستخدمين من تغيير وتعديل سلوك المسجل الخاص بهم.
index.js - هذا هو الملف "الرئيسي" للمشروع ، ومن هنا نطلق التطبيق. هذا ملف قصير وموجز للغاية ، والفكرة وراء الإطلاق من هذا الملف القصير هي السماح بحالات استخدام الخادم مع معلمات مختلفة (تغيير التكوين و/أو المسجل) دون التأثير على بقية الكود.
ExpressServer.js - جوهر خادم Express.js. هذا هو المكان الذي تتم فيه تهيئة الخادم السريع ، إلى جانب مدقق OpenAPI و OpenAPI واجهة المستخدم والمكتبات الأخرى اللازمة لبدء الخادم الخاص بنا. إذا أردنا إضافة روابط خارجية ، فهذا هو المكان الذي سيذهبون فيه. يستخدم مشروعنا مكتبة Validator الصريحة التي تعمل كخطوة أولى في عملية التوجيه-الطلبات التي يتم توجيهها إلى المسارات المحددة في ملف openapi.yaml
يتم اكتشافها من خلال هذه العملية ، ويتم التحقق من صحة معلماتها وعملية الجسم مقابل المخطط . ستكون النتيجة الناجحة لهذا التحقق من الصحة كائن "Openapi" الجديد الذي تمت إضافته إلى الطلب. إذا لم يكن المسار المطلوب جزءًا من ملف OpenApi.yaml ، فإن المدقق يتجاهل الطلب ويمرره ، كما هو ، أسفل تدفق الخادم السريع.
Openapi.yaml - هذا هو عقد OpenAPI الذي سيمثل له هذا الخادم. تم إنشاء الملف باستخدام CodeGen ، ويجب أن يحتوي على كل ما هو مطلوب لتشغيل بوابة API - لا توجد إشارات إلى النماذج/المخططات الخارجية.
حاليا ملف واحد:
Openapirouter.js - هذا هو المكان الذي يحدث فيه التوجيه إلى رمز الواجهة الخلفية. إذا كان كائن الطلب يتضمن كائن openapi
، فإنه يلتقط القيم التالية (التي هي جزء من ملف openapi.yaml
): "X-Openapi-Router-Controller" ، و "X-Openapi-Router-Service". هذه المتغيرات هي أسماء الملفات/الفئات في دلائل وحدات التحكم والخدمات على التوالي. يتم استخراج عملية الطلب أيضًا. يعد OperationID طريقة في وحدة التحكم والخدمة التي تم إنشاؤها كجزء من عملية CodeGen. ترسل عملية التوجيه كائنات الطلب والاستجابة إلى وحدة التحكم ، والتي ستستخرج المتغيرات المتوقعة من الطلب ، وإرسالها للمعالجتها من قبل الخدمة ، وإعادة الاستجابة من الخدمة إلى المتصل.
بعد التحقق من صحة الطلب ، والتأكد من أن هذا ينتمي إلى بوابة API الخاصة بنا ، نرسل الطلب إلى controller
، حيث يتم استخراج المتغيرات والمعلمات من الطلب وإرسالها إلى service
ذات الصلة للمعالجة. تعالج controller
الاستجابة من service
وتبني استجابة HTTP المناسبة لإرسالها إلى المستخدم.
index.js - قم بتحميل جميع وحدات التحكم التي تم إنشاؤها لهذا المشروع ، وتصديرها لاستخدامها ديناميكيًا بواسطة openapiRouter.js
. إذا كنت ترغب في تخصيص وحدة التحكم الخاصة بك ، فمن المستحسن أن ترتبط بوحدة التحكم الخاصة بك هنا ، والتأكد من عدم إعادة كتابة هذا الملف.
Controller.js - المعالج الأساسي لوحدات التحكم التي تم إنشاؤها. تم تصميم وحدات التحكم التي تم إنشاؤها لتكون ضئيلة وعامة قدر الإمكان ، مع الإشارة إلى Controller.js
لمنطق العمل لتحليل المتغيرات والحجج المطلوبة من الطلب ، وبناءً على استجابة HTTP التي سيتم إرسالها مرة أخرى. Controller.js
هو فئة ذات طرق ثابتة.
.JS - رمز تم إنشاؤه تلقائيًا ، ومعالجة جميع العمليات. وحدة التحكم هي فئة تم إنشاؤها مع فئة الخدمة التي سترسل الطلب إليها. كل طلب محدده openapi.yaml
لديه عملية. التشغيل هو اسم الطريقة التي سيتم استدعاؤها. تتلقى كل طريقة الطلب والاستجابة ، ويدعو Controller.js
لمعالجة الطلب والاستجابة ، مع إضافة طريقة الخدمة التي يجب استدعاؤها للمعالجة الفعلية للأعمال.
هذا هو المكان الذي تنتهي فيه بوابة API ، وبدء تشغيل الأعمال الفريدة لتطبيقك. كل نقطة نهاية في openapi.yaml
لديها متغير "X-Openapi-Router" ، وهو اسم فئة الخدمة الموجودة ولدت. عملية نقطة النهاية هي اسم الطريقة التي سيتم استدعاؤها. يوفر الرمز الذي تم إنشاؤه وعدًا بسيطًا بفقرة تجربة/صيد. تنتهي العملية الناجحة بمكالمة إلى Service.js
العامة لإنشاء استجابة ناجحة (رمز الحمولة والاستجابة) ، وسيقوم الفشل بالاتصال Service.js
العامة. يوصى بإنشاء الخدمات تلقائيًا مرة واحدة ، وبعد أن تضيف البناء الأولي طرقًا يدويًا.
index.js - قم بتحميل جميع الخدمات التي تم إنشاؤها لهذا المشروع ، وتصديرها لاستخدامها ديناميكيًا بواسطة openapiRouter.js
. إذا كنت ترغب في تخصيص خدمتك ، فمن المستحسن أن ترتبط بوحدة التحكم الخاصة بك هنا ، والتأكد من عدم إعادة كتابة هذا الملف.
Service.js - فئة فائدة ، بسيطة للغاية ورقيقة في هذه المرحلة ، مع طريقتين ثابتتين لبناء كائن استجابة لنتائج ناجحة وفشل في تشغيل الخدمة. رمز الاستجابة الافتراضي هو 200 للنجاح و 500 للفشل. يوصى بإرسال رموز استجابة أكثر دقة وتجاوز هذه الإعدادات الافتراضية عندما تكون ذات صلة.
.JS - رمز تم إنشاؤه تلقائيًا ، مما يوفر وعدًا كعبًا لكل عملية محددة في openapi.yaml
. تتلقى كل طريقة المتغيرات التي تم تعريفها في ملف openapi.yaml
، ويلتف وعدًا في جملة Try/Catch. يحل الوعد كل من النجاح والفشل في مكالمة إلى فئة الأداة المساعدة Service.js
لبناء الاستجابة المناسبة التي سيتم إرسالها إلى وحدة التحكم ثم إلى المتصل من نقطة النهاية هذه.
servertests.js - اختبارات التحقق من صحة الخادم الأساسية ، والتحقق من أن الخادم قد ارتفع ، وأن دعوة إلى نقطة النهاية ضمن نطاق ملف openapi.yaml
إرجاع 200 ، فإن دعوة إلى مسار خارج هذا النطاق إرجاع 200 إذا كان موجودًا و 404 إن لم يكن.
RoutingTests.js - يمر عبر جميع نقاط النهاية المحددة في openapi.yaml
، ويقوم ببناء طلب وهمية لإرسالها إلى الخادم. يؤكد أن رمز الاستجابة هو 200. في هذه المرحلة طلبات تحتوي على XML أو FormData Fail - حاليًا لا يتم دعمها في جهاز التوجيه.
ExtredPointStestS.JS - ملف اختبار لجميع نقاط النهاية التي يتم تعريفها خارج نطاق OpenApi.yaml. تؤكد أن نقاط النهاية هذه تعيد 200 استجابة.
يجب كتابة الاختبارات المستقبلية للتأكد من أن استجابة كل طلب يتم إرساله يجب أن تتوافق مع الهيكل المحدد في openapi.yaml
. سوف يفشل هذا الاختبار بنسبة 100 ٪ في البداية ، وستكون مهمة فريق التطوير في مسح هذه الاختبارات.
حاليا مفهوم في انتظار ردود الفعل. والفكرة هي أن يتم تعريف الكائنات في OpenApi.yaml كنماذج يتم تمريرها بين الوحدات النمطية المختلفة. سيتوافق هذا مع المبرمجين للتفاعل باستخدام كائنات محددة ، بدلاً من كائنات JSON المحددة بشكل فضفاض. بالنظر إلى طبيعة مبرمجي JavaScript ، الذين يرغبون في العمل مع معاييرهم الخاصة ، قد لا يعمل هذا المفهوم. الحفاظ على هذا هنا للمناقشة المستقبلية والتعليقات.