DEV Community

Diego Martins de Pinho
Diego Martins de Pinho

Posted on

Mockando um back-end com o JSON Server

Contexto

Você já passou por uma situação onde precisava do back-end pronto para implementar/testar a integração com o seu front-end? Pois é... isso pode ocorrer com mais frequência do que gostaríamos. É para este e outros cenários semelhantes que eu gostaria de apresentar o JSON Server.

Com este pacotinho, conseguiremos "criar um back-end" em menos de 30 segundos que será capaz não somente de armazenar dados, assim como dar suporte para requisições do tipo GET, POST, PUT... etc, seguindo todo o padrão Rest.

Edição em vídeo

Prefere assistir? Não tem problema, gravei também em vídeo!

JSON Server

O JSON Server é um dos pacotes mais completos que eu já vi no que diz respeito a quantidade de configurações e funcionalidades. Para entender o seu funcionamento, vamos partir de um exemplo prático.

Criaremos um novo projeto de front-end usando o parcel e mais algumas dependências. Basta digitar os comandos abaixo no seu terminal de preferência:

npm init -y
npm i -D parcel
npm i json-server axios
Enter fullscreen mode Exit fullscreen mode

E depois no package.json, configure um script para rodar o projeto em um servidor de desenvolvimento:

"scripts": {
  "dev": "parcel index.html"
},
Enter fullscreen mode Exit fullscreen mode

Muito bem. Para o nosso teste, faremos uma tela com dois botões: um que deverá fazer uma requisição do tipo GET e trazer todos os dados de usuários; e outra que fará uma requisição do tipo POST para cadastrar um novo usuário. Minha intenção é te mostrar que podemos fazer vários tipos de requisições diferentes (como em uma API REST).

Crie um arquivo index.html na raiz do projeto com essa estrutura:

<!DOCTYPE html>
<html lang="pt-br">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JSON Server</title>
</head>

<body>
  <button class="search">Todos os usuários</button>
  <div><input type="text" class="user" /><button class="insert">Inserir usuário</button></div>
  <script type="module" src="index.js"></script>
</body>

</html>
Enter fullscreen mode Exit fullscreen mode

Em seguida, crie um arquivo index.js na raiz do projeto com essa estrutura:

const axios = require("axios");

async function getAllUsers() {
  try {
    const { data } = await axios.get("http://localhost:3000/users");
    console.log("users", data);
  } catch (error) {
    console.log("error", error);
  }
}

async function addNewUser() {
  const user = document.querySelector(".user").value;
  try {
    await axios.post("http://localhost:3000/users", {
      name: user
    })
  } catch (error) {
    console.log("error", error);
  }
}

window.onload = () => {
  document.querySelector(".search").addEventListener("click", getAllUsers);
  document.querySelector(".insert").addEventListener("click", addNewUser);
}
Enter fullscreen mode Exit fullscreen mode

Note que as requisições estão sendo feitas para o localhost:3000. Este endereço não é por acaso. Por padrão, é neste local que o servidor local do JSON Server irá funcionar.

O primeiro passo para configurar o JSON Server é criarmos um arquivo JSON que será o nosso banco de dados. Crie-o na raiz do projeto. Eu chamarei o meu de db.json e o iniciarei com alguns dados. A estrutura deste arquivo também fica ao seu critério.

{
  "users": [
    {
      "id": 1,
      "name": "diego"
    },
    {
      "id": 2,
      "name": "luiza"
    },
    {
      "id": 3,
      "name": "marcela"
    },
    {
      "id": 4,
      "name": "maria"
    },
    {
      "id": 5,
      "name": "gilberto"
    }
  ]
}
Enter fullscreen mode Exit fullscreen mode

Feito isso, tudo o que precisamos fazer agora é criar um script para subir este back-end. Para isso, volte no package.json e crie uma nova instrução:

"scripts": {
  "dev": "parcel index.html",
  "dev:json": "json-server db.json"
}
Enter fullscreen mode Exit fullscreen mode

E se eu te disser que só isso é o sufiente pra fazer tudo funcionar? Abra dois terminais e rode o comando npm run dev em um e npm run dev:json em outro! Pronto! 😃

Criando uma base aleatória

Em alguns cenários mais complexos, você vai querer uma quantidade maior de dados para testar. É o caso, por exemplo, de uma paginação (que olhem só, tem suporte nativo no JSON Server!). Nestas situações, se torna bastante desgastante ter que ficar criando os dados um por um. E se utilizarmos a biblioteca Faker para nos ajudar?

O JSON Server disponibiliza uma forma de criar um banco em memória baseado no retorno de uma função. Nesta função, podemos usar o Faker (por exemplo), para gerar os dados do nosso teste. Para ver isso funcionando, crie um novo arquivo na raiz do projeto chamado seed.js.

Neste arquivo, coloque o seguinte conteúdo:

const { faker } = require("@faker-js/faker");

module.exports = () => {
  const data = { users: [] };
  for(let i = 0; i < 1000; i++) {
    data.users.push({
      id: i,
      name: faker.name.firstName()
    })
  }

  return data;
}
Enter fullscreen mode Exit fullscreen mode

Perceba que estamos criando 1000 usuários, returnando este array e exportando essa função. Com isso em mãos, basta criarmos um script no package.json que fará o JSON Server usar estes dados:

"scripts": {
  "dev": "parcel index.html",
  "dev:json": "json-server db.json",
  "dev:json:seed": "json-server seed.js"
}
Enter fullscreen mode Exit fullscreen mode

Agora, ao invés de usar o npm run dev:json, só trocar pelo npm run dev:json:seed!

Considerações finais

O JSON Server está longe de ser a única opção de ferramenta para a criação de mocks de back-end, por outro lado, é muito difícil encontrar ferramentas tão completas e fáceis de usar como essa. Aqui só mostrei pra vocês a pontinha do iceberg, vale entrar na documentação e explorar as possibilidades.

Agradecimentos

Curtiu? Então dê uma passada no meu canal no Youtube ou me procure nas redes sociais para trocarmos uma ideia!

Top comments (0)