Les pubs vous déplaisent ? Aller Sans pub Auj.

Conversion de casse de chaîne snake_case, camelCase et pourquoi cela importe dans les API

Publié le
Conversion de casse de chaîne : snake_case, camelCase et pourquoi cela importe dans les API 1
ANNONCE · Supprimer ?

La gestion de la casse des chaînes est l'un de ces sujets que les développeurs n'ont pas en tête jusqu'à ce qu'elle casse quelque chose en production. Une interface JavaScript en frontend envoie userId mais le backend en Python attend user_id. Un ORM renomme discrètement votre colonne SQL. Une tâche de CI échoue car une variable d'environnement était mal orthographiée.

Les conventions de cas existent parce que les langages, les frameworks et les systèmes ont évolué séparément — chacun avec ses propres idiomes. Comprendre quel format convient à quel endroit et savoir comment passer d'un format à l'autre est une compétence pratique qui économise du temps de débogage.

Les principaux formats de casse

Voici un aperçu rapide de ce que vous rencontrerez dans la pratique, et où chaque format est le bon choix :

ContexteConventionExempleRemarques
Variables JavaScript / clés JSONcas de chameauuserId, firstNameLa plupart des API REST suivent ce format
Variables Python / clés JSONcas_de_serpentuser_id, first_namePar défaut dans Django, FastAPI, SQLAlchemy
Noms de classes (la plupart des langages)PascalCaseUserProfile, ApiResponseÉgalement appelé UpperCamelCase
Chemins d'URLkebab-case/user-profile, /api-docsMeilleur pour le SEO que les underscores
Variables d'environnementSCREAMING_SNAKEDATABASE_URL, API_KEYUniversal dans les shells et les plateformes CI
En-têtes HTTPTrain-CaseContent-Type, X-Api-KeyStandard HTTP/1.1
Colonnes / tables SQLcas_de_serpentuser_id, created_atConvention PostgreSQL, MySQL

Pourquoi une mauvaise gestion de la casse casse les intégrations API

La source la plus fréquente de problème est la frontière JavaScript/Python. Les écosystèmes JavaScript — React, Node, API du navigateur — produisent du camelCase. Les écosystèmes Python — FastAPI, Django REST Framework, SQLAlchemy — attendent du snake_case.

Quand un client JavaScript envoie ce payload :

{
  "firstName": "Alice",
  "userId": 42
}

Un serveur Python accédant à request.json["first_name"] reçoit un KeyError. Aucun avertissement, aucune fallback — juste une erreur. FastAPI peut combler cela avec alias_generator = to_camel sur les modèles Pydantic, mais ce n'est qu'une configuration optionnelle que la plupart des équipes n'activent qu'après avoir rencontré le bug.

Le même problème apparaît à la frontière JavaScript/GraphQL, entre microservices écrits dans des langages différents, et partout où vous déserialisez un JSON sans une correspondance explicite des champs.

Conversion programmée

La plupart des langages ont résolu ce problème, mais les approches varient.

JavaScript : L'option la plus propre est change-case (légère) ou lodash (_.camelCase, _.snakeCase). Si vous préférez éviter la dépendance :

// camelCase → snake_case
const toSnakeCase = str =>
  str.replace(/[A-Z]/g, letter => `_${letter.toLowerCase()}`);

toSnakeCase('userName');   // 'user_name'
toSnakeCase('createdAt');  // 'created_at'

Python : Le re le module la gère, mais la version en une étape échoue sur des acronymes comme HTTPSProxy. Utilisez l'approche en deux étapes :

import re

def to_snake_case(name):
    s1 = re.sub(r'(.)([A-Z][a-z]+)', r'\1_\2', name)
    return re.sub(r'([a-z0-9])([A-Z])', r'\1_\2', s1).lower()

to_snake_case('userName')    # 'user_name'
to_snake_case('HTTPSProxy')  # 'https_proxy'

Go : La bibliothèque standard ne comporte pas de convertisseur de casse. github.com/iancoleman/strcase est la solution courante :

import "github.com/iancoleman/strcase"

strcase.ToSnake("UserName")  // "user_name"
strcase.ToCamel("user_name") // "UserName"
strcase.ToKebab("UserName")  // "user-name"

Si vous avez besoin d'une conversion rapide sans écrire de code, le Convertisseur de casse de chaîne IO Tools gère camelCase, PascalCase, snake_case, kebab-case, SCREAMING_SNAKE et plus — sans installation requise.

Conventions de bases de données et pièges des ORMs

Les bases de données SQL — PostgreSQL, MySQL, SQLite — utilisent traditionnellement snake_case pour les noms de colonnes et de tables. user_id, created_at, payment_method. C'est le format attendu, et les requêtes SQL brutes le reflètent.

Les ORMs convertissent souvent automatiquement entre la convention de nommage de votre langage et celle de la base de données, ce qui est pratique jusqu'à ce qu'il ne le soit plus. Sequelize convertit par défaut le camelCase JavaScript en snake_case dans certaines configurations — sauf quand il ne le fait pas, selon les options du modèle, le dialecte ou la version. Prisma génère des noms de champs en camelCase qui correspondent aux colonnes en snake_case. ActiveRecord plurielle les noms de tables et tout en snake_case.

La solution pragmatique : être explicite. Définissez les noms de colonnes dans vos définitions de modèle plutôt que de dépendre de la conversion automatique. Cela rend la correspondance visible lors des revues de code et évite les surprises lorsque vous exécutez des requêtes brutes ou que vous passez à un autre ORM.

Pour les chemins d'URL, utilisez kebab-case, pas des underscores

Pour les chemins d'URL, kebab-case est la recommandation claire. La documentation de Google a historiquement traité les traits comme des séparateurs de mots et les underscores comme des joints de mots. Un chemin d'URL comme /string-case-converter signale deux mots distincts; /string_case_converter se lit comme un seul mot.

L'implication pratique : les URLs en kebab-case fonctionnent mieux pour le ciblage de mots composés dans les recherches. Ce n'est pas un facteur de classement majeur, mais il coûte rien de le faire correctement dès le départ.

Les grands API s'entendent — GitHub, Stripe et Twilio utilisent tous kebab-case pour les chemins d'URL. Les segments comme /api/v1/user-profiles sont lisibles, faciles à taper et conformes aux standards web.

Fichiers de configuration : SCREAMING_SNAKE pour les variables d'environnement, camelCase pour YAML

Les variables d'environnement utilisent universellement SCREAMING_SNAKE_CASE. DATABASE_URL, AWS_SECRET_ACCESS_KEY, REDIS_HOST — cette convention est maintenue dans Linux, Docker, Kubernetes et chaque plateforme CI/CD que vous rencontrerez. Les shells exportent ces variables avec ce format. Ne les contredisez pas.

Les fichiers de configuration YAML racontent une autre histoire. Les manifestes Kubernetes, Docker Compose et les workflows GitHub Actions utilisent camelCase pour les clés — apiVersion, containerPort, imagePullPolicy. Ansible est l'exception notoire, utilisant snake_case dans toutes ses définitions de tâches.

La règle ici est simple : correspondez au format attendu par l'outil. Ne tentez pas de normaliser dans tous vos fichiers de configuration — cela crée de l'incohérence sans économiser du temps.

Obtenir les conversions correctes

Le tableau ci-dessus couvre la plupart des scénarios. La véritable compétence est de savoir quand une incohérence de casse provoque une erreur en temps réel ou quand un framework la gère silencieusement. Quand vous travaillez à travers une frontière de langage, vérifiez ce que fait votre sérialiseur ou votre ORM — ne supposez pas que la conversion automatique a lieu.

Pour des conversions rapides, ponctuelles, sans écrire de code, le Convertisseur de casse de chaîne IO Tools gère tous les principaux formats en un seul endroit. Collez une chaîne, choisissez le format cible, c'est terminé.

Envie d'une expérience sans pub ? Passez à la version sans pub

Installez nos extensions

Ajoutez des outils IO à votre navigateur préféré pour un accès instantané et une recherche plus rapide

Sur Extension Chrome Sur Extension de bord Sur Extension Firefox Sur Extension de l'opéra

Le Tableau de Bord Est Arrivé !

Tableau de Bord est une façon amusante de suivre vos jeux, toutes les données sont stockées dans votre navigateur. D'autres fonctionnalités arrivent bientôt !

ANNONCE · Supprimer ?
ANNONCE · Supprimer ?
ANNONCE · Supprimer ?

Coin des nouvelles avec points forts techniques

Impliquez-vous

Aidez-nous à continuer à fournir des outils gratuits et précieux

Offre-moi un café
ANNONCE · Supprimer ?