sema-api / tests /curl_commands.md
kamau1's picture
feat: server side request timing
d014389
# Sema Translation API - Curl Commands
## 🌐 Base URL
```bash
# Production
API_URL="https://sematech-sema-api.hf.space"
# Local development
# API_URL="http://localhost:8000"
```
## 🏥 Health Check Endpoints
### Basic Health Check
```bash
curl -X GET "$API_URL/status"
```
### Detailed Health Check
```bash
curl -X GET "$API_URL/health"
```
### Metrics (if enabled)
```bash
curl -X GET "$API_URL/metrics"
```
## 🌍 Translation Endpoints
### Basic Translation (Auto-detect source language)
```bash
curl -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Habari ya asubuhi",
"target_language": "eng_Latn"
}'
```
### Translation with Specified Source Language
```bash
curl -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Good morning",
"source_language": "eng_Latn",
"target_language": "swh_Latn"
}'
```
### Translation with Versioned Endpoint
```bash
curl -X POST "$API_URL/api/v1/translate" \
-H "Content-Type: application/json" \
-d '{
"text": "Wĩ mwega?",
"source_language": "kik_Latn",
"target_language": "eng_Latn"
}'
```
## � Language Detection Endpoints
### Detect Language of Text
```bash
curl -X POST "$API_URL/detect-language" \
-H "Content-Type: application/json" \
-d '{
"text": "Habari ya asubuhi"
}'
```
### Detect Language (English Text)
```bash
curl -X POST "$API_URL/detect-language" \
-H "Content-Type: application/json" \
-d '{
"text": "Good morning, how are you today?"
}'
```
### Detect Language (French Text)
```bash
curl -X POST "$API_URL/detect-language" \
-H "Content-Type: application/json" \
-d '{
"text": "Bonjour, comment allez-vous?"
}'
```
### Detect Language (Versioned Endpoint)
```bash
curl -X POST "$API_URL/api/v1/detect-language" \
-H "Content-Type: application/json" \
-d '{
"text": "Hola, ¿cómo estás?"
}'
```
## �🗣️ Language Information Endpoints
### Get All Supported Languages
```bash
curl -X GET "$API_URL/languages"
```
### Get Popular Languages
```bash
curl -X GET "$API_URL/languages/popular"
```
### Get African Languages
```bash
curl -X GET "$API_URL/languages/african"
```
### Get Languages by Region
```bash
# European languages
curl -X GET "$API_URL/languages/region/Europe"
# Asian languages
curl -X GET "$API_URL/languages/region/Asia"
# African languages
curl -X GET "$API_URL/languages/region/Africa"
```
### Search Languages
```bash
# Search for Swahili
curl -X GET "$API_URL/languages/search?q=Swahili"
# Search for Chinese
curl -X GET "$API_URL/languages/search?q=Chinese"
# Search by language code
curl -X GET "$API_URL/languages/search?q=eng"
```
### Get Language Statistics
```bash
curl -X GET "$API_URL/languages/stats"
```
### Get Specific Language Information
```bash
# Swahili
curl -X GET "$API_URL/languages/swh_Latn"
# English
curl -X GET "$API_URL/languages/eng_Latn"
# Chinese (Simplified)
curl -X GET "$API_URL/languages/cmn_Hans"
```
## 📚 Documentation Endpoints
### Swagger UI (Open in browser)
```bash
open "$API_URL/"
# or
curl -X GET "$API_URL/"
```
### ReDoc Documentation (Open in browser)
```bash
open "$API_URL/redoc"
# or
curl -X GET "$API_URL/redoc"
```
### OpenAPI JSON Schema
```bash
curl -X GET "$API_URL/openapi.json"
```
## 🧪 Test Scenarios
### Complete Translation Workflow
```bash
# 1. Check API health
echo "1. Health Check:"
curl -s "$API_URL/status" | jq '.status'
# 2. Get popular languages
echo "2. Popular Languages:"
curl -s "$API_URL/languages/popular" | jq '.total_count'
# 3. Validate language code
echo "3. Validate Swahili:"
curl -s "$API_URL/languages/swh_Latn" | jq '.name'
# 4. Perform translation
echo "4. Translation:"
curl -s -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Habari ya asubuhi", "target_language": "eng_Latn"}' \
| jq '.translated_text'
```
### Error Testing
```bash
# Test invalid language code
curl -X GET "$API_URL/languages/invalid_code"
# Test empty translation text
curl -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "", "target_language": "eng_Latn"}'
# Test invalid search query
curl -X GET "$API_URL/languages/search?q=x"
```
## 🔧 Advanced Usage
### Pretty Print JSON Response
```bash
curl -s "$API_URL/languages/popular" | jq '.'
```
### Save Response to File
```bash
curl -s "$API_URL/languages" > all_languages.json
```
### Check Response Headers (Including Timing)
```bash
curl -I "$API_URL/health"
```
### View Response Headers with Translation
```bash
curl -v -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Hello", "target_language": "swh_Latn"}'
```
### Extract Timing Headers Only
```bash
curl -s -D - -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Hello", "target_language": "swh_Latn"}' \
| grep -E "X-Response-Time|X-Request-ID"
```
### Measure Response Time
```bash
curl -w "@curl-format.txt" -s -o /dev/null "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Hello", "target_language": "swh_Latn"}'
```
### Multiple Translations (Batch Testing)
```bash
# Test multiple translations
for text in "Hello" "Good morning" "Thank you" "Goodbye"; do
echo "Translating: $text"
curl -s -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d "{\"text\": \"$text\", \"target_language\": \"swh_Latn\"}" \
| jq -r '.translated_text'
echo "---"
done
```
## 📊 Performance Testing
### Simple Load Test
```bash
# Run 10 concurrent requests
for i in {1..10}; do
curl -s -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Hello world", "target_language": "swh_Latn"}' &
done
wait
```
### Rate Limit Testing
```bash
# Test rate limiting (should hit 60 req/min limit)
for i in {1..65}; do
echo "Request $i:"
curl -s -X POST "$API_URL/translate" \
-H "Content-Type: application/json" \
-d '{"text": "Test", "target_language": "swh_Latn"}' \
| jq -r '.translated_text // .detail'
sleep 0.5
done
```
## 💡 Tips
### Create curl-format.txt for timing
```bash
cat > curl-format.txt << 'EOF'
time_namelookup: %{time_namelookup}\n
time_connect: %{time_connect}\n
time_appconnect: %{time_appconnect}\n
time_pretransfer: %{time_pretransfer}\n
time_redirect: %{time_redirect}\n
time_starttransfer: %{time_starttransfer}\n
----------\n
time_total: %{time_total}\n
EOF
```
### Set API URL as environment variable
```bash
export API_URL="https://sematech-sema-api.hf.space"
# Now you can use $API_URL in all commands
```