يوفر البرنامج المساعد hapi محاكاة لواجهات برمجة التطبيقات (APIs) المريحة والمبنية على سلسلة الاستعلام
ملاحظة: لقد انتهى الدعم لهذا المشروع
كان هذا المخطط مملوكًا وصيانته بواسطة Walmart. لقد وصل هذا المشروع إلى نهايته ولم يعد Walmart يدعم هذا المشروع.
لن نقوم بعد الآن بمراقبة مشكلات هذا المشروع أو مراجعة طلبات السحب. أنت حر في الاستمرار في استخدام هذا المشروع بموجب شروط الترخيص أو تشعبات هذا المشروع على مسؤوليتك الخاصة. لم يعد هذا المشروع خاضعًا لبرنامج مكافأة الأخطاء الخاص بـ Walmart أو أي مراقبة أمنية أخرى.
ننصحك باتخاذ الإجراء التالي:
لأسباب أمنية، لا تقوم Walmart بنقل ملكية اتفاقيات إعادة الشراء الأساسية الخاصة بنا على Github أو منصات أخرى إلى أفراد/منظمات أخرى. علاوة على ذلك، نحن لا ننقل ملكية الحزم لأنظمة إدارة الحزم العامة.
إذا كنت ترغب في تقسيم هذه الحزمة ومواصلة التطوير، فيجب عليك اختيار اسم جديد للمشروع وإنشاء الحزم الخاصة بك، وبناء الأتمتة، وما إلى ذلك.
يرجى مراجعة شروط الترخيص لهذا المشروع، والتي تظل سارية حتى بعد إيقاف التشغيل.##curved-carousel
طريقة بسيطة لإنشاء دائرة قابلة للتمرير بشكل لا نهائي، مع انحناء اختياري.
الخيارات التالية متاحة للتكوين.
apiPrefix
سلسلة أو مصفوفة من السلاسل تمثل قاعدة المسارات التي يجب الاستهزاء بها
الإعدادات الافتراضية هي /api
mocksDir
الدليل الذي يحتوي على الملفات الوهمية.
الإعدادات الافتراضية هي __dirname + './mocks'
، حيث __dirname هو هذا المكون الإضافي
mocksAdminPath
عنوان URL نسبي يمكن العثور على صفحة المسؤول الخاصة بهذا المكون الإضافي.
الإعدادات الافتراضية هي /admin/mocks
mocksAdminServerLabels
مجموعة من التصنيفات المستخدمة أثناء تسجيل البرنامج المساعد لـ hapi
الإعدادات الافتراضية لـ ['admin']
enabled
سواء تم تمكين المحاكاة أم لا.
الافتراضيات false
enableForceCookiePage
قيمة منطقية تمثل الطقس أم لا لتسجيل صفحة إعداد ملفات تعريف الارتباط. توفر هذه الصفحة زرًا بسيطًا لتشغيل أو إيقاف تشغيل ملف تعريف الارتباط always_ridicule
، والذي يسمح للعميل بالاشتراك في فرض استجابات وهمية، بغض النظر عن إعدادات الخادم. مفيد للمختبرين المبتدئين أو الأجهزة التي يكون فيها إنشاء الإشارات المرجعية مرهقًا. الافتراضيات false
forceCookiePath
عنوان URL نسبي يمكن العثور على صفحة إعداد ملفات تعريف الارتباط فيه.
الإعدادات الافتراضية هي /cookie
forceCookieValue
سلسلة تمثل قيمة ملف تعريف الارتباط always_ridicule
. يسمح للخوادم بالحصول على طريقة اشتراك متاحة للعامة دون أن يكون ملف تعريف الارتباط الضروري المحدد معروفًا للعامة. قيمة expires
هي 30 دقيقة من وقت ضبطها.
الإعدادات الافتراضية إلى "true"
داخل mocksDir
، قم بإنشاء ملف ridicule.js
الذي يعرض مسارات مصفوفة hapi في module.exports
الخاص به.
module . exports = [ {
method : 'GET' ,
path : '/hello' ,
handler : function ( request , reply ) {
reply ( 'hello world' ) ;
}
} , {
method : 'POST' ,
path : '/goodbye' ,
handler : function ( request , reply ) {
reply ( 'thanks for all the fish' ) ;
}
} ]
في بداية الخادم، يتم تسجيل جميع المسارات التي تم تكوينها ببادئة عشوائية مكونة من 40 حرفًا. (على سبيل المثال، تم الاستهزاء بالمسار /foo
في /(uuid)/foo
)
عند تمكين الخادم الوهمي، تتم مطابقة جميع الطلبات الواردة مع apiPrefix
الذي تم تكوينه. عند العثور على تطابق، تتم إعادة توجيه الطلب داخليًا إلى معالج المسار الوهمي.
لديك القدرة على الإنقاذ عند الاستهزاء بالطلب في المعالج (مفيد عندما تسخر فقط من مجموعة فرعية من نظام قائم على سلسلة الاستعلام، نظرًا لأن hapi يتطابق مع المسارات فقط). ما عليك سوى require
بـrididcule في الملف، ثم استدعاء ridicule.bailout(req, res)
، حيث يكون req
و res
كائني الطلب والاستجابة داخل المعالج.
الطريقة الأكثر شيوعًا للاستهزاء بالطلبات هي فقط إرجاع بيانات ملف json داخل واجهة reply()
لمعالج المسار الخاص بك.
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
ومع ذلك، لديك القدرة على إضافة بيانات تعريف إضافية إلى الاستجابة، مثل الرؤوس المخصصة ورموز حالة HTTP. كل ما عليك فعله هو تغليف ملف json الموجود لديك داخل كائن آخر، وتعيين الملف الأصلي إلى payload
وإضافة حقل ridiculeSettings
.
لذلك هذا الطلب
{
"foo" : " bar "
}
يصبح
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
تجدر الإشارة إلى أنه نظرًا لأنه تمت إضافته في نهاية تدفق طلب hapi، ونتيجة لذلك، يجب تضمين payload
في الملف الوهمي، وبالتالي يقتصر على دعم كائنات السلسلة وJSON فقط، وليس التدفقات أو المخازن المؤقتة.
هناك ثلاث طرق لتمكين/تعطيل المحاكاة.
إعداد تكوين هابي
يمكنك تغيير الخيار enabled
في الإعداد الخاص بك إلى true
. وهذا يمكّنه في البداية، ولكن يمكن أن يتغير في المستقبل عن طريق ..
تبديل زر صفحة المسؤول
يمكنك تشغيل أو إيقاف تشغيل النماذج في أي وقت عن طريق زيارة المسار الذي تم تكوينه ضمن mocksAdminPath
. بشكل افتراضي، هذا هو /admin/mocks
. لاحظ أن هذا مسجل خلف علامة hapi (يمكن تكوينه في الإعداد الخاص بك، ولكن ['admin']
بشكل افتراضي). يتيح لك ذلك إرسال السخرية إلى موقع الإنتاج الخاص بك، وإتاحة مفتاح التبديل على منفذ لا يمكن الوصول إليه بشكل عام.
ملف تعريف الارتباط على العميل
إذا تم تعيين ملف تعريف الارتباط always_ridicule
بالقيمة من forceCookieValue
التي تم تكوينها (القيمة الافتراضية هي السلسلة "true"، على سبيل المثال always_ridicule="true"
) على العميل، فسيتم دائمًا تقديم النماذج المقلدة التي تم تكوينها (حتى يتم حذفها بالطبع ). بالإضافة إلى ذلك، فإن always_ridicule=false
ستجبر العميل على عدم الاستهزاء به أبدًا، بغض النظر عن إعدادات الخادم الحالية.
نظرًا لأن hapi يطابق المسارات الموجودة على المسارات فقط (وليس أي معلمات سلسلة استعلام)، فيجب أن تكون قادرًا على مطابقة أكثر من استعلام واحد مقابل المسار. لذلك، السخرية توفر طريقة ridicule.validate
.
ridicule.validate
هي دالة تأخذ زوج الطلب والرد، ثم كائن التحقق من الصحة، الذي يتكون من كائن validator
، ووظيفة callback
.
كائن validator
هو كائن عادي، حيث يمثل كل مفتاح مفتاح سلسلة الاستعلام، وتكون القيمة إما سلسلة أو RegExp أو وظيفة تطابق قيمة القيمة المقابلة في سلسلة الاستعلام.
على سبيل المثال، سلسلة الاستعلام التالية
?category=Music&genre=ska&year=2012
سوف تتطابق مع التحقق من الصحة التالي
...
handler : function ( request , reply ) {
ridicule . validate ( request , reply , {
validator : {
category : 'Music' ,
genre : function ( value ) {
return value === 'ska' || value === 'rocksteady'
} ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( { 'all' : 'good' } ) ;
}
} )
}
. . .
بالطبع يمكنك بسهولة إجراء سلسلة من الشيكات المتعددة
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : {
foo : 'bar' ,
baz : 'biz'
} ,
callback : function ( request , reply ) {
reply ( { 'wordsAre' : 'hard' } ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
قد تواجه مشكلة حيث تريد الاستهزاء بمجموعة فرعية من طلباتك عند نقطة النهاية، ولكن ليس جميعها. في هذه الحالة، Ridicule يوفر وظيفة مساعدة مفيدة، ridicule.bailout
.
كل ما عليك فعله هو إضافته إلى نهاية عمليات التحقق من الاستعلام، مروراً بواجهات request
المعالجات reply
.
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
البديل لذلك هو تعيين كائن المدقق في استعلامك النهائي على true
. سيطابق هذا الاستعلام المقدم تلقائيًا، ويمكن أن يكون بمثابة استعلام شامل
var queriesToCheck = [ {
validator : {
category : 'Music' ,
genre : 'ska' ,
year : / ^d{4}$ /
} ,
callback : function ( request , reply ) {
reply ( ) . file ( './authMock.json' ) ;
}
} , {
validator : true ,
callback : function ( request , reply ) {
reply ( ) . file ( './catchall.json' ) ;
}
} ] ;
queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;