plugin hapi fournissant des simulations pour les API reposantes et basées sur des chaînes de requête
AVIS : LE SUPPORT POUR CE PROJET EST TERMINÉ
Ce projet appartenait et était entretenu par Walmart. Ce projet a atteint sa fin de vie et Walmart ne soutient plus ce projet.
Nous ne surveillerons plus les problèmes de ce projet ni n'examinerons les demandes de tirage. Vous êtes libre de continuer à utiliser ce projet selon les termes de la licence ou les forks de ce projet à vos propres risques. Ce projet n'est plus soumis au programme de bug bounty de Walmart ou à toute autre surveillance de sécurité.
Nous vous recommandons de prendre les mesures suivantes :
Pour des raisons de sécurité, Walmart ne transfère pas la propriété de nos dépôts principaux sur Github ou d'autres plateformes à d'autres personnes/organisations. De plus, nous ne transférons pas la propriété des packages pour les systèmes publics de gestion de packages.
Si vous souhaitez créer ce package et poursuivre le développement, vous devez choisir un nouveau nom pour le projet et créer vos propres packages, créer l'automatisation, etc.
Veuillez consulter les conditions de licence de ce projet, qui restent en vigueur même après la mise hors service.##curved-carousel
Un moyen simple de créer un carrousel à défilement infini, avec courbure en option.
Les options suivantes sont disponibles pour la configuration.
apiPrefix
Une chaîne ou un tableau de chaînes représentant la base des routes qui doivent être simulées
La valeur par défaut est /api
mocksDir
Répertoire contenant les fichiers fictifs.
La valeur par défaut est __dirname + './mocks'
, où __dirname est ce plugin
mocksAdminPath
Une URL relative permettant de trouver la page d'administration de ce plugin.
La valeur par défaut est /admin/mocks
mocksAdminServerLabels
Un tableau d'étiquettes utilisées lors de l'enregistrement du plugin hapi
La valeur par défaut est ['admin']
enabled
Que les simulations soient activées ou non.
La valeur par défaut est false
enableForceCookiePage
Un booléen représentant s'il faut ou non enregistrer la page de configuration des cookies. Cette page propose un simple bouton pour activer ou désactiver le cookie always_ridicule
, qui permet à un client d'accepter de forcer des réponses fictives, quels que soient les paramètres du serveur. Utile pour les testeurs débutants ou les appareils où la création de bookmarklets est fastidieuse. La valeur par défaut est false
forceCookiePath
Une URL relative sur laquelle la page de configuration des cookies peut être trouvée.
La valeur par défaut est /cookie
forceCookieValue
Une chaîne représentant la valeur du cookie always_ridicule
. Permet aux serveurs de disposer d'une méthode de moquerie opt-in accessible au public sans que le cookie spécifique nécessaire soit connu publiquement. La valeur expires
est de 30 minutes à compter de l’heure à laquelle elle est définie.
La valeur par défaut est "true"
À l'intérieur de votre mocksDir
, créez un fichier ridicule.js
qui expose un tableau hapi routes dans son 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' ) ;
}
} ]
Au démarrage du serveur, toutes les routes configurées sont enregistrées avec un préfixe aléatoire de 40 caractères. (par exemple, la route /foo
est simulée à /(uuid)/foo
)
Lorsque le serveur fictif est activé, toutes les demandes entrantes sont comparées au apiPrefix
configuré. Lorsqu’une correspondance est trouvée, la demande est transmise en interne au gestionnaire de route fictive.
Vous avez la possibilité de renflouer la simulation de la requête dans un gestionnaire (utile lorsque vous vous moquez uniquement d'un sous-ensemble d'un système basé sur une chaîne de requête, car hapi correspond uniquement aux chemins). require
simplement du ridicule dans le fichier, puis appelez ridicule.bailout(req, res)
, où req
et res
sont les objets de requête et de réponse à l'intérieur du gestionnaire.
Le moyen le plus courant de simuler les requêtes consiste simplement à renvoyer les données d'un fichier json dans l'interface reply()
de votre gestionnaire de route.
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
Cependant, vous avez la possibilité d'ajouter des métadonnées supplémentaires à la réponse, telles que des en-têtes personnalisés et des codes d'état HTTP. Il vous suffit d'envelopper votre fichier json existant dans un autre objet, en définissant l'original sur payload
et d'ajouter un champ ridiculeSettings
.
donc cette demande
{
"foo" : " bar "
}
devient
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
Il convient de noter que puisque cela est ajouté à la toute fin du flux de requêtes de l'hapi, en conséquence, puisque payload
doit être intégrée dans le fichier fictif, et est donc limitée à la prise en charge uniquement des objets chaîne et JSON, et non des flux ou des tampons.
Il existe trois façons d'activer/désactiver les simulations.
Le paramètre de configuration hapi
Vous pouvez modifier l'option enabled
dans votre configuration sur true
. Cela l'active au début, mais peut être modifié ultérieurement.
Basculer le bouton de la page d'administration
Vous pouvez activer ou désactiver les simulations à tout moment en visitant le chemin configuré sous mocksAdminPath
. Par défaut, il s'agit /admin/mocks
. Notez que ceci est enregistré derrière une étiquette hapi (configurable dans votre configuration, mais ['admin']
par défaut). Cela vous permet d'expédier du ridicule sur votre site de production et de faire en sorte que l'interrupteur à bascule existe sur un port qui n'est pas accessible au public.
Un cookie sur le client
Si le cookie always_ridicule
est défini avec la valeur de la forceCookieValue
configurée (la valeur par défaut est la chaîne "true", par exemple always_ridicule="true"
) sur le client, alors les mocks configurés seront toujours servis (jusqu'à ce qu'ils soient supprimés, bien sûr ). De plus, always_ridicule=false
forcera le client à ne jamais être simulé, quels que soient les paramètres actuels du serveur.
Étant donné que hapi correspond aux itinéraires uniquement sur les chemins (et non sur les paramètres de chaîne de requête), vous devez pouvoir faire correspondre plusieurs requêtes à un chemin. Pour cela, le ridicule fournit la méthode ridicule.validate
.
ridicule.validate
est une fonction qui prend une paire de requête et de réponse, puis un objet de validation, constitué d'un objet validator
, et une fonction callback
.
L'objet validator
est un objet simple, où chaque clé représente la clé de la chaîne de requête et la valeur est soit une chaîne, RegExp ou une fonction qui correspond à la valeur de la valeur correspondante dans la chaîne de requête.
Par exemple, la chaîne de requête suivante
?category=Music&genre=ska&year=2012
correspondrait à la validation suivante
...
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' } ) ;
}
} )
}
. . .
bien sûr vous pouvez facilement enchaîner plusieurs chèques
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 ) ;
} ) ;
Vous pouvez rencontrer un problème lorsque vous souhaitez simuler un sous-ensemble de vos requêtes sur un point de terminaison, mais pas toutes. Dans ce cas, ridicule fournit une fonction d'assistance pratique, ridicule.bailout
.
tout ce que vous avez à faire est de l'ajouter à la fin de vos vérifications de requête, en passant par les interfaces request
et reply
des gestionnaires.
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
Une alternative à cela consiste à définir l’objet validateur de votre requête finale sur true
. Cela correspondra automatiquement à la requête fournie et peut servir de fourre-tout
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 ) ;
} ) ;