Skip to content

SDK Documentation

Overview

We provide SDKs for multiple programming languages to help developers quickly integrate our services. This documentation covers installation, configuration, and usage methods for all official SDKs.

Supported SDKs

JavaScript/TypeScript SDK

Installation

bash
# npm
npm install @yourapp/sdk

# yarn
yarn add @yourapp/sdk

# pnpm
pnpm add @yourapp/sdk

Basic Usage

javascript
import { YourAppSDK } from '@yourapp/sdk';

// Initialize SDK
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  environment: 'production', // or 'sandbox'
  timeout: 30000
});

// User management
const user = await sdk.users.create({
  email: 'user@example.com',
  name: 'John Doe'
});

// Project management
const project = await sdk.projects.create({
  name: 'My Project',
  description: 'Project description'
});

// File upload
const file = await sdk.files.upload({
  file: fileBuffer,
  filename: 'document.pdf',
  projectId: project.id
});

TypeScript Support

typescript
import { YourAppSDK, User, Project, CreateUserRequest } from '@yourapp/sdk';

const sdk = new YourAppSDK({
  apiKey: process.env.YOURAPP_API_KEY!,
  environment: 'production'
});

// Type-safe user creation
const createUser = async (userData: CreateUserRequest): Promise<User> => {
  return await sdk.users.create(userData);
};

// Type-safe project query
const getProjects = async (): Promise<Project[]> => {
  return await sdk.projects.list({
    limit: 10,
    offset: 0
  });
};

Python SDK

Installation

bash
pip install yourapp-sdk

Basic Usage

python
from yourapp_sdk import YourAppSDK
from yourapp_sdk.exceptions import YourAppError

# Initialize SDK
sdk = YourAppSDK(
    api_key='your-api-key',
    environment='production',
    timeout=30
)

# User management
try:
    user = sdk.users.create(
        email='user@example.com',
        name='John Doe'
    )
    print(f'Created user: {user.id}')
except YourAppError as e:
    print(f'Error creating user: {e.message}')

# Project management
project = sdk.projects.create(
    name='My Project',
    description='Project description'
)

# File upload
with open('document.pdf', 'rb') as file:
    uploaded_file = sdk.files.upload(
        file=file,
        filename='document.pdf',
        project_id=project.id
    )

Async Support

python
import asyncio
from yourapp_sdk import AsyncYourAppSDK

async def main():
    # Async SDK initialization
    sdk = AsyncYourAppSDK(
        api_key='your-api-key',
        environment='production'
    )
    
    # Async user creation
    user = await sdk.users.create(
        email='user@example.com',
        name='John Doe'
    )
    
    # Async project list
    projects = await sdk.projects.list(limit=10)
    
    # Close connection
    await sdk.close()

# Run async code
asyncio.run(main())

Go SDK

Installation

bash
go get github.com/yourapp/sdk-go

Basic Usage

go
package main

import (
    "context"
    "fmt"
    "log"
    
    "github.com/yourapp/sdk-go"
)

func main() {
    // Initialize SDK
    client := yourapp.NewClient(&yourapp.Config{
        APIKey:      "your-api-key",
        Environment: "production",
        Timeout:     30 * time.Second,
    })
    
    ctx := context.Background()
    
    // User management
    user, err := client.Users.Create(ctx, &yourapp.CreateUserRequest{
        Email: "user@example.com",
        Name:  "John Doe",
    })
    if err != nil {
        log.Fatalf("Failed to create user: %v", err)
    }
    fmt.Printf("Created user: %s\n", user.ID)
    
    // Project management
    project, err := client.Projects.Create(ctx, &yourapp.CreateProjectRequest{
        Name:        "My Project",
        Description: "Project description",
    })
    if err != nil {
        log.Fatalf("Failed to create project: %v", err)
    }
    
    // File upload
    file, err := os.Open("document.pdf")
    if err != nil {
        log.Fatalf("Failed to open file: %v", err)
    }
    defer file.Close()
    
    uploadedFile, err := client.Files.Upload(ctx, &yourapp.UploadFileRequest{
        File:      file,
        Filename:  "document.pdf",
        ProjectID: project.ID,
    })
    if err != nil {
        log.Fatalf("Failed to upload file: %v", err)
    }
    fmt.Printf("Uploaded file: %s\n", uploadedFile.ID)
}

Java SDK

Installation

Maven

xml
<dependency>
    <groupId>com.yourapp</groupId>
    <artifactId>yourapp-sdk</artifactId>
    <version>1.0.0</version>
</dependency>

Gradle

gradle
implementation 'com.yourapp:yourapp-sdk:1.0.0'

Basic Usage

java
import com.yourapp.sdk.YourAppSDK;
import com.yourapp.sdk.models.*;
import com.yourapp.sdk.exceptions.YourAppException;

public class Example {
    public static void main(String[] args) {
        // Initialize SDK
        YourAppSDK sdk = YourAppSDK.builder()
            .apiKey("your-api-key")
            .environment(Environment.PRODUCTION)
            .timeout(Duration.ofSeconds(30))
            .build();
        
        try {
            // User management
            CreateUserRequest userRequest = CreateUserRequest.builder()
                .email("user@example.com")
                .name("John Doe")
                .build();
            
            User user = sdk.users().create(userRequest);
            System.out.println("Created user: " + user.getId());
            
            // Project management
            CreateProjectRequest projectRequest = CreateProjectRequest.builder()
                .name("My Project")
                .description("Project description")
                .build();
            
            Project project = sdk.projects().create(projectRequest);
            
            // File upload
            File file = new File("document.pdf");
            UploadFileRequest uploadRequest = UploadFileRequest.builder()
                .file(file)
                .filename("document.pdf")
                .projectId(project.getId())
                .build();
            
            UploadedFile uploadedFile = sdk.files().upload(uploadRequest);
            System.out.println("Uploaded file: " + uploadedFile.getId());
            
        } catch (YourAppException e) {
            System.err.println("SDK Error: " + e.getMessage());
        }
    }
}

PHP SDK

Installation

bash
composer require yourapp/sdk

Basic Usage

php
<?php
require_once 'vendor/autoload.php';

use YourApp\SDK\YourAppSDK;
use YourApp\SDK\Exceptions\YourAppException;

// Initialize SDK
$sdk = new YourAppSDK([
    'api_key' => 'your-api-key',
    'environment' => 'production',
    'timeout' => 30
]);

try {
    // User management
    $user = $sdk->users->create([
        'email' => 'user@example.com',
        'name' => 'John Doe'
    ]);
    echo "Created user: {$user['id']}\n";
    
    // Project management
    $project = $sdk->projects->create([
        'name' => 'My Project',
        'description' => 'Project description'
    ]);
    
    // File upload
    $uploadedFile = $sdk->files->upload([
        'file' => fopen('document.pdf', 'r'),
        'filename' => 'document.pdf',
        'project_id' => $project['id']
    ]);
    echo "Uploaded file: {$uploadedFile['id']}\n";
    
} catch (YourAppException $e) {
    echo "SDK Error: {$e->getMessage()}\n";
}
?>

Ruby SDK

Installation

bash
gem install yourapp-sdk

Basic Usage

ruby
require 'yourapp-sdk'

# Initialize SDK
sdk = YourApp::SDK.new(
  api_key: 'your-api-key',
  environment: 'production',
  timeout: 30
)

begin
  # User management
  user = sdk.users.create(
    email: 'user@example.com',
    name: 'John Doe'
  )
  puts "Created user: #{user.id}"
  
  # Project management
  project = sdk.projects.create(
    name: 'My Project',
    description: 'Project description'
  )
  
  # File upload
  File.open('document.pdf', 'rb') do |file|
    uploaded_file = sdk.files.upload(
      file: file,
      filename: 'document.pdf',
      project_id: project.id
    )
    puts "Uploaded file: #{uploaded_file.id}"
  end
  
rescue YourApp::SDK::Error => e
  puts "SDK Error: #{e.message}"
end

Configuration Options

Common Configuration

All SDKs support the following configuration options:

javascript
const config = {
  // Required configuration
  apiKey: 'your-api-key',
  
  // Environment configuration
  environment: 'production', // 'production' | 'sandbox'
  baseUrl: 'https://api.yourapp.com', // Custom API endpoint
  
  // Network configuration
  timeout: 30000, // Request timeout (milliseconds)
  retries: 3,     // Number of retries
  retryDelay: 1000, // Retry delay (milliseconds)
  
  // Logging configuration
  logLevel: 'info', // 'debug' | 'info' | 'warn' | 'error'
  logger: customLogger, // Custom logger
  
  // Proxy configuration
  proxy: {
    host: 'proxy.example.com',
    port: 8080,
    auth: {
      username: 'proxy-user',
      password: 'proxy-pass'
    }
  }
};

Environment Variables

All SDKs support configuration through environment variables:

bash
# API Key
export YOURAPP_API_KEY="your-api-key"

# Environment
export YOURAPP_ENVIRONMENT="production"

# Custom endpoint
export YOURAPP_BASE_URL="https://api.yourapp.com"

# Timeout setting
export YOURAPP_TIMEOUT="30000"

# Log level
export YOURAPP_LOG_LEVEL="info"

Error Handling

Error Types

All SDKs provide unified error handling mechanisms:

javascript
try {
  const user = await sdk.users.create(userData);
} catch (error) {
  if (error instanceof YourAppError) {
    switch (error.type) {
      case 'AUTHENTICATION_ERROR':
        console.error('Invalid API key');
        break;
      case 'VALIDATION_ERROR':
        console.error('Invalid input:', error.details);
        break;
      case 'RATE_LIMIT_ERROR':
        console.error('Rate limit exceeded');
        break;
      case 'NETWORK_ERROR':
        console.error('Network connection failed');
        break;
      case 'SERVER_ERROR':
        console.error('Server error:', error.message);
        break;
      default:
        console.error('Unknown error:', error.message);
    }
  }
}

Retry Mechanism

javascript
// Configure automatic retry
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  retries: 3,
  retryDelay: 1000,
  retryConditions: [
    'NETWORK_ERROR',
    'RATE_LIMIT_ERROR',
    'SERVER_ERROR'
  ]
});

// Manual retry
const retryOperation = async (operation, maxRetries = 3) => {
  for (let i = 0; i < maxRetries; i++) {
    try {
      return await operation();
    } catch (error) {
      if (i === maxRetries - 1 || !isRetryableError(error)) {
        throw error;
      }
      await new Promise(resolve => setTimeout(resolve, 1000 * (i + 1)));
    }
  }
};

Pagination Handling

Automatic Pagination

javascript
// Get all projects (automatic pagination)
const allProjects = [];
for await (const project of sdk.projects.listAll()) {
  allProjects.push(project);
}

// Or use toArray() method
const projects = await sdk.projects.listAll().toArray();

Manual Pagination

javascript
// Manual pagination control
let hasMore = true;
let offset = 0;
const limit = 50;
const allProjects = [];

while (hasMore) {
  const response = await sdk.projects.list({
    limit,
    offset
  });
  
  allProjects.push(...response.data);
  
  hasMore = response.hasMore;
  offset += limit;
}

Batch Operations

Batch Creation

javascript
// Batch create users
const users = await sdk.users.createBatch([
  { email: 'user1@example.com', name: 'User 1' },
  { email: 'user2@example.com', name: 'User 2' },
  { email: 'user3@example.com', name: 'User 3' }
]);

// Batch update
const updatedUsers = await sdk.users.updateBatch([
  { id: 'user1', name: 'Updated User 1' },
  { id: 'user2', name: 'Updated User 2' }
]);

Batch Deletion

javascript
// Batch delete
const result = await sdk.users.deleteBatch(['user1', 'user2', 'user3']);
console.log(`Deleted ${result.deletedCount} users`);

File Handling

File Upload

javascript
// Single file upload
const file = await sdk.files.upload({
  file: fileBuffer,
  filename: 'document.pdf',
  contentType: 'application/pdf',
  projectId: 'project123'
});

// Multiple file upload
const files = await sdk.files.uploadMultiple([
  {
    file: file1Buffer,
    filename: 'doc1.pdf',
    contentType: 'application/pdf'
  },
  {
    file: file2Buffer,
    filename: 'doc2.pdf',
    contentType: 'application/pdf'
  }
], {
  projectId: 'project123'
});

// Large file chunked upload
const largeFile = await sdk.files.uploadLarge({
  file: largeFileBuffer,
  filename: 'large-video.mp4',
  contentType: 'video/mp4',
  chunkSize: 5 * 1024 * 1024, // 5MB chunks
  onProgress: (progress) => {
    console.log(`Upload progress: ${progress.percentage}%`);
  }
});

File Download

javascript
// Download file
const fileStream = await sdk.files.download('file123');

// Download to local file
await sdk.files.downloadToFile('file123', './downloaded-file.pdf');

// Get download URL
const downloadUrl = await sdk.files.getDownloadUrl('file123', {
  expiresIn: 3600 // 1 hour
});

Real-time Features

WebSocket Connection

javascript
// Establish WebSocket connection
const ws = sdk.realtime.connect({
  channels: ['project.updates', 'user.notifications']
});

// Listen to events
ws.on('project.updated', (data) => {
  console.log('Project updated:', data);
});

ws.on('user.notification', (data) => {
  console.log('New notification:', data);
});

// Send message
ws.send('project.message', {
  projectId: 'project123',
  message: 'Hello team!'
});

// Close connection
ws.close();

Server-Sent Events (SSE)

javascript
// Listen to server-sent events
const eventSource = sdk.events.subscribe({
  channels: ['project.updates']
});

eventSource.on('message', (event) => {
  console.log('Received event:', event);
});

eventSource.on('error', (error) => {
  console.error('SSE error:', error);
});

// Close connection
eventSource.close();

Caching

Memory Cache

javascript
// Enable memory cache
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  cache: {
    enabled: true,
    ttl: 300, // 5 minutes
    maxSize: 1000 // Maximum cache items
  }
});

// Manual cache control
const user = await sdk.users.get('user123', {
  cache: true,
  cacheTtl: 600 // 10 minutes
});

// Clear cache
sdk.cache.clear();
sdk.cache.delete('users:user123');

Redis Cache

javascript
// Use Redis cache
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  cache: {
    type: 'redis',
    redis: {
      host: 'localhost',
      port: 6379,
      password: 'redis-password'
    },
    ttl: 300
  }
});

Testing

Mock Mode

javascript
// Enable mock mode for testing
const sdk = new YourAppSDK({
  apiKey: 'test-api-key',
  environment: 'test',
  mock: true
});

// All API calls will return mock data
const user = await sdk.users.create({
  email: 'test@example.com',
  name: 'Test User'
});
// Returns mock user object

Testing Tools

javascript
// Jest test example
import { YourAppSDK } from '@yourapp/sdk';
import { mockSDK } from '@yourapp/sdk/testing';

describe('User Service', () => {
  let sdk;
  
  beforeEach(() => {
    sdk = mockSDK();
  });
  
  test('should create user', async () => {
    const userData = {
      email: 'test@example.com',
      name: 'Test User'
    };
    
    sdk.users.create.mockResolvedValue({
      id: 'user123',
      ...userData
    });
    
    const user = await sdk.users.create(userData);
    
    expect(user.id).toBe('user123');
    expect(sdk.users.create).toHaveBeenCalledWith(userData);
  });
});

Performance Optimization

Connection Pool

javascript
// Configure connection pool
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  http: {
    poolSize: 10,
    keepAlive: true,
    keepAliveMsecs: 30000
  }
});

Request Batching

javascript
// Automatically batch similar requests
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  batching: {
    enabled: true,
    batchSize: 10,
    batchDelay: 100 // 100ms
  }
});

// These requests will be automatically batched
const [user1, user2, user3] = await Promise.all([
  sdk.users.get('user1'),
  sdk.users.get('user2'),
  sdk.users.get('user3')
]);

Monitoring and Logging

Custom Logger

javascript
// Custom logger
const customLogger = {
  debug: (message, meta) => console.debug('[DEBUG]', message, meta),
  info: (message, meta) => console.info('[INFO]', message, meta),
  warn: (message, meta) => console.warn('[WARN]', message, meta),
  error: (message, meta) => console.error('[ERROR]', message, meta)
};

const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  logger: customLogger,
  logLevel: 'debug'
});

Metrics Collection

javascript
// Enable metrics collection
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  metrics: {
    enabled: true,
    collector: (metrics) => {
      // Send metrics to monitoring system
      console.log('SDK Metrics:', metrics);
    }
  }
});

// Get SDK metrics
const metrics = sdk.getMetrics();
console.log('Request count:', metrics.requestCount);
console.log('Average response time:', metrics.avgResponseTime);
console.log('Error rate:', metrics.errorRate);

Migration Guide

From v1 to v2

javascript
// v1 (old version)
const sdk = new YourAppSDK('your-api-key');
const user = await sdk.createUser({
  email: 'user@example.com',
  name: 'John Doe'
});

// v2 (new version)
const sdk = new YourAppSDK({
  apiKey: 'your-api-key'
});
const user = await sdk.users.create({
  email: 'user@example.com',
  name: 'John Doe'
});

Compatibility Layer

javascript
// Use compatibility layer to support legacy code
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  compatibility: 'v1' // Enable v1 compatibility mode
});

// v1 style calls still work
const user = await sdk.createUser(userData);

Troubleshooting

Common Issues

Authentication Failure

javascript
// Check API key
if (!process.env.YOURAPP_API_KEY) {
  throw new Error('YOURAPP_API_KEY environment variable is required');
}

// Validate API key format
if (!process.env.YOURAPP_API_KEY.startsWith('ya_')) {
  throw new Error('Invalid API key format');
}

Network Connection Issues

javascript
// Test network connection
const testConnection = async () => {
  try {
    const response = await sdk.health.check();
    console.log('Connection OK:', response);
  } catch (error) {
    console.error('Connection failed:', error.message);
    
    // Check proxy settings
    if (error.code === 'ECONNREFUSED') {
      console.log('Check proxy settings and firewall');
    }
  }
};

Rate Limiting

javascript
// Handle rate limiting
const handleRateLimit = async (operation) => {
  try {
    return await operation();
  } catch (error) {
    if (error.type === 'RATE_LIMIT_ERROR') {
      const retryAfter = error.retryAfter || 60;
      console.log(`Rate limited. Retrying after ${retryAfter} seconds`);
      
      await new Promise(resolve => 
        setTimeout(resolve, retryAfter * 1000)
      );
      
      return await operation();
    }
    throw error;
  }
};

Debug Mode

javascript
// Enable debug mode
const sdk = new YourAppSDK({
  apiKey: 'your-api-key',
  debug: true,
  logLevel: 'debug'
});

// Or via environment variables
process.env.YOURAPP_DEBUG = 'true';
process.env.YOURAPP_LOG_LEVEL = 'debug';

Best Practices

Error Handling

javascript
// Comprehensive error handling
const createUserSafely = async (userData) => {
  try {
    return await sdk.users.create(userData);
  } catch (error) {
    // Log error
    logger.error('Failed to create user', {
      error: error.message,
      userData: { email: userData.email } // Don't log sensitive info
    });
    
    // Handle based on error type
    if (error.type === 'VALIDATION_ERROR') {
      throw new Error(`Invalid user data: ${error.details.join(', ')}`);
    }
    
    if (error.type === 'RATE_LIMIT_ERROR') {
      // Implement backoff retry
      await new Promise(resolve => setTimeout(resolve, error.retryAfter * 1000));
      return await createUserSafely(userData);
    }
    
    // Re-throw other errors
    throw error;
  }
};

Resource Management

javascript
// Proper resource management
class UserService {
  constructor() {
    this.sdk = new YourAppSDK({
      apiKey: process.env.YOURAPP_API_KEY
    });
  }
  
  async createUser(userData) {
    return await this.sdk.users.create(userData);
  }
  
  // Clean up resources
  async close() {
    await this.sdk.close();
  }
}

// Usage example
const userService = new UserService();

try {
  const user = await userService.createUser(userData);
} finally {
  await userService.close();
}

Configuration Management

javascript
// Environment-specific configuration
const getSDKConfig = () => {
  const environment = process.env.NODE_ENV || 'development';
  
  const baseConfig = {
    apiKey: process.env.YOURAPP_API_KEY,
    timeout: 30000
  };
  
  switch (environment) {
    case 'production':
      return {
        ...baseConfig,
        environment: 'production',
        logLevel: 'warn',
        retries: 3
      };
    
    case 'staging':
      return {
        ...baseConfig,
        environment: 'sandbox',
        logLevel: 'info',
        retries: 2
      };
    
    default:
      return {
        ...baseConfig,
        environment: 'sandbox',
        logLevel: 'debug',
        retries: 1
      };
  }
};

const sdk = new YourAppSDK(getSDKConfig());

Your Ultimate AI-Powered IDE Learning Guide