Um guia para iniciantes entenderem o que é um Mock Server, como o JSON Server funciona e como utilizar um
db.jsonpara desenvolver e testar aplicações frontend.
Introdução
Quando estamos desenvolvendo uma aplicação frontend, existe um problema muito comum: a interface precisa consumir uma API, mas o backend ainda não está pronto.
Imagine que você está construindo uma tela de gerenciamento de membros. O frontend já possui componentes, formulários e regras de interface, mas a API responsável por fornecer e salvar os dados ainda está em desenvolvimento.
Precisamos de uma forma de continuar trabalhando sem esperar o backend ficar pronto.
É aí que entra o Mock Server.
Neste artigo, vamos entender o conceito desde o início e, principalmente, mostrar como utilizar o JSON Server com um arquivo db.json para simular uma API REST.
1. O problema entre frontend e backend
Em uma aplicação real, o frontend normalmente conversa com uma API para obter e modificar dados.
Por exemplo, quando uma tela precisa listar membros, ela pode realizar uma requisição:
GET /members
O backend processaria essa requisição e devolveria algo semelhante a:
[
{
"id": 1,
"email": "ana@exemplo.com",
"role": "Admin"
},
{
"id": 2,
"email": "carlos@exemplo.com",
"role": "Viewer"
}
]
O problema aparece quando o frontend está pronto para consumir essa API, mas o backend ainda está sendo desenvolvido.
Nesse cenário, esperar pelo backend pode atrasar o desenvolvimento.
Uma alternativa é criar uma API simulada.
2. O que é um Mock Server?
Um Mock Server é um servidor utilizado para simular o comportamento de uma API.
Ele recebe requisições HTTP e devolve respostas utilizando dados ou comportamentos definidos para o ambiente de desenvolvimento.
Em vez de:
Frontend → API real
podemos trabalhar temporariamente com:
Frontend → Mock Server
Para o frontend, a comunicação continua acontecendo por HTTP.
A diferença é que o servidor utilizado durante o desenvolvimento não representa necessariamente a implementação definitiva do sistema.
Mock Server não é o backend real. É uma simulação da API utilizada para permitir desenvolvimento, testes e prototipação.
3. Uma analogia simples
Imagine que uma equipe esteja construindo um aeroporto.
A equipe responsável pelos sistemas do terminal precisa testar os painéis de voo, balcões e sistemas de atendimento, mas o aeroporto ainda não está operacional.
Em vez de esperar toda a infraestrutura ficar pronta, pode-se criar um ambiente simulado com informações semelhantes às reais.
Os sistemas conseguem testar:
- chegada de informações;
- consulta de dados;
- atualização;
- comunicação;
- tratamento de respostas.
Esse ambiente não é o aeroporto definitivo, mas permite que uma parte significativa do trabalho continue.
Um Mock Server funciona de maneira semelhante.
Ele cria um ambiente controlado para que o frontend consiga trabalhar antes da existência da API definitiva.
4. Mock Data não é Mock Server
Os conceitos estão relacionados, mas não são iguais.
Mock Data
São dados fictícios utilizados durante o desenvolvimento.
Por exemplo:
{
"id": 1,
"email": "ana@exemplo.com",
"role": "Admin"
}
Isso é apenas um dado.
Mock Server
É um servidor capaz de disponibilizar esses dados através de uma API.
Por exemplo:
GET http://localhost:3002/members
Agora existe uma aplicação capaz de receber uma requisição HTTP e devolver uma resposta.
| Conceito | Função |
|---|---|
| Mock Data | Representa dados fictícios |
| Mock Server | Disponibiliza esses dados através de uma API simulada |
5. O que é o JSON Server?
O JSON Server é uma ferramenta que permite transformar um arquivo JSON em uma API REST simples.
A ideia é bastante interessante para quem está começando:
Você cria uma estrutura JSON e o JSON Server disponibiliza seus recursos através de endpoints HTTP.
Ele permite simular operações comuns de uma API, como:
GETPOSTPUTPATCHDELETE
Isso possibilita desenvolver e testar um frontend sem precisar construir imediatamente uma API completa.
6. O db.json
No contexto do Member Manager, utilizamos um arquivo chamado:
db.json
Sua estrutura é semelhante a:
{
"members": [
{
"id": 1,
"projectId": 1,
"email": "ana@exemplo.com",
"role": "Admin"
},
{
"id": 2,
"projectId": 1,
"email": "carlos@exemplo.com",
"role": "Viewer"
},
{
"id": 3,
"projectId": 2,
"email": "bia@exemplo.com",
"role": "Operator"
}
]
}
À primeira vista, parece apenas um arquivo JSON comum.
E realmente é.
A diferença é que o JSON Server utiliza essa estrutura para disponibilizar uma API.
7. Entendendo a estrutura do db.json
O primeiro nível do arquivo possui:
{
"members": []
}
A propriedade:
members
representa uma coleção de recursos.
Podemos pensar nela como uma pequena coleção de membros.
Cada elemento possui suas próprias propriedades:
{
"id": 1,
"projectId": 1,
"email": "ana@exemplo.com",
"role": "Admin"
}
Vamos entender cada uma delas.
id
O id identifica aquele membro.
"id": 1
Isso permite acessar um recurso específico:
GET /members/1
O identificador também é utilizado nas operações de atualização e remoção.
projectId
O projectId representa o projeto ao qual o membro está associado.
No nosso exemplo:
"projectId": 1
Ana e Carlos pertencem ao projeto 1.
Bia pertence ao projeto 2:
"projectId": 2
Isso permite simular uma relação entre projetos e membros.
Por exemplo:
GET /members?projectId=1
pode ser utilizado para consultar os membros relacionados ao projeto 1.
Essa estrutura foi utilizada no Mock Server do Member Manager para permitir que o frontend consultasse membros por projeto.
email
Representa o email do membro:
"email": "ana@exemplo.com"
É uma informação pertencente à entidade Member.
role
Representa a função do membro dentro do projeto.
No nosso exemplo:
Admin
Operator
Viewer
podem representar diferentes papéis dentro da aplicação.
É importante perceber que o Mock Server está apenas fornecendo esses dados.
Ele não está necessariamente implementando toda a lógica de autorização de uma aplicação real.
8. Como o JSON Server transforma o arquivo em uma API?
Essa é uma das partes mais importantes para entender.
Temos:
db.json
contendo:
{
"members": [...]
}
Quando o JSON Server é iniciado, ele utiliza essa coleção para disponibilizar recursos HTTP.
No exemplo utilizado no projeto:
npm install -g json-server
Depois:
json-server --watch db.json --port 3002
O recurso members passa a estar disponível em:
http://localhost:3002/members
Agora o frontend pode tratar essa URL como uma API.
9. O endpoint /members
Depois de iniciar o servidor:
GET http://localhost:3002/members
podemos receber:
[
{
"id": 1,
"projectId": 1,
"email": "ana@exemplo.com",
"role": "Admin"
},
{
"id": 2,
"projectId": 1,
"email": "carlos@exemplo.com",
"role": "Viewer"
},
{
"id": 3,
"projectId": 2,
"email": "bia@exemplo.com",
"role": "Operator"
}
]
Perceba que não criamos manualmente uma rota chamada /members.
O JSON Server identificou a coleção:
members
e disponibilizou o recurso.
10. Filtrando por projectId
Agora podemos utilizar o projectId para consultar somente os membros de determinado projeto.
Por exemplo:
GET /members?projectId=1
A resposta será semelhante a:
[
{
"id": 1,
"projectId": 1,
"email": "ana@exemplo.com",
"role": "Admin"
},
{
"id": 2,
"projectId": 1,
"email": "carlos@exemplo.com",
"role": "Viewer"
}
]
Para o projeto 2:
GET /members?projectId=2
podemos obter:
[
{
"id": 3,
"projectId": 2,
"email": "bia@exemplo.com",
"role": "Operator"
}
]
Isso torna o Mock Server mais interessante para desenvolvimento porque conseguimos testar situações próximas das que existirão na aplicação real.
11. GET: lendo dados
O método GET é utilizado para consultar informações.
Listar todos os membros
GET /members
Buscar um membro específico
GET /members/1
Buscar membros de um projeto
GET /members?projectId=1
O Angular pode utilizar essas respostas para construir a interface.
12. POST: criando um membro
O POST normalmente é utilizado para criar um novo recurso.
Podemos enviar:
POST /members
com:
{
"projectId": 1,
"email": "joao@exemplo.com",
"role": "Viewer"
}
O JSON Server adicionará o novo membro à coleção.
Isso permite testar o fluxo de cadastro antes de existir um backend definitivo.
13. PUT: atualizando um membro
Imagine que Carlos atualmente seja:
{
"id": 2,
"projectId": 1,
"email": "carlos@exemplo.com",
"role": "Viewer"
}
Queremos alterar sua função para Admin.
Podemos fazer:
PUT /members/2
enviando:
{
"id": 2,
"projectId": 1,
"email": "carlos@exemplo.com",
"role": "Admin"
}
O recurso correspondente será atualizado.
14. DELETE: removendo um membro
Para remover Carlos:
DELETE /members/2
O registro com id = 2 será removido da coleção.
Com isso, conseguimos simular um CRUD completo:
| Operação | HTTP | Endpoint |
|---|---|---|
| Criar | POST |
/members |
| Listar | GET |
/members |
| Buscar | GET |
/members/:id |
| Atualizar | PUT |
/members/:id |
| Remover | DELETE |
/members/:id |
15. Onde entra o Angular?
Agora podemos conectar o Mock Server ao frontend.
Uma boa prática é evitar que cada componente faça suas próprias requisições HTTP.
Em vez disso, podemos utilizar um service.
A comunicação pode ser entendida assim:
Component
|
| chama
v
MemberService
|
| HTTP
v
JSON Server
|
| lê/escreve
v
db.json
O componente cuida principalmente da interface.
O service concentra o acesso aos dados.
16. O MemberService
Um exemplo simplificado seria:
@Injectable({
providedIn: 'root'
})
export class MemberService {
private api = 'http://localhost:3002/members';
constructor(private http: HttpClient) {}
getByProject(projectId: number) {
return this.http.get<Member[]>(
`${this.api}?projectId=${projectId}`
);
}
add(member: Omit<Member, 'id'>) {
return this.http.post<Member>(
this.api,
member
);
}
update(member: Member) {
return this.http.put<Member>(
`${this.api}/${member.id}`,
member
);
}
remove(id: number) {
return this.http.delete(
`${this.api}/${id}`
);
}
}
O mais importante não é decorar esse código.
É entender a responsabilidade do service.
O componente não precisa saber como a URL foi construída.
Ele pode simplesmente solicitar ao service:
"Busque os membros deste projeto."
O service transforma essa solicitação em uma requisição HTTP.
17. Por que separar o componente do service?
Imagine que hoje nossa API seja:
http://localhost:3002/members
Mais tarde, o backend real pode disponibilizar:
https://api.exemplo.com/members
Se os componentes construírem as URLs diretamente, teremos que procurar e alterar diversos pontos da aplicação.
Quando o acesso fica concentrado no service, a mudança fica muito mais controlada.
Essa separação também ajuda a manter responsabilidades claras:
| Responsabilidade | Componente | Service |
|---|---|---|
| Interface | ✓ | |
| Interação do usuário | ✓ | |
| Requisições HTTP | ✓ | |
| URL da API | ✓ | |
| Conversão de dados | ✓ | |
| Regras de apresentação | ✓ |
18. Mock Server não é backend
Esse é um dos pontos mais importantes.
JSON Server é muito útil para:
- desenvolvimento frontend;
- prototipação;
- testes;
- demonstrações;
- desenvolvimento paralelo;
- criação de interfaces antes do backend.
Mas ele não deve ser confundido com uma API de produção.
Um backend real pode possuir:
- autenticação;
- autorização;
- regras de negócio;
- validações;
- banco de dados;
- tratamento de erros;
- logs;
- segurança;
- transações;
- controle de concorrência.
O Mock Server normalmente fornece apenas uma representação simplificada da API necessária para o desenvolvimento.
Mock Server permite que o desenvolvimento avance. Ele não substitui automaticamente a arquitetura definitiva do backend.
19. Testando o Mock Server diretamente
Uma das melhores formas de entender uma API é testá-la sem passar pelo frontend.
Depois de iniciar:
json-server --watch db.json --port 3002
podemos utilizar ferramentas como:
- Postman;
- Bruno;
- Insomnia;
-
curl; - navegador, para requisições
GET.
Por exemplo:
curl http://localhost:3002/members
Para testar o filtro:
curl "http://localhost:3002/members?projectId=1"
Para consultar um membro:
curl http://localhost:3002/members/1
Isso também ajuda no diagnóstico.
Se o endpoint não responde diretamente pelo Postman ou curl, provavelmente o problema está no Mock Server ou na configuração da API simulada, e não no Angular.
20. Um ponto importante sobre versões
É importante prestar atenção à versão do JSON Server utilizada.
A versão atual disponível no npm possui diferenças em relação a versões antigas, inclusive em alguns comportamentos relacionados a id e consultas.
Por isso, em projetos de equipe, é uma boa prática registrar a versão da ferramenta utilizada.
Em vez de cada desenvolvedor instalar uma versão diferente globalmente, podemos declarar a dependência no projeto.
Por exemplo:
npm install --save-dev json-server
Assim, a dependência passa a fazer parte do projeto e pode ser instalada junto com as demais:
npm install
Isso reduz o risco de:
"Na minha máquina funciona."
21. Como pensar sobre Mock Server
Evite pensar:
"Tenho um JSON falso."
É melhor pensar:
"Tenho uma API simulada que permite desenvolver e testar o consumidor antes de possuir o backend definitivo."
Essa diferença de perspectiva é importante.
O arquivo:
db.json
é a fonte dos dados.
O JSON Server fornece o comportamento de servidor HTTP.
O Angular consome essa API.
O MemberService encapsula essa comunicação.
22. O fluxo completo
Podemos representar o funcionamento completo de forma simples:
Usuário
|
v
Angular Component
|
v
MemberService
|
v
HTTP Request
|
v
JSON Server
|
v
db.json
Quando uma alteração acontece, o caminho inverso ocorre:
db.json
|
v
JSON Server
|
v
HTTP Response
|
v
MemberService
|
v
Angular Component
|
v
Interface
O ponto importante é que cada camada possui uma responsabilidade.
23. Exercício prático
Uma boa forma de fixar o conteúdo é modificar o próprio db.json.
Adicione:
{
"id": 4,
"projectId": 2,
"email": "lucas@exemplo.com",
"role": "Viewer"
}
Depois consulte:
GET /members?projectId=2
Observe quais membros aparecem.
Depois tente realizar as quatro operações:
Criar
POST /members
Consultar
GET /members
Atualizar
PUT /members/4
Remover
DELETE /members/4
Depois tente explicar o que acontece em cada etapa.
Se você consegue explicar o caminho entre Angular → Service → HTTP → Mock Server → dados, o conceito já está sendo compreendido, e não apenas decorado.
24. Erros comuns de iniciantes
Pensar que o db.json é a API
Não é.
O JSON é apenas a fonte de dados utilizada pelo Mock Server.
Colocar toda a lógica HTTP no componente
Isso mistura responsabilidades.
É preferível centralizar o acesso aos dados em um service.
Tratar Mock Server como backend definitivo
O Mock Server existe para simular.
Ele não necessariamente representa todas as regras e comportamentos do backend de produção.
Não testar a API isoladamente
Quando existe um problema no frontend, testar primeiro o endpoint diretamente pode economizar bastante tempo.
Não controlar a versão da ferramenta
Projetos de equipe devem buscar um ambiente reproduzível.
Se cada desenvolvedor utilizar uma versão diferente do JSON Server, o comportamento pode variar.
25. O que aprendemos?
Ao final deste processo, temos vários conceitos importantes:
Mock Data são dados simulados.
Mock Server é um servidor utilizado para simular uma API.
JSON Server transforma uma estrutura JSON em uma API REST simples.
db.json contém os dados utilizados pelo Mock Server.
HTTP é o mecanismo utilizado para comunicação entre cliente e servidor.
MemberService encapsula o acesso à API.
Angular utiliza HttpClient para consumir os endpoints.
A ideia pode ser resumida assim:
Dados simulados
|
v
JSON Server
|
v
API HTTP
|
v
MemberService
|
v
Angular
Essa estrutura é simples o suficiente para começar, mas já apresenta conceitos fundamentais que serão encontrados em APIs reais.
26. O que acontece quando o backend real chegar?
Essa é uma das perguntas mais importantes.
No início do desenvolvimento podemos ter:
private api = 'http://localhost:3002/members';
Depois, quando o backend real estiver disponível:
private api = 'https://api.exemplo.com/members';
Idealmente, o componente não precisa saber que essa mudança aconteceu.
Ele continua utilizando:
memberService.getByProject(...)
O service continua responsável pela comunicação.
O que muda é o sistema que responde à requisição.
Essa é uma das vantagens de manter uma separação clara entre a interface e o acesso aos dados.
Conclusão
Um Mock Server resolve um problema bastante comum:
Como continuar desenvolvendo o frontend enquanto o backend ainda não está pronto?
No nosso exemplo, o db.json contém os dados simulados dos membros.
O JSON Server transforma essa estrutura em uma API HTTP.
O Angular consome essa API através do MemberService.
Assim conseguimos implementar e testar operações de:
- criação;
- consulta;
- atualização;
- remoção;
- filtragem.
O mais importante é não pensar no Mock Server simplesmente como "um JSON falso".
Pense nele como uma API simulada criada para fornecer um contrato previsível ao frontend durante o desenvolvimento.
Quando o backend real estiver disponível, a simulação pode ser substituída pela implementação definitiva.
Mock Server não tenta substituir o backend. Ele permite que o restante da aplicação avance enquanto o backend ainda está sendo construído.
Top comments (0)