Tutorial: Testing NEO Storage API dengan cURL untuk Pemula
🧪 Testing NEO Storage API dengan cURL
📋 Persiapan
1. Dapatkan API Key
- Login ke http://localhost:7600
- Menu API Keys → Buat API key baru
- Klik tombol 👁️ (eye) untuk lihat full key
- Copy API key lengkap
2. Set Environment Variable (Opsional)
export API_KEY="your-very-long-api-key-here" export BASE_URL="http://localhost:7600"
🔌 Testing Endpoints
1. API Info (Tanpa Auth)
curl http://localhost:7600/api/info
Response:
{
"service": "NEO Storage API - IndoWeb ID",
"version": "1.0.0",
"endpoints": [
"POST /api/upload - Upload file",
"GET /api/files - List files",
"POST /api/delete - Delete file"
],
"authentication": "X-API-Key header required"
}
2. Upload File (Image)
Cara 1: Manual (paste API key langsung)
curl -X POST http://localhost:7600/api/upload \ -H "X-API-Key: PASTE_YOUR_API_KEY_HERE" \ -F "file=@/path/to/image.jpg" \ -F "folder=uploads"
Cara 2: Menggunakan Variable
curl -X POST $BASE_URL/api/upload \ -H "X-API-Key: $API_KEY" \ -F "[email protected]" \ -F "folder=test_uploads"
Cara 3: Upload dengan Pretty Print
curl -X POST http://localhost:7600/api/upload \ -H "X-API-Key: $API_KEY" \ -F "[email protected]" \ -F "folder=presensi" | python3 -m json.tool
Response Success:
{
"success": true,
"url": "http://neo-endpoint/bucket/uploads/20251005_143022_abc123_image.jpg",
"filename": "20251005_143022_abc123_image.jpg",
"object_key": "uploads/20251005_143022_abc123_image.jpg"
}
Response Error (Invalid API Key):
{
"status": "error",
"message": "Invalid or inactive API key"
}
3. Upload dengan Custom Folder
# Upload ke folder presensi/januari/2025 curl -X POST http://localhost:7600/api/upload \ -H "X-API-Key: $API_KEY" \ -F "file=@foto_karyawan.jpg" \ -F "folder=presensi/januari/2025"
4. List Files
List semua file di folder default:
curl -X GET "http://localhost:7600/api/files?folder=uploads" \ -H "X-API-Key: $API_KEY"
List file di folder spesifik:
curl -X GET "http://localhost:7600/api/files?folder=presensi/januari/2025" \ -H "X-API-Key: $API_KEY" | python3 -m json.tool
Response:
{
"success": true,
"files": [
{
"key": "uploads/file.jpg",
"filename": "file.jpg",
"size": 245670,
"modified": "2025-10-05 14:30:22",
"url": "http://neo-endpoint/bucket/uploads/file.jpg"
}
]
}
5. Delete File
curl -X POST http://localhost:7600/api/delete \
-H "X-API-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"object_key": "uploads/20251005_143022_abc123_image.jpg"
}'
Response:
{
"success": true
}
📝 Testing Script Lengkap
Bash Script untuk Testing
Buat file test_api.sh:
#!/bin/bash # Configuration API_KEY="paste-your-api-key-here" BASE_URL="http://localhost:7600" echo "🧪 NEO Storage API Testing" echo "==========================" # 1. Test API Info echo -e "\n1️⃣ Testing API Info..." curl -s $BASE_URL/api/info | python3 -m json.tool # 2. Upload file echo -e "\n2️⃣ Uploading test file..." UPLOAD_RESULT=$(curl -s -X POST $BASE_URL/api/upload \ -H "X-API-Key: $API_KEY" \ -F "[email protected]" \ -F "folder=test_folder") echo $UPLOAD_RESULT | python3 -m json.tool # Extract object_key from response OBJECT_KEY=$(echo $UPLOAD_RESULT | python3 -c "import sys, json; print(json.load(sys.stdin).get('object_key', ''))") # 3. List files echo -e "\n3️⃣ Listing files..." curl -s -X GET "$BASE_URL/api/files?folder=test_folder" \ -H "X-API-Key: $API_KEY" | python3 -m json.tool # 4. Delete file if [ ! -z "$OBJECT_KEY" ]; then echo -e "\n4️⃣ Deleting file: $OBJECT_KEY" curl -s -X POST $BASE_URL/api/delete \ -H "X-API-Key: $API_KEY" \ -H "Content-Type: application/json" \ -d "{\"object_key\": \"$OBJECT_KEY\"}" | python3 -m json.tool fi echo -e "\n✅ Testing completed!"
Jalankan:
chmod +x test_api.sh ./test_api.sh
🐍 Python Testing Script
Buat file test_api.py:
#!/usr/bin/env python3
import requests
import json
# Configuration
API_KEY = "paste-your-api-key-here"
BASE_URL = "http://localhost:7600"
HEADERS = {"X-API-Key": API_KEY}
def test_api_info():
print("1️⃣ Testing API Info...")
r = requests.get(f"{BASE_URL}/api/info")
print(json.dumps(r.json(), indent=2))
def test_upload():
print("\n2️⃣ Testing Upload...")
with open("test.jpg", "rb") as f:
files = {"file": f}
data = {"folder": "python_test"}
r = requests.post(f"{BASE_URL}/api/upload",
headers=HEADERS, files=files, data=data)
result = r.json()
print(json.dumps(result, indent=2))
return result.get("object_key")
def test_list_files():
print("\n3️⃣ Testing List Files...")
r = requests.get(f"{BASE_URL}/api/files",
headers=HEADERS, params={"folder": "python_test"})
print(json.dumps(r.json(), indent=2))
def test_delete(object_key):
print(f"\n4️⃣ Testing Delete: {object_key}")
r = requests.post(f"{BASE_URL}/api/delete",
headers=HEADERS, json={"object_key": object_key})
print(json.dumps(r.json(), indent=2))
if __name__ == "__main__":
print("🧪 NEO Storage API Testing\n" + "="*40)
test_api_info()
object_key = test_upload()
test_list_files()
if object_key:
test_delete(object_key)
print("\n✅ Testing completed!")
Jalankan:
python3 test_api.py
🔍 Troubleshooting
Error: "Invalid or inactive API key"
# Pastikan API key benar (copy dari web UI) # Test dengan verbose mode untuk lihat request curl -v -X POST http://localhost:7600/api/upload \ -H "X-API-Key: $API_KEY" \ -F "[email protected]"
Error: "No file provided"
# Pastikan path file benar dan file exists ls -lh test.jpg curl -X POST http://localhost:7600/api/upload \ -H "X-API-Key: $API_KEY" \ -F "file=@./test.jpg" # gunakan ./ jika file di current directory
Error: Connection refused
# Pastikan aplikasi running curl http://localhost:7600/api/info # Check port netstat -tuln | grep 7600
📊 Monitoring Request di Terminal
Buka terminal kedua dan jalankan:
# Follow application logs tail -f /path/to/app.log # Atau watch database logs watch -n 1 'sqlite3 neo_storage.db "SELECT * FROM access_log ORDER BY id DESC LIMIT 5"'
✅ Quick Test Command
One-liner test:
curl -X POST http://localhost:7600/api/upload -H "X-API-Key: YOUR_KEY" -F "[email protected]" -F "folder=quick_test" && echo "\n✅ Upload success!"
Check if API key works:
curl -X GET http://localhost:7600/api/files -H "X-API-Key: YOUR_KEY" && echo "\n✅ API Key valid!"
Selamat Testing! 🚀