manjericão: um middleware de proxy

Como trabalho com desenvolvimento móvel, a arquitetura é sempre a mesma:

  • Alguns serviços REST (ou semelhantes a REST)
  • Um cliente web (cliente REST)
  • Um aplicativo móvel (outro cliente REST)

E sempre vem com a mesma organização de equipe:

  • A equipe core-dev
  • A equipe de desenvolvimento inicial

Os caras da equipe principal têm seu trabalho, você tem o seu .
Se você tiver essa configuração, terá o “problema de dependência REST” .
Seu front dev está pronto e o core ainda não tem o serviço de que você precisa.

Já faz tempo que preciso de um sistema para simular esse serviço ausente, sem comprometer linhas sujas em meu código. Então descobri algumas ferramentas como Charles .

A ferramenta é bastante completa, mas / um pouco exagerada / difícil de instalar no meu Debian estável / não de código aberto. Todas as soluções que encontrei são bem assim.

Eu queria algo simples e aberto o suficiente para que eu pudesse:

  • registrar tudo, desde solicitações e respostas
  • alterar o conteúdo da resposta
  • redirecionar alguns urls para outro host

Eu escrevi manjericão

Fora da caixa, ele funciona como um proxy básico que deixa passar tudo. Mas se você injetar função, poderá fazer todas as coisas que acabei de mencionar e mais, nas quais não pensei.

Exemplos

1. Simples “cópia completa”

var basil = require('basil');
var app = basil();

app
.listen(8000);

2. Registre todas as solicitações

var basil = require('basil');
var app = basil();

app
.use(function (bundle) {
if (!bundle.response) {
console
.log(bundle.request.headers);
console
.log(bundle.request.body.toString());
}
});

app
.listen(8000);

3. Registre todas as respostas

var basil = require('basil');
var app = basil();

app
.use(function (bundle) {
if (bundle.response) {
console
.log(bundle.response.headers);
console
.log(bundle.response.body.toString());
}
});

app
.listen(8000);

4. Sempre retorne um código 404

var basil = require('basil');
var app = basil();

app
.use(function (bundle) {
if (bundle.response) {
bundle
.response.status = 404;
}
});

app
.listen(8000);