Pular para o conteúdo principal

Gerando uma API REST de um Arquivo

Pessoal o objetivo desta seção é estudar a utilização da ferramenta: Json-Server. Ela permite criar uma API Rest de um arquivo JSON que traz a estrutura de dados desejada.

Ela permite a exposição da API criada na rede local e também adição de novos dados.

1. Instalação

O Json-Server foi escrito em JavaScript, para sua utilização, vai ser necessária apenas o Node.js(recomendo a instalação utilizando o nvm) instalado na máquina.

Para realizar a instalação do pacote, utilizar:

# Dentro do diretório do projeto
npm install json-server

2. Utilização

Agora para sua utilização, basta fornecermos um arquivo json que vai trazer a estrutura desejada. Por exemplo, este arquivo foi chamado de meu-server.json:

{
"usuarios":[
{ "id": 1, "name": "Murilo", "pass": "1234"},
{ "id": 2, "name": "Goku", "pass": "1234"},
{ "id": 3, "name": "Vegeta", "pass": "1234"}
],
"posts":[
{"id":1, "user_id":1, "post": "teste"},
{"id":2, "user_id":1, "post": "teste234"},
{"id":3, "user_id":2, "post": "mais uma lib JS?"},
{"id":4, "user_id":3, "post": "pum"},
{"id":5, "user_id":3, "post": "pum pum"}
]
}

Para executar o servidor, utilizar o comando:

npx json-server meu-server.json

Agora, no terminal que executamos o comando, vamos ver a seguitne mensagem:

JSON Server started on PORT :3000
Press CTRL-C to stop
Watching dados.json...

( ˶ˆ ᗜ ˆ˵ )

Index:
http://localhost:3000/

Static files:
Serving ./public directory if it exists

Endpoints:
http://localhost:3000/usuarios
http://localhost:3000/posts

Repare que além de trazer as rotas que estão disponíveis, ele também trouxe uma solução para fornecer arquivos estáticos.

3. Geração de Dados

Para facilitar o desenvolvimento, estou deixando mais um snippet de código para gerar esse arquivo json. Espero que ajude!

/* Node.js (ESM ou CommonJS) */
const fs = require('fs');
const readline = require('readline');

const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
const ask = q => new Promise(r => rl.question(q, r));

const NAMES = ['Murilo','Jessica','Andre','Lucas','Paula','Carlos','Fernanda','Beatriz','Rafaela','Daniel'];
const POSTS = ['teste','Mais uma lib JS?','Lorem ipsum','pum','pum pum','Hello world','Post aleatório'];

(async () => {
const file = await ask('Nome do arquivo (sem extensão): ');
const users = +await ask('Quantidade de usuários: ');
const posts = +await ask('Quantidade de posts: ');

const usuarios = Array.from({ length: users }, (_, i) => ({
id: i + 1,
name: NAMES[Math.floor(Math.random() * NAMES.length)] + (users > NAMES.length ? `_${i+1}` : ''),
pass: Math.random().toString(36).slice(-8),
}));

const postsArr = Array.from({ length: posts }, (_, i) => ({
id: i + 1,
user_id: usuarios[Math.floor(Math.random() * usuarios.length)].id,
post: POSTS[Math.floor(Math.random() * POSTS.length)],
}));

fs.writeFileSync(`${file}.json`, JSON.stringify({ usuarios, posts: postsArr }, null, 4));
console.log(`✔ Criado ${file}.json`);
rl.close();
})();