Skip to main content

Production best practices

This page collects production integration patterns for Heimdall REST APIs by RejiCo — key management, retries, validation, and observability.

Before you start

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