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.

🚀 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.

Experimente a API!
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)

Terminal
git clone https://github.com/seu-usuario/ecommerce-api.git
cd ecommerce-api
docker-compose up --build

Instalação Local

Terminal
# Instalar dependências
bundle install

# Criar e popular banco de dados
rails db:create db:migrate db:seed

# Iniciar servidor
rails server
Dados de Teste
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

POST /auth/v1/user

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"
  }
}
Os tokens de autenticação são retornados nos headers da resposta.

Login

POST /auth/v1/user/sign_in

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
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

DELETE /auth/v1/user/sign_out

Requer headers de autenticação. Invalida os tokens atuais.

Recuperar Senha

POST /auth/v1/user/password
{
  "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.

GET /storefront/v1/products

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
  }
}
GET /storefront/v1/products/:id

Retorna detalhes completos de um produto específico.

🏷️ Storefront API - Categorias

GET /storefront/v1/categories

Response

{
  "categories": [
    {
      "id": 1,
      "name": "Eletrônicos",
      "description": "Dispositivos eletrônicos",
      "subcategories": [
        { "id": 2, "name": "Notebooks" },
        { "id": 3, "name": "Smartphones" }
      ]
    }
  ]
}

📦 Storefront API - Pedidos

Todos os endpoints de pedidos requerem autenticação.
POST /storefront/v1/orders

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"
    }
  ]
}
GET /storefront/v1/orders

Lista todos os pedidos do usuário autenticado.

PUT /storefront/v1/orders/:id/cancel

Cancela um pedido. Só funciona se o status for pending.

👤 Storefront API - Perfil

GET /storefront/v1/profile

Retorna dados do perfil do usuário autenticado.

PUT /storefront/v1/profile
{
  "user": {
    "name": "João Silva Santos",
    "password": "novasenha123",
    "password_confirmation": "novasenha123"
  }
}

⚙️ Admin API

Todos os endpoints Admin requerem autenticação com perfil admin.

Dashboard

GET /admin/v1/home

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

pending → paid → processing → shipped → delivered ↓ cancelled

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
Não é possível excluir a própria conta de admin.

📊 Modelos de Dados

Diagrama ER

┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ USER │ │ CATEGORY │ │ PRODUCT │ ├─────────────────┤ ├─────────────────┤ ├─────────────────┤ │ id │ │ id │ │ id │ │ name │ │ name │ │ name │ │ email │ │ description │ │ description │ │ profile (enum) │ │ parent_id (FK) │───┐ │ price │ │ tokens (json) │ │ active │ │ │ stock_quantity │ └────────┬────────┘ └─────────────────┘ │ │ category_id (FK)│──┐ │ ↑ │ │ active │ │ │ └─────────────┘ └─────────────────┘ │ │ (self-reference) ↑ │ │ │ │ │ has_many │ │ ▼ │ │ ┌─────────────────┐ ┌──────────┴──────────┐ │ │ ORDER │ │ ORDER_ITEM │ │ ├─────────────────┤ ├─────────────────────┤ │ │ id │ │ id │ │ │ user_id (FK) │──────────────────────────────│ order_id (FK) │ │ │ status (enum) │ has_many │ product_id (FK) │─┘ │ total │ │ quantity │ │ created_at │ │ unit_price │ └─────────────────┘ └─────────────────────┘

User

Campo Tipo Descrição
idintegerID único
namestringNome completo
emailstringEmail (único)
profileenumadmin (0) | client (1)
created_atdatetimeData de criação

Product

Campo Tipo Descrição
idintegerID único
namestringNome do produto
descriptiontextDescrição
pricedecimalPreço (10,2)
stock_quantityintegerQuantidade em estoque
category_idintegerFK para Category
activebooleanProduto ativo

Order

Campo Tipo Descrição
idintegerID único
user_idintegerFK para User
statusenumpending|paid|processing|shipped|delivered|cancelled
totaldecimalTotal calculado
created_atdatetimeData 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

← Voltar para Home