camelCase vs snake_case: ¿Qué formato usar en nombres de campos JSON?

Oliver Kingsley

Oliver Kingsley

17 December 2025

camelCase vs snake_case: ¿Qué formato usar en nombres de campos JSON?

En el diseño arquitectónico de sistemas distribuidos, las APIs no son solo conductos para la interacción del sistema; son contratos que conectan diferentes pilas tecnológicas, culturas organizativas e incluso eras de desarrollo. Dentro de los detalles de diseño de las APIs RESTful, un tema aparentemente menor provoca un debate interminable: ¿Los nombres de los campos JSON deben usar camelCase o snake_case?

Esto no es meramente una elección estética. Toca el "desajuste de impedancia" entre las capas de persistencia del backend y las capas de presentación del frontend, involucrando el rendimiento de la serialización, la eficiencia de la transmisión de red, la Experiencia del Desarrollador (DX) y la psicología cognitiva.

Basado en la historia de los lenguajes de programación, los mecanismos de implementación técnica subyacentes y las decisiones arquitectónicas de gigantes de la industria como Google y Stripe, este artículo proporciona una guía de decisión de nivel experto.

botón

1. Orígenes Históricos: Una Elección Semiótica

Para entender este debate, debemos rastrear la evolución de los lenguajes informáticos. Las convenciones de nombres no aparecieron de la nada; son productos de las limitaciones de hardware y las culturas comunitarias de épocas específicas.

El Origen de snake_case: C y la Filosofía Unix

La popularidad de snake_case (por ejemplo, user_id) se remonta a C y Unix en la década de 1970. Aunque los teclados primitivos (como el Teletype Model 33) tenían teclas de mayúsculas, muchos compiladores antiguos no distinguían entre mayúsculas y minúsculas. Para distinguir claramente las palabras en pantallas de baja resolución, los programadores introdujeron el guion bajo para simular espacios en el lenguaje natural. Este hábito se arraigó profundamente en los estándares de las bases de datos SQL. Hasta el día de hoy, el estilo predeterminado de nombres de columna para PostgreSQL y MySQL sigue siendo snake_case, sentando las bases para la futura fricción de mapeo entre APIs y bases de datos.

El Auge de camelCase: La Hegemonía de Java y JavaScript

camelCase (por ejemplo, userId) surgió con la Programación Orientada a Objetos (Smalltalk, C++, Java). Java estableció el estándar industrial de "PascalCase para clases, camelCase para métodos/variables". El punto de inflexión decisivo fue el nacimiento de JavaScript. Aunque JSON se originó a partir de literales de objetos JS, la biblioteca estándar de JS (por ejemplo, getElementById) adoptó camelCase de forma generalizada. A medida que AJAX y JSON reemplazaron a XML como los formatos dominantes de intercambio de datos, camelCase ganó un estatus "nativo" en el dominio web.


2. Conflicto Central: Desajuste de Impedancia de las Pilas Tecnológicas

Cuando los datos fluyen entre diferentes lenguajes, inevitablemente encuentran un "desajuste de impedancia".

La Perspectiva del Backend (Python/Ruby/SQL)

En el backend, las comunidades de Python (PEP 8) y Ruby recomiendan encarecidamente snake_case.

class UserProfile(BaseModel):
    first_name: str  # Convención de Python
    last_name: str

Si la API exige camelCase, debes configurar alias o convertidores en la capa de serialización. Si bien es factible, esto añade una capa de lógica de mapeo.

La Perspectiva del Frontend (JavaScript/TypeScript)

En el navegador, camelCase es el rey absoluto.

const user = await fetchUser();
console.log(user.first_name); // Viola la regla de camelcase de ESLint
render(user.email_address);

ESLint marcará esto como una advertencia, obligando a los desarrolladores a deshabilitar la regla o a convertir los datos inmediatamente después de recibirlos.

// Renombrado verboso
const { first_name: firstName, last_name: lastName } = response.data;

Esto aumenta el código repetitivo y la probabilidad de errores.


3. Mitos de Rendimiento: Serialización y Transmisión de Red

Respecto al rendimiento, existen dos mitos comunes: "La conversión de nombres de campo es demasiado lenta" y "Los guiones bajos aumentan el tamaño de la carga útil." Aclaremos con datos.

Mito 1: Sobrecarga de Conversión en Tiempo de Ejecución

Nota: Nunca realices una conversión recursiva global en el frontend (hilo principal del navegador) utilizando interceptores (por ejemplo, Axios). Para respuestas grandes, esto causa intermitencia de la página y agotamiento de la memoria. Conclusión: El backend debe encargarse de la conversión.

Mito 2: Tamaño de Transmisión y Compresión

Teóricamente, first_name es un byte más largo que firstName. Sin embargo, con la compresión Gzip o Brotli habilitada (configuración HTTP estándar), esta diferencia prácticamente desaparece.


4. Experiencia del Desarrollador (DX) y Psicología Cognitiva

La arquitectura no se trata solo de máquinas; se trata de personas.


5. Estándares de la Industria y Justificación

Organización Elección Lógica Central y Antecedentes
Google camelCase La Guía de API de Google (AIP-140) exige lowerCamelCase para JSON. Incluso si las definiciones internas de Protobuf usan snake_case, la capa de conversión externa cambia automáticamente a camelCase para alinearse con el ecosistema web.
Microsoft camelCase Con la adopción de código abierto por parte de .NET Core y la invención de TypeScript, Microsoft pivotó completamente hacia los estándares web, abandonando el antiguo PascalCase.
Stripe snake_case Una empresa típica de pila Ruby. Enmascaran la diferencia proporcionando SDKs de Cliente extremadamente robustos. Cuando usas el SDK de Node, aunque se transmite snake_case, las firmas de los métodos del SDK suelen seguir las convenciones de JS.
JSON:API camelCase La especificación impulsada por la comunidad recomienda explícitamente camelCase, reflejando el consenso de la comunidad web.

6. Consejo Arquitectónico Profundo: Desacoplamiento y DTOs

Un antipatrón común es el "Paso directo": serializar directamente las entidades de la base de datos para devolverlas.

Mejor Práctica: Introduce una capa de DTO (Objeto de Transferencia de Datos). Independientemente de cómo se nombre la base de datos subyacente, debes definir un contrato de API independiente (DTO). Dado que estás definiendo un DTO, ¿por qué no definirlo como camelCase para adherirte a los estándares web? Las herramientas de mapeo modernas (MapStruct, AutoMapper, Pydantic) manejan esta conversión sin esfuerzo.


7. Mirando Hacia el Futuro: GraphQL y gRPC

GraphQL: La comunidad adopta casi al 100% camelCase. Si tu equipo planea introducir GraphQL en el futuro, diseñar APIs REST con camelCase ahora es una estrategia inteligente de "compatibilidad futura".

gRPC: El estándar Protobuf dicta: los archivos .proto usan snake_case para las definiciones de campo, pero deben convertirse a camelCase cuando se mapean a JSON. Esta es la solución estándar de Google para entornos multilingües.


8. Resumen y Matriz de Decisión

No hay un bien o un mal absoluto, solo compensaciones. Aquí está el marco de decisión final:

Recomendado: Por Defecto a camelCase

Para la gran mayoría de las APIs RESTful nuevas y de propósito general que se enfrentan a clientes web/aplicaciones, se recomienda encarecidamente camelCase.

Razón: Alinear con el dominio de JSON/JavaScript/TypeScript, adoptando los hábitos del 90% de los consumidores.

Herramientas: Obtén el mejor soporte de los generadores de código OpenAPI, Swagger UI y los IDE modernos.

¿Cuándo usar snake_case?

1. Consumidores Específicos: Los usuarios principales de la API son científicos de datos de Python o operadores de sistemas (Curl/Bash).

2. Sistemas Heredados: Las APIs existentes ya son snake_case. Consistencia > Mejor Práctica. No mezcles estilos dentro del mismo sistema.

3. Extremismo en la Velocidad del Backend: Usando Python/Ruby sin los recursos para mantener una capa DTO, pasando directamente los modelos de la base de datos.

Tabla de Decisiones

Dimensión Estilo Recomendado
Frontend Web / Aplicación Móvil camelCase (Impedancia cero, seguridad de tipo)
Análisis de Datos / Computación Científica snake_case (Se ajusta a los hábitos de Python/R)
Backend Node.js / Go / Java camelCase (Soporte nativo o de biblioteca perfecto)
Backend Python / Ruby camelCase (Convertidor recomendado) o snake_case (Solo herramientas internas)
Equipo Full-Stack Cuanto mayor sea el grado de full-stack, más se recomienda camelCase

La esencia del diseño de APIs es la empatía. En el contexto de las APIs web, encapsular la complejidad en el backend (manejando el mapeo) y dejar la conveniencia al usuario (adhiriéndose a los hábitos de JS) es la elección que refleja mayor profesionalismo.

Practica el diseño de API en Apidog

Descubre una forma más fácil de construir y usar APIs