Skip to main content

Best Practices

Follow these best practices to ensure successful production deployment of Heimdall in your applications.

Security Best Practices

API Key Management

Store your API keys securely using environment variables:

import os

# Store API key in environment variable
api_key = os.getenv('HEIMDALL_API_KEY')
username = os.getenv('HEIMDALL_USERNAME')

# Use in your application
headers = {
'X-api-key': api_key,
'X-username': username
}

Secure Configuration

# config.py
import os

class Config:
HEIMDALL_API_KEY = os.getenv('HEIMDALL_API_KEY')
HEIMDALL_USERNAME = os.getenv('HEIMDALL_USERNAME')

# Security settings
SSL_VERIFY = True
TIMEOUT = 30

Performance Best Practices

Connection Pooling

import requests
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

# Create session with connection pooling
session = requests.Session()

# Configure retry strategy
retry_strategy = Retry(
total=3,
backoff_factor=1,
status_forcelist=[429, 500, 502, 503, 504],
)

adapter = HTTPAdapter(max_retries=retry_strategy)
session.mount("http://", adapter)
session.mount("https://", adapter)

Error Handling

import requests
import time

def call_heimdall_api(data, max_retries=3):
for attempt in range(max_retries):
try:
response = requests.post(
'https://predict.heimdallapp.org/predict/',
headers=headers,
json=data,
timeout=30
)
response.raise_for_status()
return response.json()

except requests.exceptions.RequestException as e:
if attempt == max_retries - 1:
raise e
time.sleep(2 ** attempt) # Exponential backoff

Deployment Best Practices

Environment Configuration

# .env file
HEIMDALL_API_KEY=your-api-key-here
HEIMDALL_USERNAME=your-username
DEBUG=False

Docker Configuration

# Dockerfile
FROM python:3.9-slim

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY . .

# Use environment variables
ENV HEIMDALL_API_KEY=""
ENV HEIMDALL_USERNAME=""

EXPOSE 8000
CMD ["python", "app.py"]

Data Management

Database Connection Best Practices

import psycopg2
from contextlib import contextmanager

@contextmanager
def get_db_connection():
connection = None
try:
connection = psycopg2.connect(
host=os.getenv('DB_HOST'),
database=os.getenv('DB_NAME'),
user=os.getenv('DB_USER'),
password=os.getenv('DB_PASSWORD')
)
yield connection
finally:
if connection:
connection.close()

Data Validation

def validate_input_data(data):
required_fields = ['text', 'model_id']

for field in required_fields:
if field not in data:
raise ValueError(f"Missing required field: {field}")

if not isinstance(data['text'], str):
raise ValueError("Text must be a string")

if len(data['text']) > 10000:
raise ValueError("Text too long")

Next Steps

Now that you understand best practices:

  1. Monitor Performance - Track your production systems
  2. Integrate APIs - Connect to your applications
  3. Connect Databases - Integrate with your data sources