Aller au contenu

Conventions de nommage des SDKs

Ce que les SDKs renomment, ce qu'ils conservent et où se situe la limite.

L'API Wajub utilise le snake_case dans les échanges : created_at, authorization_url, per_page. Chaque SDK doit déterminer dans quelle mesure adapter ces noms au langage hôte.

La réponse de Wajub est volontairement limitée. Les noms de méthodes suivent les conventions de votre langage, mais pas les noms de champs des payloads. Dans les sept SDKs, un champ conserve le nom donné par l'API.

Ce qui change et ce qui ne change pas

CoucheSuit les conventions du langageExemple
Noms des clients, ressources et méthodesOuiwajub.payments.listRefunds(), client.Payments.ListRefunds()
Champs envoyésNon"authorization_url", "per_page", "decline_code"
Champs reçusNonpayment.authorization_url, payment["created_at"]
Chemins HTTP et paramètres d'URLNon/webhook-endpoints, ?per_page=50
Noms des en-têtesNonIdempotency-Key, X-Wajub-Signature
Valeurs d'énumérationNonpayment.succeeded, pending, XAF
Identifiants de ressourcesNontrx_…, cus_…, po_…

Un champ s'écrit donc toujours de la même façon, quel que soit le SDK. Vous pouvez lire la référence API depuis n'importe lequel d'entre eux sans conversion mentale.

"authorization_url": "https://pay.wajub.com/tok_xxxxx"

En Ruby, utilisez payment.authorization_url, en Java payment.getRaw().get("authorization_url") et en C# payment.Raw["authorization_url"].

Noms de méthodes par langage

SDKStyleExemple de méthode
Node.jscamelCasewajub.webhookEndpoints.rotateSecret()
Pythonsnake_casewajub.webhook_endpoints.rotate_secret()
PHPcamelCase$wajub->webhookEndpoints->rotateSecret()
GoPascalCaseclient.WebhookEndpoints.RotateSecret()
Rubysnake_caseclient.webhook_endpoints.rotate_secret
JavacamelCaseclient.webhookEndpoints().rotateSecret()
C#PascalCase avec Asyncclient.WebhookEndpoints.RotateSecretAsync()

Deux noms ont demandé une adaptation supplémentaire, car le choix évident était déjà réservé.

EmplacementRaison
initialize_payment en Rubyinitialize est le constructeur. Tous les autres SDKs appellent l'alias initialize
wajub.global_ en Pythonglobal est un mot-clé. Tous les autres SDKs nomment l'accesseur global

Les langages typés décodent quelques champs

Go, Java et C# sont typés statiquement. Ils ne peuvent donc pas vous transmettre un ensemble arbitraire de champs dans lequel vous pourriez piocher. Ils décodent une petite structure et conservent tout le reste sous forme brute.

payment.id
payment.status
payment.amount
payment.currency
payment.authorization_url
payment.authorization_token
payment.reference         // an index signature covers the rest

Ce sont les seuls champs renommés dans toute l'interface. La conversion est mécanique : authorization_url devient AuthorizationURL en Go, getAuthorizationUrl() en Java et AuthorizationUrl en C#.

Les SDKs mobiles ont fait deux fois le choix inverse

C'est le seul endroit où cette règle n'est pas cohérente.

SDKStyle des champsExemple
wajub_mobile (Flutter)Renommés en camelCaseerror.declineCode, transaction.amountTotal
com.wajub:wajub-mobile-core (Android)Renommés en camelCaseerror.declineCode, channel.publishableKey
@wajub/react-nativeConservés en snake_caseerror.decline_code, channel.publishable_key

Flutter et Android décodent les données dans des classes et renomment les champs au passage. React Native conserve leur format d'échange. Le portage d'un handler entre React Native et Flutter impose donc de renommer chaque champ. Tenez-en compte avant de commencer.

Lire la référence API depuis n'importe quel SDK

La référence documente le format d'échange. Appliquez exactement une transformation.

Dans la référenceDans votre code
POST /webhook-endpoints/{id}/rotate-secretLa méthode, selon les conventions de votre langage
authorization_url dans le corps de la réponseLa même chaîne, inchangée
per_page comme paramètre d'URLLa même chaîne, inchangée

Sans SDK, tout utilise le snake_case

Un appel HTTP brut envoie et reçoit du snake_case dans les corps JSON et les paramètres d'URL. Aucun endpoint n'accepte le camelCase.

Que pensez-vous de ce contenu ?