Tenho o prazer de anunciar que o Moco 1.5.0 foi lançado oficialmente.
O que é Mocó?
Moco é uma biblioteca de estrutura/ferramenta/programa que pode facilmente construir um servidor simulado.
habilidade principal
Moco pode suportar convenientemente a construção de servidores de simulação HTTP.
- Conforme necessário, combine a resposta com a solicitação, retorne a resposta correspondente e configure informações como versão HTTP, conteúdo e cabeçalhos HTTP.
- Simule cenários especiais do servidor, por exemplo, resposta lenta.
- Encaminhará solicitações para servidores remotos, isolando servidores instáveis.
- Chamado de forma assíncrona após receber uma solicitação, simulando o cenário de uma solicitação HTTP multinível.
- Ele é usado em cenários de teste de unidade para verificar o status da solicitação e verificar detalhes.
- Fornece a capacidade de montar arquivos para facilitar o desenvolvimento front-end.
Para API mais detalhada, consulte API .
Para mais métodos de uso, consulte uso .
Atualizações da versão anterior: Moco 1.4.0 , Moco 1.3.0
mudança de versão
Na versão 1.5.0, as seguintes novas APIs foram adicionadas:
- Na resposta de resposta, adicione
cors
suporte ao CORS, a seguir está a API correspondente para configuração do CORS:allowOrigin
( Acesso-Controle-Permitir-Credenciais )allowCredentials
( Acesso-Controle-Permitir-Credenciais )exposeHeaders
( Cabeçalhos de controle de acesso-exposição )maxAge
( Acesso-Controle-Max-Age )allowMethods
( Métodos de controle de acesso-permissão )allowHeaders
( Acesso-Controle-Permitir-Cabeçalhos )
- No modelo, é adicionado para
req.client.port
suportar a obtenção de informações da porta de conexão do cliente - No Cookie, é adicionado
sameSite
para configurar o atributo SameSite
CORS
Uma das maiores adições no 1.5.0 é o suporte para CORS. O acesso entre domínios é um problema comum no desenvolvimento de software, portanto, o servidor geralmente precisa configurar o suporte para CORS (compartilhamento de recursos de origem cruzada). cors
Podemos definir o suporte do servidor para CORS configurando na resposta .
Configurações padrão do CORS
A maneira mais fácil de usar o CORS é oferecer suporte ao CORS por padrão, ou seja, permitir todo o acesso entre origens. Neste momento, não precisamos configurar nenhuma informação, apenas configurá-la na resposta cors
.
- API Java
server.response(cors());
- API JSON
{
"response" :
{
"cors" : true
}
}
Por padrão, o Moco definirá cabeçalhos HTTP comuns para suportar CORS, como:
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: *
Access-Control-Allow-Headers: *
permitirOrigem/Access-Control-Allow-Origin
No CORS, definindo o cabeçalho Access-Control-Allow-Origin , podemos restringir quais nomes de domínio podem ser acessados entre domínios. Através de allowOrigin
, podemos definir o cabeçalho HTTP Access-Control-Allow-Origin , como:
- API Java
server.response(cors(allowOrigin("https://www.github.com/")));
- API JSON
{
"response" :
{
"cors" :
{
"allowOrigin" : "https://www.github.com/"
}
}
}
Se solicitações de todos os domínios forem permitidas, podemos allowOrigin
definir o valor como *
.
Na API JSON, também podemos definir Access-Control-Allow-Origin diretamente .
- JSON
{
"response" :
{
"cors" :
{
"Access-Control-Allow-Origin" : "https://www.github.com"
}
}
}
permitirMethods/Access-Control-Allow-Methods
No CORS, definindo o cabeçalho Access-Control-Allow-Methods , podemos restringir quais métodos HTTP podem ser acessados entre domínios. Através de allowMethods
, podemos definir o cabeçalho HTTP Access-Control-Allow-Methods, como:
- API Java
server.response(cors(allowMethods("GET", "PUT")));
server.response(cors(allowMethods(HttpMethod.GET, HttpMethod.PUT)));
Na API Java, você pode configurá-lo diretamente com uma string ou usar a enumeração HttpMethod.
- JSON
{
"response" :
{
"cors" :
{
"allowMethods" : ["GET", "PUT"],
}
}
}
Se todos os métodos HTTP forem permitidos, podemos allowMethods
definir o valor de como *
.
Na API JSON, também podemos definir Access-Control-Allow-Methods diretamente .
- JSON
{
"response" :
{
"cors" :
{
"Access-Control-Allow-Methods" : ["GET", "PUT"]
}
}
}
permitirHeaders/Access-Control-Allow-Headers
No CORS, o cabeçalho Access-Control-Allow-Headers representa todos os campos de informações do cabeçalho suportados pelo servidor. Através de allowHeaders
, podemos definir o cabeçalho HTTP Access-Control-Allow-Headers , como:
- API Java
server.response(cors(allowHeaders("X-Header", "Y-Header")));
- JSON
{
"response" :
{
"cors" :
{
"allowHeaders" : ["X-Header", "Y-Header"]
}
}
}
Se todos os cabeçalhos HTTP forem suportados, podemos allowHeaders
definir o valor como *
.
Na API JSON, também podemos definir Access-Control-Allow-Headers diretamente .
{
"response" :
{
"cors" :
{
"Access-Control-Allow-Headers" : ["X-Header", "Y-Header"]
}
}
}
maxAge/Controle de acesso-Max-Age
No CORS, o cabeçalho Access-Control-Max-Age indica o período de validade da solicitação de comprovação. Através de maxAge
, podemos definir o cabeçalho HTTP Access-Control-Max-Age, aqui precisamos definir o horário e sua unidade, por exemplo:
- API Java
server.response(cors(maxAge(1728000, TimeUnit.SECONDS)));
- JSON
{
"response" :
{
"cors" :
{
"maxAge": {
"duration": 1728000,
"unit": "second"
}
}
}
}
Na API JSON, também podemos definir Access-Control-Max-Age diretamente .
{
"response" :
{
"cors" :
{
"Access-Control-Max-Age" : {
"duration": 1728000,
"unit": "second"
}
}
}
}
permitirCredenciais/Access-Control-Allow-Credential
No CORS, o cabeçalho Access-Control-Allow-Credential indica se é permitido o envio de Cookie. Através de allowCredentials
, podemos definir o cabeçalho HTTP Access-Control-Allow-Credential , como:
- API Java
server.response(cors(allowCredentials(true)));
- JSON
{
"response" :
{
"cors" :
{
"allowCredentials" : true
}
}
}
Na API JSON, também podemos definir Access-Control-Allow-Credentials diretamente .
{
"response" :
{
"cors" :
{
"Access-Control-Allow-Credentials" : true
}
}
}
exporHeaders/Access-Control-Expose-Headers
No CORS, Access-Control-Expose-Headers especifica as informações do cabeçalho HTTP que o navegador pode obter através do método XMLHttpRequest
do objeto . getResponseHeader()
Através de exposeHeaders
, podemos definir o cabeçalho HTTP Access-Control-Expose-Headers , como:
- API Java
server.response(cors(exposeHeaders("X-Header", "Y-Header")));
- JSON
{
"response" :
{
"cors" :
{
"exposeHeaders" : ["X-Header", "Y-Header"]
}
}
}
Na API JSON, também podemos definir Access-Control-Expose-Headers diretamente .
{
"response" :
{
"cors" :
{
"Access-Control-Expose-Headers" : ["X-Header", "Y-Header"]
}
}
}
req.client.port
req.client.port
Fornece a capacidade de acessar portas de conexão do cliente em modelos.
- API Java
server.request(by(uri("/template"))).response(template("${req.client.port}"));
- API JSON
{
"request": {
"uri": "/template"
},
"response": {
"text": {
"template": "${req.client.port}"
}
}
}
mesmoSite
Comparado com os atributos de cookie originais, SameSite é um atributo de cookie adicionado posteriormente para evitar ataques CSRF e rastreamento de usuários. sameSite
A API nos permite definir o atributo SameSite para cookies.
- API Java
server.response(cookie("loggedIn", "true", sameSite("NONE")), status(302));
server.response(cookie("loggedIn", "true", sameSite(CookieAttribute.SameSite.NONE)), status(302));
sameSite
Vários valores de STRICT , LAX e NONE são suportados . Na API Java, você pode configurá-lo diretamente com uma string ou usar a enumeração de CookieAttribute.SameSite .
- API JSON
{
"request": {
"uri": "/cookie-with-same-site"
},
"response": {
"cookies": {
"login": {
"value": "true",
"sameSite": "Lax"
}
}
}
}
Bem-vindo à versão 1.5.0 e experimente os recursos mais recentes do Moco!