Multi-Language SDK Generation
Generate client SDKs in Python, Go, C#, Java, TypeScript, and 50+ other languages from your OpenAPI specification
Multi-Language SDK Generation
Overview
DataBridge can generate type-safe client SDKs in 50+ programming languages from your OpenAPI specification. Enable backend teams to consume your API in their preferred language!
Supported Languages
Most Popular
- Python - With type hints and async support
- Go - Idiomatic Go with context
- C# / .NET - .NET Standard 2.0+
- Java - Java 8+ with OkHttp/Retrofit
- TypeScript - Axios or Fetch-based or HttpClient
- JavaScript - Node.js and browser
- Rust - Safe, fast, concurrent
- PHP - PSR-7 compliant
Also Supported
Ruby, Kotlin, Swift, Dart, Elixir, Scala, Perl, R, and 40+ more!
Quick Start
1. Generate OpenAPI Spec
databridge generate
This creates src/openapi.json.
2. Generate SDK
# Single language
databridge generate-sdk --lang python
# Multiple languages
databridge generate-sdk --lang python,go,csharp
3. Use the SDK
cd sdks/python
pip install -r requirements.txt
# Your client code
python client.py
Language-Specific Guides
Python
Generate
databridge generate-sdk --lang python
Install
cd sdks/python
pip install -r requirements.txt
# Or install in development mode
pip install -e .
Usage
from databridge_client import ApiClient, Configuration, UserApi
# Configure
config = Configuration()
config.host = "http://localhost:3000"
# Create client
with ApiClient(config) as api_client:
user_api = UserApi(api_client)
# List users
users = user_api.list_users(page=1, limit=10)
for user in users:
print(f"{user.id}: {user.name} ({user.email})")
# Create user
new_user = user_api.create_user({
"name": "John Doe",
"email": "john@example.com"
})
print(f"Created user ID: {new_user.id}")
# Get by ID
user = user_api.get_user_by_id(new_user.id)
# Update
updated = user_api.update_user(new_user.id, {
"name": "Jane Doe"
})
# Delete
user_api.delete_user(new_user.id)
Async Support
import asyncio
from databridge_client.api import UserApi
async def main():
async with UserApi() as api:
users = await api.list_users_async(page=1, limit=10)
print(users)
asyncio.run(main())
Go
Generate
databridge generate-sdk --lang go
Install
cd sdks/go
go mod init myapp
go mod tidy
Usage
package main
import (
"context"
"fmt"
"log"
databridge "path/to/sdks/go"
)
func main() {
config := databridge.NewConfiguration()
config.Host = "http://localhost:3000"
client := databridge.NewAPIClient(config)
ctx := context.Background()
// List users
users, resp, err := client.UserApi.ListUsers(ctx).
Page(1).
Limit(10).
Execute()
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
for _, user := range users {
fmt.Printf("%d: %s (%s)\n", user.Id, user.Name, user.Email)
}
// Create user
newUser := databridge.CreateUserDTO{
Name: "John Doe",
Email: "john@example.com",
}
created, _, err := client.UserApi.CreateUser(ctx).
Body(newUser).
Execute()
if err != nil {
log.Fatal(err)
}
fmt.Printf("Created user ID: %d\n", created.Id)
// Get by ID
user, _, err := client.UserApi.GetUserById(ctx, created.Id).Execute()
if err != nil {
log.Fatal(err)
}
// Update
update := databridge.UpdateUserDTO{
Name: databridge.PtrString("Jane Doe"),
}
updated, _, err := client.UserApi.UpdateUser(ctx, created.Id).
Body(update).
Execute()
// Delete
_, err = client.UserApi.DeleteUser(ctx, created.Id).Execute()
}
C# / .NET
Generate
databridge generate-sdk --lang csharp
Install
cd sdks/csharp
dotnet restore
dotnet build
Usage
using System;
using System.Threading.Tasks;
using DataBridge.Client.Api;
using DataBridge.Client.Client;
using DataBridge.Client.Model;
class Program
{
static async Task Main(string[] args)
{
var config = new Configuration
{
BasePath = "http://localhost:3000"
};
var userApi = new UserApi(config);
// List users
var users = await userApi.ListUsersAsync(page: 1, limit: 10);
foreach (var user in users)
{
Console.WriteLine($"{user.Id}: {user.Name} ({user.Email})");
}
// Create user
var newUser = new CreateUserDTO
{
Name = "John Doe",
Email = "john@example.com"
};
var created = await userApi.CreateUserAsync(newUser);
Console.WriteLine($"Created user ID: {created.Id}");
// Get by ID
var user = await userApi.GetUserByIdAsync(created.Id);
// Update
var update = new UpdateUserDTO
{
Name = "Jane Doe"
};
var updated = await userApi.UpdateUserAsync(created.Id, update);
// Delete
await userApi.DeleteUserAsync(created.Id);
}
}
TypeScript (Axios)
Generate
databridge generate-sdk --lang typescript-axios
Install
cd sdks/typescript-axios
npm install
npm run build
Usage
import { Configuration, UserApi } from 'databridge-client';
const config = new Configuration({
basePath: 'http://localhost:3000',
});
const userApi = new UserApi(config);
// List users
const users = await userApi.listUsers(1, 10);
users.data.forEach(user => {
console.log(`${user.id}: ${user.name} (${user.email})`);
});
// Create user
const created = await userApi.createUser({
name: 'John Doe',
email: 'john@example.com',
});
console.log(`Created user ID: ${created.data.id}`);
// Get by ID
const user = await userApi.getUserById(created.data.id);
// Update
const updated = await userApi.updateUser(created.data.id, {
name: 'Jane Doe',
});
// Delete
await userApi.deleteUser(created.data.id);
Java
Generate
databridge generate-sdk --lang java
Install
cd sdks/java
mvn install
Usage
import com.databridge.client.ApiClient;
import com.databridge.client.api.UserApi;
import com.databridge.client.model.*;
public class Example {
public static void main(String[] args) {
ApiClient client = new ApiClient();
client.setBasePath("http://localhost:3000");
UserApi userApi = new UserApi(client);
try {
// List users
List<User> users = userApi.listUsers(1, 10);
for (User user : users) {
System.out.printf("%d: %s (%s)%n",
user.getId(), user.getName(), user.getEmail());
}
// Create user
CreateUserDTO newUser = new CreateUserDTO()
.name("John Doe")
.email("john@example.com");
User created = userApi.createUser(newUser);
System.out.printf("Created user ID: %d%n", created.getId());
// Get by ID
User user = userApi.getUserById(created.getId());
// Update
UpdateUserDTO update = new UpdateUserDTO()
.name("Jane Doe");
User updated = userApi.updateUser(created.getId(), update);
// Delete
userApi.deleteUser(created.getId());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Advanced Features
Custom Output Directory
databridge generate-sdk --lang python --output ./client-sdks
Custom API Location
databridge generate-sdk --lang python --api-dir dist
Generate for Specific Models Only
OpenAPI generator supports filtering, but it’s easier to modify your openapi.json first.
Custom Package Names
SDK generation uses packageName=databridge-client by default. To customize:
# Manual generation with custom name
openapi-generator-cli generate \
-i src/openapi.json \
-g python \
-o sdks/python \
--additional-properties=packageName=myapp-client
SDK Features
All generated SDKs include:
- ✅ Type Safety - Full type definitions from OpenAPI schemas
- ✅ CRUD Operations - All REST endpoints
- ✅ Request Validation - Client-side validation
- ✅ Error Handling - Proper exception/error types
- ✅ Documentation - Generated from OpenAPI descriptions
- ✅ Examples - Usage examples in README/USAGE.md
- ✅ Tests - Basic test scaffolding
Use Cases
1. Microservices Communication
Service A (Python) needs to call Service B (Node.js):
# Generate Python SDK for Service B's API
cd service-b
databridge generate # Creates openapi.json
cd service-a
databridge generate-sdk --lang python --output ./service-b-client
Now Service A has a type-safe client for Service B!
2. Mobile App Development
Backend team uses DataBridge, mobile teams need SDKs:
# iOS team
databridge generate-sdk --lang swift
# Android team
databridge generate-sdk --lang kotlin
3. SDK Distribution
Publish SDKs to package registries:
# Python
cd sdks/python
python setup.py sdist
twine upload dist/*
# npm
cd sdks/typescript-axios
npm publish
# NuGet
cd sdks/csharp
dotnet pack
dotnet nuget push
4. API Client Libraries
Create official client libraries for your API:
databridge generate-sdk --lang python,go,typescript-axios,java
# Publish to GitHub releases
Integration with CI/CD
Auto-Generate on Release
# .github/workflows/release-sdks.yml
name: Release SDKs
on:
release:
types: [published]
jobs:
generate-sdks:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Generate SDKs
run: |
databridge generate
databridge generate-sdk --lang python,go,typescript-axios
- name: Upload SDKs
uses: actions/upload-artifact@v3
with:
name: sdks
path: sdks/
- name: Publish Python SDK
run: |
cd sdks/python
python setup.py sdist
twine upload dist/*
Best Practices
1. Version Your SDKs
Update version in OpenAPI spec:
{
"info": {
"version": "1.2.0"
}
}
SDK generators will use this version.
2. Test Generated SDKs
# Python
cd sdks/python
pytest
# Go
cd sdks/go
go test ./...
# C#
cd sdks/csharp
dotnet test
3. Document SDK Installation
Create sdks/README.md:
# DataBridge Client SDKs
## Python
\`\`\`bash
pip install databridge-client
\`\`\`
## Go
\`\`\`bash
go get github.com/yourorg/databridge-client-go
\`\`\`
4. Automate SDK Publishing
Use CI/CD to publish on every release.
Troubleshooting
openapi-generator-cli Not Found
Install globally:
npm install -g @openapitools/openapi-generator-cli
Language Not Supported
Check available generators:
openapi-generator-cli list
Generation Failed
-
Validate OpenAPI spec:
./scripts/validate-openapi.sh -
Check generator logs:
openapi-generator-cli generate \ -i src/openapi.json \ -g python \ -o sdks/python \ --verbose
SDK Compilation Errors
Each language has specific requirements:
- Python: Python 3.7+
- Go: Go 1.16+
- C#: .NET 6.0+
- Java: Java 8+
- TypeScript: Node.js 16+
Comparing Languages
| Language | Type Safety | Async | Performance | Ecosystem |
|---|---|---|---|---|
| Python | ⭐⭐⭐⭐ (type hints) | ✅ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Go | ⭐⭐⭐⭐⭐ (static) | ✅ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| C# | ⭐⭐⭐⭐⭐ (static) | ✅ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| TypeScript | ⭐⭐⭐⭐⭐ (static) | ✅ | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Java | ⭐⭐⭐⭐⭐ (static) | ✅ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Rust | ⭐⭐⭐⭐⭐ (static) | ✅ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
Next Steps
- OpenAPI Tutorial - Master OpenAPI specs
- API Testing - Contract testing
- SDK Publishing - Distribute SDKs
Resources
Need help? Open an issue on GitHub
Was this page helpful?
Thank you for your feedback!