Plugin hapi que fornece simulações para APIs baseadas em restful e querystring
AVISO: O APOIO PARA ESTE PROJETO TERMINOU
Este projeto pertencia e era mantido pelo Walmart. Este projeto chegou ao fim e o Walmart não o apoia mais.
Não monitoraremos mais os problemas deste projeto nem revisaremos solicitações pull. Você é livre para continuar usando este projeto sob os termos de licença ou bifurcações deste projeto por sua própria conta e risco. Este projeto não está mais sujeito ao programa de recompensas de bugs do Walmart ou outro monitoramento de segurança.
Recomendamos que você tome as seguintes medidas:
Por motivos de segurança, o Walmart não transfere a propriedade de nossos repositórios primários no Github ou outras plataformas para outros indivíduos/organizações. Além disso, não transferimos a propriedade de pacotes para sistemas públicos de gerenciamento de pacotes.
Se você quiser fazer um fork deste pacote e continuar o desenvolvimento, você deve escolher um novo nome para o projeto e criar seus próprios pacotes, construir automação, etc.
Por favor, revise os termos de licenciamento deste projeto, que continuam em vigor mesmo após o encerramento.##curved-carousel
Uma maneira simples de criar um carrossel com rolagem infinita, com curvatura opcional.
As seguintes opções estão disponíveis para configuração.
apiPrefix
Uma string ou array de strings representando a base das rotas que devem ser simuladas
O padrão é /api
mocksDir
Diretório que contém os arquivos simulados.
O padrão é __dirname + './mocks'
, onde __dirname é este plugin
mocksAdminPath
Um URL relativo onde a página de administração deste plugin pode ser encontrada.
O padrão é /admin/mocks
mocksAdminServerLabels
Uma série de rótulos usados durante o registro do plugin do hapi
O padrão é ['admin']
enabled
Quer as simulações estejam habilitadas ou não.
O padrão é false
enableForceCookiePage
Um booleano que representa se a página do configurador de cookies deve ou não ser registrada. Esta página oferece um botão simples para ativar ou desativar o cookie always_ridicule
, que permite que um cliente opte por forçar respostas simuladas, independentemente das configurações do servidor. Útil para testadores novatos ou dispositivos onde a criação de bookmarklets é complicada. O padrão é false
forceCookiePath
Um URL relativo onde a página do configurador de cookies pode ser encontrada.
O padrão é /cookie
forceCookieValue
Uma string que representa o valor do cookie always_ridicule
. Permite que os servidores tenham um método de simulação de aceitação disponível publicamente, sem que o cookie específico necessário seja conhecido publicamente. o valor expires
é 30 minutos a partir do horário em que é definido.
O padrão é "true"
Dentro do seu mocksDir
, crie um arquivo ridicule.js
que expõe uma matriz hapi rotas em seu 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' ) ;
}
} ]
No início do servidor, todas as rotas configuradas são registradas com um prefixo aleatório de 40 caracteres. (por exemplo, a rota /foo
é simulada em /(uuid)/foo
)
Quando o servidor simulado está habilitado, todas as solicitações recebidas são comparadas com o apiPrefix
configurado. Quando uma correspondência é encontrada, a solicitação é encaminhada internamente para o manipulador de rota simulada.
Você tem a capacidade de resgatar a simulação da solicitação em um manipulador (útil para quando você está simulando apenas um subconjunto de um sistema baseado em querystring, já que hapi corresponde apenas em caminhos). Simplesmente require
rididcule no arquivo e, em seguida, chame ridicule.bailout(req, res)
, onde req
e res
são os objetos de solicitação e resposta dentro do manipulador.
A maneira mais comum de simular solicitações é apenas retornar os dados de um arquivo json na interface reply()
do seu manipulador de rota.
var data = require ( './mockFile.json' ) ;
var route = {
method : '*' ,
path : '/mockPath' ,
config : {
handler : function ( request , reply ) {
return reply ( data ) ;
}
}
} ;
No entanto, você pode adicionar metadados adicionais à resposta, como cabeçalhos personalizados e códigos de status HTTP. Você só precisa agrupar seu arquivo json existente dentro de outro objeto, definindo o original como payload
e adicionar um campo ridiculeSettings
.
então esse pedido
{
"foo" : " bar "
}
torna-se
{
"ridiculeSettings" : {
"statusCode" : 418 ,
"headers" : { "Content-Type" : " x-stream " }
}
payload: {
"foo" : " bar "
}
}
Vale a pena notar que, como isso é adicionado no final do fluxo de solicitação do hapi, como resultado, payload
deve ser incorporada no arquivo simulado e, portanto, é limitada a suportar apenas strings e objetos JSON, e não fluxos ou buffers.
Existem três maneiras de ativar/desativar simulações.
A definição de configuração do hapi
Você pode alterar a opção enabled
em sua configuração para true
. Isso permite isso no início, mas pode ser alterado no futuro.
Alternando o botão da página de administração
Você pode ativar ou desativar simulações a qualquer momento visitando o caminho configurado em mocksAdminPath
. Por padrão, isso é /admin/mocks
. Observe que isso é registrado com um rótulo hapi (configurável em sua configuração, mas ['admin']
por padrão). Isso permite que você ridicularize seu site de produção e faça com que a chave seletora exista em uma porta que não seja acessível publicamente.
Um cookie no cliente
Se o cookie always_ridicule
for definido com o valor do forceCookieValue
configurado (o valor padrão é a string "true", por exemplo, always_ridicule="true"
) no cliente, então os mocks configurados sempre serão servidos (até que sejam excluídos, é claro ). Além disso, always_ridicule=false
forçará o cliente a nunca ser ridicularizado, independentemente das configurações atuais do servidor.
Como o hapi corresponde às rotas apenas em caminhos (e não em quaisquer parâmetros de string de consulta), você precisa ser capaz de corresponder mais de uma consulta a um caminho. Para isso, ridicule fornece o método ridicule.validate
.
ridicule.validate
é uma função que recebe um par de solicitação e resposta, depois um objeto de validação, que consiste em um objeto validator
e uma função callback
.
O objeto validator
é um objeto simples, onde cada chave representa a chave da string de consulta e o valor é uma string, RegExp ou função que corresponde ao valor do valor correspondente na string de consulta.
Por exemplo, a seguinte string de consulta
?category=Music&genre=ska&year=2012
corresponderia à seguinte validação
...
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' } ) ;
}
} )
}
. . .
é claro que você pode encadear facilmente várias verificações
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 ) ;
} ) ;
Você pode se deparar com um problema em que deseja simular um subconjunto de suas solicitações em um endpoint, mas não todas elas. Nesse caso, ridicule fornece uma função auxiliar útil, ridicule.bailout
.
tudo o que você precisa fazer é adicioná-lo ao final das verificações de consulta, passando pelas interfaces request
e reply
dos manipuladores.
var matched = queriesToCheck . some ( function ( route ) {
return ridicule . validate ( request , reply , route ) ;
} ) ;
if ( ! matched ) {
ridicule . bailout ( request , reply ) ;
}
Uma alternativa para isso é definir o objeto validador em sua consulta final como true
. Isso corresponderá automaticamente à consulta fornecida e pode funcionar como um genérico
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 ) ;
} ) ;