Skip to content

Naming Conventions

Soxom automatically transforms names to match each language’s conventions, ensuring idiomatic code generation.

OpenAPITypeScriptPythonGoJava
user_nameuserNameuser_nameUserNameuserName
createdAtcreatedAtcreated_atCreatedAtcreatedAt
API_KEYapiKeyapi_keyAPIKEYapiKey
HTMLParserhtmlParserhtml_parserHTMLParserhtmlParser
OpenAPI/ConfigTypeScriptPythonGoJava
listlistlistListlist
getgetgetGetget
createcreatecreateCreatecreate
getUserByIdgetUserByIdget_user_by_idGetUserByIDgetUserById
OpenAPI SchemaTypeScriptPythonGoJava
UserUserUserUserUser
user_profileUserProfileUserProfileUserProfileUserProfile
HTTPResponseHttpResponseHttpResponseHTTPResponseHttpResponse

Soxom generates method names based on HTTP method and path pattern:

HTTP MethodPath PatternDefault Name
GET/resourceslist
GET/resources/{id}get
POST/resourcescreate
PUT/resources/{id}update
PATCH/resources/{id}patch
DELETE/resources/{id}delete
HTTP MethodPath PatternDefault Name
POST/resources/{id}/cancelcancel
POST/resources/{id}/archivearchive
POST/resources/batchbatch
GET/resources/{id}/statusgetStatus
resources:
orders:
methods:
# Use custom names
fetchAll: get /orders # Instead of "list"
archive: delete /orders/{id} # Instead of "delete"

Model names come directly from OpenAPI schema names:

components:
schemas:
User: # → User
UserCreate: # → UserCreate
user_settings: # → UserSettings (PascalCase)
APIToken: # → ApiToken / APIToken (language-dependent)
  1. PascalCase for types - All languages use PascalCase for type names
  2. Preserve acronyms - API, HTTP, URL handling varies by language
  3. Remove invalid characters - Spaces, special chars are removed

Different languages handle acronyms differently:

InputTypeScriptPythonGoJava
APIKeyApiKeyApiKeyAPIKeyApiKey
HTTPStatusHttpStatusHttpStatusHTTPStatusHttpStatus
userIDuserIduser_idUserIDuserId
XMLParserXmlParserXmlParserXMLParserXmlParser

Generated code uses original OpenAPI names for JSON:

interface User {
userName: string; // TypeScript property name
}
// Serializes to/from:
// { "user_name": "..." } ← Original OpenAPI name
type User struct {
UserName string `json:"user_name"` // Tag preserves original
}

Soxom handles language reserved words automatically:

ConflictTypeScriptPythonGoJava
classclass_class_ClassclassValue
typetype_type_Type_typeValue
defaultdefault_default_Default_defaultValue
UserStatus:
type: string
enum: [active, inactive, pending]
LanguageType NameValues
TypeScriptUserStatus'active' | 'inactive' | 'pending'
PythonUserStatus(Enum)ACTIVE, INACTIVE, PENDING
GoUserStatusUserStatusActive, UserStatusInactive
JavaUserStatusACTIVE, INACTIVE, PENDING
OpenAPI ValueTypeScriptPythonGoJava
active'active'ACTIVEUserStatusActiveACTIVE
in-progress'in-progress'IN_PROGRESSUserStatusInProgressIN_PROGRESS
PENDING'PENDING'PENDINGUserStatusPendingPENDING

Generated file names follow language conventions:

ContentTypeScriptPythonGoJava
User typeuser.tsuser.pyuser.goUser.java
Users resourceusers.tsusers.pyusers.goUsers.java
Clientclient.tsclient.pyclient.goClient.java
  1. Use snake_case for properties - Most universally compatible
  2. Use PascalCase for schemas - Becomes type names directly
  3. Use descriptive operationIds - Helps with method naming
  4. Avoid reserved words - Even though Soxom handles them
# Good naming in OpenAPI
components:
schemas:
User: # PascalCase for types
type: object
properties:
user_name: # snake_case for properties
type: string
created_at: # snake_case with common suffix
type: string
format: date-time
status:
$ref: '#/components/schemas/UserStatus'
UserStatus: # PascalCase for enums
type: string
enum:
- active # lowercase for enum values
- inactive
- pending