Documentação da API
Guia completo para integrar com a Ecommerce API. Esta documentação cobre todos os endpoints, autenticação, modelos de dados e exemplos de uso.
📑 Nesta Página
🚀 Começando
A Ecommerce API é uma API RESTful construída com Ruby on Rails que fornece todos os endpoints necessários para um e-commerce completo.
Teste as funcionalidades com nosso Demo App - uma loja completa que consome a API.
Base URL
http://localhost:3000
Formato
JSON (application/json)
Auth
JWT via Headers
Versão
v1 (namespaced)
📦 Instalação
Com Docker (Recomendado)
git clone https://github.com/seu-usuario/ecommerce-api.git cd ecommerce-api docker-compose up --build
Instalação Local
# Instalar dependências bundle install # Criar e popular banco de dados rails db:create db:migrate db:seed # Iniciar servidor rails server
O comando
db:seed cria usuários de teste:
- Admin: admin@ecommerce.com / password123
- Cliente: cliente@teste.com / password123
🔐 Autenticação
A API utiliza autenticação JWT (JSON Web Tokens) via Devise Token Auth. Após o login, você recebe tokens nos headers da resposta que devem ser incluídos em todas as requisições autenticadas.
Registro de Usuário
Request Body
{
"name": "João Silva",
"email": "joao@email.com",
"password": "minhasenha123",
"password_confirmation": "minhasenha123"
}
Response (200 OK)
{
"status": "success",
"data": {
"id": 1,
"email": "joao@email.com",
"name": "João Silva",
"profile": "client",
"provider": "email",
"uid": "joao@email.com"
}
}
Login
Request Body
{
"email": "joao@email.com",
"password": "minhasenha123"
}
Response Headers
access-token: eyJhbGciOiJIUzI1NiJ9... token-type: Bearer client: abc123xyz789... expiry: 1705612800 uid: joao@email.com
Headers de Autenticação
Inclua estes headers em todas as requisições que exigem autenticação:
| Header | Descrição | Exemplo |
|---|---|---|
access-token |
Token de acesso JWT | eyJhbGciOiJIUzI1... |
client |
Identificador do cliente | abc123xyz789... |
uid |
Email do usuário | joao@email.com |
token-type |
Tipo do token | Bearer |
Exemplo com cURL
curl -X GET http://localhost:3000/storefront/v1/profile \ -H "Content-Type: application/json" \ -H "access-token: eyJhbGciOiJIUzI1NiJ9..." \ -H "client: abc123xyz789..." \ -H "uid: joao@email.com"
Logout
Requer headers de autenticação. Invalida os tokens atuais.
Recuperar Senha
{
"email": "joao@email.com",
"redirect_url": "http://seusite.com/reset-password"
}
🛒 Storefront API - Produtos
Endpoints públicos para navegação de produtos no catálogo.
Query Parameters
| Parâmetro | Tipo | Descrição |
|---|---|---|
category_id |
integer | Filtrar por categoria |
search |
string | Buscar no nome/descrição |
page |
integer | Página (default: 1) |
per_page |
integer | Itens por página (default: 10) |
Response
{
"products": [
{
"id": 1,
"name": "MacBook Pro 14\"",
"description": "Laptop Apple M3 Pro",
"price": "12999.00",
"stock_quantity": 15,
"category": {
"id": 2,
"name": "Notebooks"
}
}
],
"meta": {
"current_page": 1,
"next_page": 2,
"prev_page": null,
"total_pages": 5,
"total_count": 48
}
}
Retorna detalhes completos de um produto específico.
🏷️ Storefront API - Categorias
Response
{
"categories": [
{
"id": 1,
"name": "Eletrônicos",
"description": "Dispositivos eletrônicos",
"subcategories": [
{ "id": 2, "name": "Notebooks" },
{ "id": 3, "name": "Smartphones" }
]
}
]
}
📦 Storefront API - Pedidos
Request Body
{
"order": {
"items": [
{ "product_id": 1, "quantity": 2 },
{ "product_id": 5, "quantity": 1 }
]
}
}
Response (201 Created)
{
"id": 42,
"status": "pending",
"total": "26997.00",
"created_at": "2026-01-17T10:30:00Z",
"items": [
{
"product_id": 1,
"product_name": "MacBook Pro",
"quantity": 2,
"unit_price": "12999.00",
"subtotal": "25998.00"
},
{
"product_id": 5,
"product_name": "Mouse Magic",
"quantity": 1,
"unit_price": "999.00",
"subtotal": "999.00"
}
]
}
Lista todos os pedidos do usuário autenticado.
Cancela um pedido. Só funciona se o status for pending.
👤 Storefront API - Perfil
Retorna dados do perfil do usuário autenticado.
{
"user": {
"name": "João Silva Santos",
"password": "novasenha123",
"password_confirmation": "novasenha123"
}
}
⚙️ Admin API
Dashboard
Response
{
"stats": {
"total_users": 1250,
"total_products": 89,
"total_orders": 3420,
"total_categories": 15,
"pending_orders": 23,
"processing_orders": 12,
"shipped_orders": 45,
"active_products": 82,
"out_of_stock_products": 7
}
}
Gerenciar Produtos
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /admin/v1/products |
Listar todos (com filtros) |
| GET | /admin/v1/products/:id |
Detalhes do produto |
| POST | /admin/v1/products |
Criar produto |
| PUT | /admin/v1/products/:id |
Atualizar produto |
| DELETE | /admin/v1/products/:id |
Excluir produto |
Criar Produto
{
"product": {
"name": "iPhone 15 Pro Max",
"description": "Smartphone Apple com chip A17 Pro",
"price": 9999.00,
"stock_quantity": 50,
"category_id": 3,
"active": true
}
}
Gerenciar Categorias
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /admin/v1/categories |
Listar categorias |
| POST | /admin/v1/categories |
Criar categoria |
| PUT | /admin/v1/categories/:id |
Atualizar categoria |
| DELETE | /admin/v1/categories/:id |
Excluir categoria |
Criar Categoria com Subcategoria
{
"category": {
"name": "Smartphones",
"description": "Telefones celulares",
"parent_id": 1, // Subcategoria de Eletrônicos
"active": true
}
}
Gerenciar Pedidos
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /admin/v1/orders |
Listar pedidos |
| GET | /admin/v1/orders/:id |
Detalhes do pedido |
| PUT | /admin/v1/orders/:id/status |
Atualizar status |
| PUT | /admin/v1/orders/:id/cancel |
Cancelar pedido |
Status do Pedido
Atualizar Status
{
"order": {
"status": "shipped"
}
}
Gerenciar Usuários
| Método | Endpoint | Descrição |
|---|---|---|
| GET | /admin/v1/users |
Listar usuários |
| GET | /admin/v1/users/:id |
Detalhes do usuário |
| PUT | /admin/v1/users/:id |
Atualizar perfil (admin/client) |
| DELETE | /admin/v1/users/:id |
Excluir usuário |
📊 Modelos de Dados
Diagrama ER
User
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único |
| name | string | Nome completo |
| string | Email (único) | |
| profile | enum | admin (0) | client (1) |
| created_at | datetime | Data de criação |
Product
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único |
| name | string | Nome do produto |
| description | text | Descrição |
| price | decimal | Preço (10,2) |
| stock_quantity | integer | Quantidade em estoque |
| category_id | integer | FK para Category |
| active | boolean | Produto ativo |
Order
| Campo | Tipo | Descrição |
|---|---|---|
| id | integer | ID único |
| user_id | integer | FK para User |
| status | enum | pending|paid|processing|shipped|delivered|cancelled |
| total | decimal | Total calculado |
| created_at | datetime | Data do pedido |
📋 Status Codes HTTP
| Código | Significado | Quando Ocorre |
|---|---|---|
| 200 OK | Sucesso | Requisição processada com sucesso |
| 201 Created | Criado | Recurso criado (POST) |
| 204 No Content | Sem conteúdo | Deletado com sucesso |
| 400 Bad Request | Requisição inválida | Parâmetros incorretos |
| 401 Unauthorized | Não autorizado | Token inválido/ausente |
| 403 Forbidden | Proibido | Sem permissão (ex: não é admin) |
| 404 Not Found | Não encontrado | Recurso não existe |
| 422 Unprocessable | Não processável | Validação falhou |
| 500 Server Error | Erro interno | Erro no servidor |
⚠️ Tratamento de Erros
Todas as respostas de erro seguem um formato padronizado:
Erro de Validação (422)
{
"errors": {
"name": ["não pode ficar em branco"],
"email": ["já está em uso", "não é válido"],
"price": ["deve ser maior que 0"]
}
}
Erro de Autenticação (401)
{
"errors": ["Token de autenticação inválido ou expirado"]
}
Erro de Permissão (403)
{
"errors": ["Acesso negado. Permissão de administrador necessária."]
}
Recurso Não Encontrado (404)
{
"errors": ["Produto não encontrado"]
}
Ecommerce API Documentation © 2026