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:
- Monitor Performance - Track your production systems
- Integrate APIs - Connect to your applications
- Connect Databases - Integrate with your data sources