8.2 KiB
8.2 KiB
📝 Guía de Convenciones para Nombres de Schemas
Esta guía define cómo nombrar los Schemas de Requests y Responses según el tipo de operación y el contexto (recurso único o colección).
1️⃣ Operaciones sobre recurso único
Patrón
<Condición>
- Verbo: describe la acción (
Get,Delete,Update,Patch,Create). - Entidad: en singular (
Product,Customer,Invoice). - Condición: criterio de selección (
ById,BySlug,ByEmail). - TipoDeSchema: origen o propósito (
ParamsSchema,CommandSchema,QuerySchema).
Ejemplos ✅
GetProductByIdParamsSchemaDeleteCustomerByIdParamsSchemaUpdateInvoiceByIdCommandSchema
Ejemplos ❌
ProductGetByIdParamsSchema(orden invertido, menos natural).GetProductsByIdParamsSchema(plural innecesario en recurso único).
Lectura natural: "Esquema de parámetros para obtener un producto por id".
2️⃣ Operaciones sobre colecciones
Patrón
List<Criterio/Filtro>
- Entidad: en singular (
Product,Customer). - List: indica conjunto/listado.
- Criterio/Filtro: tipo de filtrado (
Criteria,Query). - TipoDeSchema:
SchemaoResponseSchemasegún corresponda.
Ejemplos ✅
ProductListCriteriaSchemaCustomerListResponseSchemaInvoiceListQuerySchema
Ejemplos ❌
ListProductCriteriaSchema(el orden “ListProduct” suena a verbo y no a colección).ProductsListCriteriaSchema(plural innecesario en el nombre base).
Lectura natural: "Esquema de criterios para una lista de productos".
3️⃣ Reglas generales
- Singular siempre para el nombre base de la entidad.
- El verbo solo en operaciones sobre un recurso único o mutaciones.
- En listados, el sustantivo principal primero (
ProductList,CustomerList), nuncaListProduct. - Sufijos estándar:
CommandSchema→ body de mutaciones (create/update/patch).ParamsSchema→ route params (/:id).QuerySchema→ query string no normalizada.CriteriaSchema→ query normalizada con patrón Criteria.ResponseSchema→ respuesta de la API.
- Mantener consistencia: si usas
ProductListCriteriaSchema, no alternes conProductsCriteriaSchema.
4️⃣ Ejemplos positivos y negativos
| ✅ Correcto | ❌ Incorrecto | Motivo del error |
|---|---|---|
GetCustomerByIdParamsSchema |
CustomerGetByIdParamsSchema |
Orden invertido. |
ProductListCriteriaSchema |
ListProductCriteriaSchema |
Orden “ListProduct” no natural en inglés. |
CustomerListResponseSchema |
CustomersListResponseSchema |
Plural innecesario. |
DeleteInvoiceByIdParamsSchema |
DeleteInvoicesByIdParamsSchema |
Plural innecesario en recurso único. |
UpdateProductByIdCommandSchema |
UpdateProductCommandByIdSchema |
ById debe ir antes del tipo de esquema. |
Convenciones de nombres para Schemas (Requests y Responses)
Tabla de rutas ↔ Schemas
| Método | Ruta | Caso de uso | Request Schema (validación) | Response Schema (DTO) | Notas |
|---|---|---|---|---|---|
| GET | /entities |
Listado con criterios (Criteria normalizado) | EntityListCriteriaSchema |
EntityListResponseSchema |
data: EntitySummary[], pageNumber, pageSize, totalItems. |
| GET | /entities |
Búsqueda/filtrado por query params “raw” | SearchEntityQuerySchema |
EntityListResponseSchema |
Úsalo si no aplicas patrón Criteria. |
| GET | /entities/:id |
Obtener por ID | GetEntityByIdParamsSchema |
EntityDetailResponseSchema |
Si devuelves el recurso “puro”, puedes usar EntityResourceSchema. |
| POST | /entities |
Crear recurso | CreateEntityCommandSchema |
EntityCreatedResponseSchema o EntityResourceSchema |
Si devuelves 201 + recurso completo, usa EntityResourceSchema. |
| PUT | /entities/:id |
Reemplazar recurso (idempotente) | UpdateEntityCommandSchema + UpdateEntityByIdParamsSchema |
EntityResourceSchema |
También válido con PATCH para cambios parciales. |
| PATCH | /entities/:id |
Actualizar parcialmente | PatchEntityCommandSchema + UpdateEntityByIdParamsSchema |
EntityResourceSchema |
Usa un comando separado si el payload difiere del PUT. |
| DELETE | /entities/:id |
Eliminar por ID | DeleteEntityByIdParamsSchema |
— (204 No Content) o EntityDeletedResponseSchema |
204 recomendado. Si devuelves body, usa EntityDeletedResponseSchema. |
Esquemas reutilizables (Responses)
-
Item para listados:
EntitySummarySchema -
Recurso completo:
EntityResourceSchema -
Respuestas compuestas:
EntityListResponseSchema→data: EntitySummarySchema[]+ paginación/metaEntityDetailResponseSchema→ típicamenteEntityResourceSchemaEntityCreatedResponseSchema→{ id, createdAt, ... }si no devuelves el recurso completoEntityDeletedResponseSchema→{ id, deleted: true }si no usas 204
Convenciones de sufijos
Requests
...CommandSchema→ body (mutaciones)...ParamsSchema→ route params (/:id)...QuerySchema→ query string (?page=...)...CriteriaSchema→ para queries normalizadas con patrón Criteria
Responses
...ListResponseSchema→ listado paginado...SummarySchema→ item de listado...DetailResponseSchema→ detalle de recurso...ResourceSchema→ representación completa del recurso...CreatedResponseSchema→ recurso recién creado...DeletedResponseSchema→ confirmación de borrado (si no usas 204)
Ejemplos de nombres de Schemas por entidad
1. Customers
Requests
CreateCustomerCommandSchemaUpdateCustomerCommandSchemaPatchCustomerCommandSchemaDeleteCustomerByIdParamsSchemaGetCustomerByIdParamsSchemaCustomerListCriteriaSchemaSearchCustomerQuerySchema
Responses
CustomerSummarySchemaCustomerResourceSchemaCustomerListResponseSchemaCustomerDetailResponseSchemaCustomerCreatedResponseSchemaCustomerDeletedResponseSchema
2. Products
Requests
CreateProductCommandSchemaUpdateProductCommandSchemaPatchProductCommandSchemaDeleteProductByIdParamsSchemaGetProductByIdParamsSchemaProductListCriteriaSchemaSearchProductQuerySchema
Responses
ProductSummarySchemaProductResourceSchemaProductListResponseSchemaProductDetailResponseSchemaProductCreatedResponseSchemaProductDeletedResponseSchema
Notas
- Reutilizar esquemas básicos (
EntitySummarySchema,EntityResourceSchema) en respuestas compuestas para cumplir el principio DRY. - Sufijos: mantener siempre los sufijos
CommandSchema,ParamsSchema,QuerySchema,CriteriaSchema,ListResponseSchema,SummarySchema,DetailResponseSchema,ResourceSchema,CreatedResponseSchema,DeletedResponseSchema. - Pluralización: usar singular para el nombre de la entidad en los Schemas (ej.
Customer,Product), incluso si la ruta es plural (/customers,/products). - Carpetas sugeridas: modules/ / application/ dto/ requests/ responses/ domain/ infrastructure/ api/