Complemento hapi que proporciona simulacros de API basadas en cadenas de consulta y descanso
AVISO: EL APOYO PARA ESTE PROYECTO HA TERMINADO
Este proyecto era propiedad de Walmart y estaba mantenido por él. Este proyecto ha llegado al final de su vida útil y Walmart ya no lo apoya.
Ya no monitorearemos los problemas de este proyecto ni revisaremos las solicitudes de extracción. Eres libre de continuar usando este proyecto bajo los términos de licencia o bifurcaciones de este proyecto bajo tu propio riesgo. Este proyecto ya no está sujeto al programa de recompensas por errores de Walmart ni a ningún otro control de seguridad.
Le recomendamos tomar la siguiente acción:
Por razones de seguridad, Walmart no transfiere la propiedad de nuestros repositorios principales en Github u otras plataformas a otras personas/organizaciones. Además, no transferimos la propiedad de los paquetes a los sistemas públicos de gestión de paquetes.
Si desea bifurcar este paquete y continuar con el desarrollo, debe elegir un nuevo nombre para el proyecto y crear sus propios paquetes, compilar automatización, etc.
Revise los términos de licencia de este proyecto, que continúan vigentes incluso después del desmantelamiento.##curved-carousel
Una forma sencilla de crear un carrusel infinitamente desplazable, con curvatura opcional.
Las siguientes opciones están disponibles para la configuración.
apiPrefix
Una cadena o conjunto de cadenas que representan la base de las rutas de las que se debe burlar.
El valor predeterminado es /api
mocksDir
Directorio que contiene los archivos simulados.
El valor predeterminado es __dirname + './mocks'
, donde __dirname es este complemento
mocksAdminPath
Una URL relativa donde se puede encontrar la página de administración de este complemento.
El valor predeterminado es /admin/mocks
mocksAdminServerLabels
Una serie de etiquetas utilizadas durante el registro del complemento de hapi
El valor predeterminado es ['admin']
enabled
Ya sea que los simulacros estén habilitados o no.
El valor predeterminado es false
enableForceCookiePage
Un valor booleano que representa si se debe registrar o no la página de configuración de cookies. Esta página ofrece un botón simple para activar o desactivar la cookie always_ridicule
, que permite que un cliente opte por forzar respuestas simuladas, independientemente de la configuración del servidor. Útil para evaluadores novatos o dispositivos donde la creación de marcadores es engorrosa. El valor predeterminado es false
forceCookiePath
Una URL relativa en la que se puede encontrar la página de configuración de cookies.
El valor predeterminado es /cookie
forceCookieValue
Una cadena que representa el valor de la cookie always_ridicule
. Permite que los servidores tengan un método de simulación de suscripción disponible públicamente sin que se conozca públicamente la cookie específica necesaria. El valor expires
es de 30 minutos desde el momento en que se establece.
El valor predeterminado es "true"
Dentro de su mocksDir
, cree un archivo ridicule.js
que exponga una matriz de rutas hapi en su 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' ) ;
}
} ]
Al inicio del servidor, todas las rutas configuradas se registran con un prefijo aleatorio de 40 caracteres. (por ejemplo, la ruta /foo
se burla de /(uuid)/foo
)
Cuando el servidor simulado está habilitado, todas las solicitudes entrantes se comparan con el apiPrefix
configurado. Cuando se encuentra una coincidencia, la solicitud se reenvía internamente al controlador de ruta simulado.
Tiene la capacidad de rescatar al burlarse de la solicitud en un controlador (útil cuando se burla solo de un subconjunto de un sistema basado en cadenas de consulta, ya que hapi coincide solo en rutas). Simplemente require
rididcule en el archivo y luego llame ridicule.bailout(req, res)
, donde req
y res
son los objetos de solicitud y respuesta dentro del controlador.
La forma más común de burlarse de las solicitudes es simplemente devolver los datos de un archivo json dentro de la interfaz de reply()
de su controlador de ruta.
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
Sin embargo, tiene la posibilidad de agregar metadatos adicionales a la respuesta, como encabezados personalizados y códigos de estado HTTP. Solo necesita envolver su archivo json existente dentro de otro objeto, configurar el original en payload
y agregar un campo ridiculeSettings
.
entonces esta solicitud
{
"foo" : " bar "
}
se convierte
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
Vale la pena señalar que, dado que esto se agrega al final del flujo de solicitud de hapi, como resultado, payload
debe incluirse en el archivo simulado y, por lo tanto, está limitada a admitir solo cadenas y objetos JSON, y no transmisiones ni buffers.
Hay tres formas de habilitar/deshabilitar simulacros.
La configuración de hapi
Puede cambiar la opción enabled
en su configuración a true
. Esto lo habilita al principio, pero puede cambiarse en el futuro si...
Alternar el botón de la página de administración
Puede activar o desactivar los simulacros en cualquier momento visitando la ruta configurada en mocksAdminPath
. Por defecto esto es /admin/mocks
. Tenga en cuenta que esto está registrado detrás de una etiqueta hapi (configurable en su configuración, pero ['admin']
de forma predeterminada). Esto le permite enviar burlas en su sitio de producción y hacer que el interruptor de palanca exista en un puerto al que no se puede acceder públicamente.
Una cookie en el cliente
Si la cookie always_ridicule
se establece con el valor del forceCookieValue
configurado (el valor predeterminado es la cadena "true", por ejemplo, always_ridicule="true"
) en el cliente, entonces los simulacros configurados siempre se servirán (hasta que se eliminen, por supuesto). ). Además, always_ridicule=false
obligará al cliente a no ser burlado nunca, independientemente de la configuración actual del servidor.
Dado que hapi coincide con rutas solo en rutas (y no en ningún parámetro de cadena de consulta), debe poder hacer coincidir más de una consulta con una ruta. Para eso, ridicule proporciona el método ridicule.validate
.
ridicule.validate
es una función que toma un par de solicitud y respuesta, luego un objeto de validación, que consta de un objeto validator
y una función callback
.
El objeto validator
es un objeto simple, donde cada clave representa la clave de la cadena de consulta y el valor es una cadena, RegExp o una función que coincide con el valor correspondiente en la cadena de consulta.
Por ejemplo, la siguiente cadena de consulta
?category=Music&genre=ska&year=2012
coincidiría con la siguiente validación
...
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' } ) ;
}
} )
}
. . .
por supuesto, puedes encadenar fácilmente varios cheques
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 ) ;
} ) ;
Es posible que se encuentre con un problema en el que desee simular un subconjunto de sus solicitudes en un punto final, pero no todas. En este caso, ridicule proporciona una función auxiliar útil, ridicule.bailout
.
todo lo que necesita hacer es agregarlo al final de sus comprobaciones de consulta, pasando por las interfaces request
y reply
de los controladores.
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
Una alternativa a esto es establecer el objeto validador en su consulta final en true
. Esto coincidirá automáticamente con la consulta proporcionada y puede actuar como un resumen
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 ) ;
} ) ;