Saltar al contenido principal

Convenciones de Nomenclatura

Esta guía establece las convenciones de nomenclatura a utilizar en todo el stack tecnológico: base de datos, backend (Python) y APIs. La consistencia en los nombres es fundamental para la mantenibilidad y la colaboración entre equipos.


Resumen Ejecutivo

ContextoFormatoEjemplo
URLs / Endpointskebab-case/api/v1/tipos-de-producto
Columnas de BD / JSONPascalCaseProductoId, IsActive
Variables Pythonsnake_caseproducto_id, is_active
Clases PythonPascalCaseProductoResponseDTO
Funciones Pythonsnake_caseobtener_producto()
Archivos Pythonsnake_case.pytipo_producto.py
Tablas SQLPascalCaseProductoCatalog

1. URLs y Endpoints

Formato: kebab-case

Las URLs deben ser legibles, en minúsculas, y con palabras separadas por guiones.

✅ Correcto❌ Incorrecto
/api/v1/usuarios/api/v1/Usuarios
/api/v1/tipos-de-producto/api/v1/tiposDeProducto
/api/v1/ordenes-de-compra/api/v1/ordenes_de_compra

Reglas Adicionales

  • Sustantivos en plural: /api/v1/productos (no /api/v1/producto).
  • Sin verbos en la URL: Usar métodos HTTP en su lugar.
  • Sin extensiones: No usar .json, .xml, etc.

2. Base de Datos y JSON

Formato: PascalCase

Todas las columnas de la base de datos y campos de JSON deben usar PascalCase. Esto asegura consistencia directa entre el modelo de datos y las respuestas de la API.

✅ Correcto❌ Incorrecto
ProductoIdproducto_id
NombreCompletonombreCompleto
IsActiveis_active
InsDatetimeins_datetime

Campos Estándar

Todas las tablas deben incluir estos campos de control:

CampoTipoDescripción
[Entidad]IdINT (PK)Identificador único auto-incremental.
IsActiveBOOLEANEstado activo/inactivo (soft delete).
InsDatetimeTIMESTAMPFecha de creación (automática).
UpDatetimeTIMESTAMPFecha de última actualización.
UserEmailVARCHAR(100)Email del usuario que realizó la acción.

3. Variables y Funciones Python

Formato: snake_case

Siguiendo PEP 8, todas las variables y funciones en Python deben usar snake_case.

✅ Correcto❌ Incorrecto
producto_idproductoId
nombre_completoNombreCompleto
obtener_usuario()obtenerUsuario()
crear_producto()CrearProducto()

Mapeo con Pydantic

Pydantic permite usar alias para mapear entre PascalCase (JSON) y snake_case (Python), pero en este estándar usamos PascalCase directamente en los DTOs para evitar la complejidad adicional.

# Enfoque estándar (PascalCase en DTOs)
class ProductoResponseDTO(BaseModel):
ProductoId: int
NombreCompleto: str
IsActive: bool

4. Clases Python

Formato: PascalCase

Las clases deben usar PascalCase sin guiones ni guiones bajos.

Tipo de ClasePatrónEjemplo
DTOs[Entidad][Tipo]DTOProductoCreateDTO
Modelos SQLAlchemy[Entidad]ModelProductoModel
RepositoriosSQLAlchemy[Entidad]RepositorySQLAlchemyProductoRepository
Casos de Uso[Accion][Entidad]UseCaseCrearProductoUseCase
Routers(archivo, no clase)producto.py

5. Archivos Python

Formato: snake_case.py

Los archivos deben usar snake_case y la extensión .py.

✅ Correcto❌ Incorrecto
tipo_producto.pyTipoProducto.py
orden_de_compra.pyordenDeCompra.py
usuario_repositorio.pyUsuarioRepositorio.py

Estructura de Archivos por Entidad

Para cada entidad [Entidad], se crean los siguientes archivos:

app/
├── api/routers/[entidad].py
├── application/
│ ├── dto/[entidad].py
│ └── use_cases/[entidad].py
├── domain/
│ ├── entities/[entidad].py
│ └── adapters/[entidad].py
└── infrastructure/
├── models/[entidad].py
└── repositories/[entidad].py

6. Tablas SQL

Formato: PascalCase + Sufijo de Tipo

Las tablas deben nombrarse en PascalCase y terminar con un sufijo que indique su tipo:

TipoSufijoEjemplo
CatálogoCatalogProductoCatalog
HistorialHistoryOrdenHistory
RelaciónRelationProductoCategoriaRelation

Esquema

Todas las tablas deben crearse dentro del esquema definido para la aplicación (ej. AppSchema).

CREATE TABLE "AppSchema"."ProductoCatalog" (
"ProductoId" SERIAL PRIMARY KEY,
"Nombre" VARCHAR(100) NOT NULL,
"IsActive" BOOLEAN DEFAULT TRUE,
"InsDatetime" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"UpDatetime" TIMESTAMP,
"UserEmail" VARCHAR(100) NOT NULL
);

Checklist de Verificación

Antes de hacer merge, verifica:

  • Los endpoints usan kebab-case y sustantivos en plural.
  • Los campos de JSON y BD usan PascalCase.
  • Las variables y funciones Python usan snake_case.
  • Las clases Python usan PascalCase con el sufijo correcto.
  • Los archivos Python usan snake_case.py.
  • Las tablas SQL usan PascalCase con el sufijo de tipo.

Temas Relacionados