| 🪧 Vitrine.Dev | |
|---|---|
| ✨ Nome | Schemaless API |
| 🏷️ Tecnologias | node.js, express, mongodb (tecnologias utilizadas) |
| 🚀 URL | |
| 🔥 Desafio | Realizar uma API com o conteúdo cursado no semestre |
Este projeto consiste no desenvolvimento de uma API utilizando o banco de dados MongoDB, aproveitando o modelo NoSQL schema-less que ele oferece. A API foi projetada para proporcionar flexibilidade no armazenamento de dados, permitindo alterações na estrutura sem a necessidade de redefinir esquemas rígidos. Esse modelo é ideal para lidar com dados heterogêneos ou em constante evolução.
A API será responsável por gerenciar operações CRUD (Create, Read, Update, Delete) de maneira eficiente, com foco na escalabilidade e na simplicidade na integração com outros sistemas. Além disso, boas práticas de segurança e desempenho serão implementadas para garantir a robustez do sistema.
- Usuários: Registro e gestão de usuários (nome, e-mail, etc.).
- Produtos: Registro e gestão de produtos (nome, preço, quantidade, categoria, etc.).
- Busca: Pesquisar produtos e usuários por parâmetros como nome, preço e categoria.
- Relações: Buscar produtos registrados por um usuário e obter informações do usuário associado a um produto.
- Node.js instalado (versão 14 ou superior recomendada).
- npm instalado (vem junto com o Node.js).
- MongoDB instalado (ou um serviço como o MongoDB Atlas).
-
Clonar o repositório
O primeiro passo é clonar o repositório do projeto:
git clone <url-do-repositorio> cd <nome-do-repositorio>
-
Instalar as dependências
No diretório do projeto, instale todas as dependências necessárias:
npm install
-
Configurar variáveis de ambiente (se aplicável)
Se o projeto usa variáveis de ambiente (por exemplo, para o MongoDB URI), crie um arquivo
.envcom base no arquivo de exemplo.env.example:cp .env.example .env
Atualize o arquivo
.envcom as informações corretas, como a URI ou USUÁRIO do MongoDB:PORT=3000 DB_USER="xxxxxx" DB_PASSWORD="**************" -
Rodar o servidor
Se o Nodemon estiver configurado como dependência de desenvolvimento, você pode iniciar o servidor com o seguinte comando:
npm run dev
Ou, se não estiver usando Nodemon:
node server.js
-
Acessar a API
Agora a API estará disponível em:
http://localhost:<PORT>/api-nosql/api/v1/. O valor padrão daPORTé3000, se não houver sido modificado.Exemplo para acessar a rota de produtos:
GET http://localhost:<PORT>/api-nosql/api/v1/products
Certifique-se de que o MongoDB está rodando localmente ou configure o arquivo .env com a URI correta para um servidor remoto, como o MongoDB Atlas.
1 Usuários
1.1 Criar Usuário
Endpoint: POST /api-nosql/api/v1/users
Corpo da Requisição:
{
"name": "Leonardo Carvalho",
"email": "leonardo.carvalho@example.com",
"password": "password123",
"created_in": "2024-11-19"
}Resposta:
{
"acknowledged": true,
"insertedId": "673e26c73a4bf0cbadac0d57"
}1.2 Buscar usuários
Endpoint: GET /api-nosql/api/v1/users
Resposta:
[
{
"_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza",
"email": "alice.souza@example.com",
"password": "password123",
"created_in": "2024-11-19"
},
{
...
}
]1.3 Buscar 1 usuário por ID
Endpoint: GET /api-nosql/api/v1/users/:id
Resposta:
{
"_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza",
"email": "alice.souza@example.com",
"password": "password123",
"created_in": "2024-11-19"
}1.4 Buscar usuáris por Parâmetro
Endpoint: GET /api-nosql/api/v1/users/search?name=Leonardo&?email=leonardo.carvalho@example.com
name: STRING
email: STRING
Resposta:
[
{
"_id": "673e26c73a4bf0cbadac0d57",
"name": "Leonardo Carvalho Gama",
"email": "leonardo.carvalho@example.com",
"password": "password2345",
"created_in": "2024-11-19"
},
{
...
}
]1.5 Buscar todos os produtos cadastrados por um usuário x
Endpoint: GET /api-nosql/api-nosql/api/v1/users/:id/products
Resposta:
[
{
"_id": "673d4aca6d8ee18436831067",
"name": "Notebook",
"desc": "notebook dell processor 8th ...",
"price": 2400,
"qtt_stock": 10,
"category": [
"Eletronic",
"computer"
],
"registered_by": {
"user_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza"
}
},
}
...
}
]1.6 Atualizar um usuário
Endpoint: PUT /api-nosql/api/v1/users/:id
Corpo da Requisição:
{
"name": "Leonardo Carvalho Gama",
"password": "password2345"
}Resposta:
{
"message": "Document with ID: 673e26c73a4bf0cbadac0d57 successfully updated",
"update": {
"acknowledged": true,
"modifiedCount": 1,
"upsertedId": null,
"upsertedCount": 0,
"matchedCount": 1
}
}1.7 Deletar um usuário
Endpoint: DELETE /api-nosql/api/v1/users/:id
Resposta:
{
"message": "Document with ID 673e26c73a4bf0cbadac0d57 Was deleted",
"deleted": {
"acknowledged": true,
"deletedCount": 1
}
}2 Produtos
2.1 Criar um Produto
Endpoint: POST /api-nosql/api/v1/products
Corpo da Requisição:
{
"name": "Produto X",
"price": 150.00,
"qtt_stock": 10,
"category": "Eletrônicos",
"registered_by": {
user_id: "ObjectID",
name: "Leonardo Carvalho"
}
}Resposta:
{
"acknowledged": true,
"insertedId": "673e342cca8c4c80623cf07e"
}2.3 Buscar Produtos
Endpoint: GET /api-nosql/api/v1/products/
Resposta:
[
{
"_id": "673d4aca6d8ee18436831067",
"name": "Notebook",
"desc": "notebook dell processor 8th ...",
"price": 2400,
"qtt_stock": 10,
"category": [
"Eletronic",
"computer"
],
"registered_by": {
"user_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza"
}
},
{
...
}
]2.3 Buscar Produto por ID
Endpoint: GET /api-nosql/api/v1/products/:id
Resposta:
{
"_id": "673d4aca6d8ee18436831067",
"name": "Notebook",
"desc": "notebook dell processor 8th ...",
"price": 2400,
"qtt_stock": 10,
"category": [
"Eletronic",
"computer"
],
"registered_by": {
"user_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza"
}
}2.4 Buscar Produtos por Parâmetro
Endpoint: GET /api-nosql/api/v1/products/search?name=Tablet&?priceGte=6000&?priceLte=7000&?qtt_stockGte=5&?qtt_stockLte=10&?category=Eletronics
name: STRING
priceGte: INTEGER
priceLte: INTEGER
qtt_stockGte: INTEGER
qtt_stockLte: INTEGER
category: STRING
Resposta:
[
{
"_id": "673d4bdbef6dabf900752f12",
"name": "Tablet",
"desc": "iPad Pro 11 polegadas, M2 Chip, 256GB ...",
"price": 6500,
"qtt_stock": 8,
"category": [
"Electronics",
"Tablet"
],
"registered_by": {
"user_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza"
}
}
]2.5 Buscar Informação do usuário que cadastrou o produto
Endpoint: GET /api-nosql/api/v1/products/:id/user
:id - ID do produto
Resposta:
[
{
"_id": "673d4bdbef6dabf900752f12",
"name": "Tablet",
"desc": "iPad Pro 11 polegadas, M2 Chip, 256GB ...",
"price": 6500,
"qtt_stock": 8,
"category": [
"Electronics",
"Tablet"
],
"registering_user": {
"_id": "673d508520cfb583bd2ddf1e",
"name": "Alice Souza",
"email": "alice.souza@example.com",
"created_in": "2024-11-19"
}
}
]2.6 Atualizar um Produto
Endpoint: PUT /api-nosql/api/v1/products/:id
Corpo da Requisição:
{
"price": 120.00,
"qtt_stock": 15
}Resposta:
{
"message": "Document with ID: 673d4bdbef6dabf900752f12 successfully updated",
"update": {
"acknowledged": true,
"modifiedCount": 1,
"upsertedId": null,
"upsertedCount": 0,
"matchedCount": 1
}
}2.7 Deletar um Produto
Endpoint: DELETE /api-nosql/api/v1/products/:id
Resposta:
{
"message": "Document with ID 673d4bdbef6dabf900752f12 Was deleted",
"deleted": {
"acknowledged": true,
"deletedCount": 1
}
}