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

  • 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!

Full list

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

  1. Validate OpenAPI spec:

    ./scripts/validate-openapi.sh
  2. 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

LanguageType SafetyAsyncPerformanceEcosystem
Python⭐⭐⭐⭐ (type hints)⭐⭐⭐⭐⭐⭐⭐⭐
Go⭐⭐⭐⭐⭐ (static)⭐⭐⭐⭐⭐⭐⭐⭐⭐
C#⭐⭐⭐⭐⭐ (static)⭐⭐⭐⭐⭐⭐⭐⭐⭐
TypeScript⭐⭐⭐⭐⭐ (static)⭐⭐⭐⭐⭐⭐⭐⭐
Java⭐⭐⭐⭐⭐ (static)⭐⭐⭐⭐⭐⭐⭐⭐⭐
Rust⭐⭐⭐⭐⭐ (static)⭐⭐⭐⭐⭐⭐⭐⭐⭐

Next Steps

Resources


Need help? Open an issue on GitHub

Was this page helpful?