نمونههای cURL آماده¶
این صفحه شامل نمونههای cURL آماده برای تست API است. تمامی مثالها با {BASE_URL} کار میکنند.
تنظیمات اولیه¶
# تعریف متغیرهای محیطی
export BASE_URL="https://api.example.com"
export CLIENT_ID="your_client_id"
export CLIENT_SECRET="your_client_secret"
# یا برای محیط توسعه
export BASE_URL="http://localhost:8000"
1. Health Check¶
درخواست¶
پاسخ موفق¶
2. احراز هویت (Authentication)¶
2.1. Login - دریافت توکن¶
درخواست:
curl -X POST "{{ USSO_BASE_URL }}/auth/login" \
-H "Content-Type: application/json" \
-d '{
"client_id": "client_abc123",
"client_secret": "secret_xyz789"
}'
پاسخ موفق:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9...",
"token_type": "bearer",
"expires_in": 86400,
"refresh_token": "refresh_token_xyz789abc123"
}
پاسخ ناموفق (کلاینت نامعتبر):
پاسخ ناموفق (داده ناقص):
{
"detail": [
{
"loc": ["body", "client_secret"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
2.2. Refresh - دریافت توکن جدید¶
درخواست:
curl -X POST "{{ USSO_BASE_URL }}/auth/refresh" \
-H "Content-Type: application/json" \
-d '{
"refresh_token": "refresh_token_xyz789abc123"
}'
پاسخ موفق:
{
"access_token": "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.new_token...",
"token_type": "bearer",
"expires_in": 86400
}
پاسخ ناموفق (توکن منقضی):
3. Health Check (API Exchange)¶
درخواست¶
پاسخ موفق¶
4. Symbol API¶
4.1. لیست نمادها¶
درخواست:
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/symbols?\
is_active=true&\
offset=0&\
limit=10" \
-H "Authorization: Bearer <your_jwt_token>"
پاسخ موفق:
{
"heads": {
"uid": "شناسه",
"symbol": "نماد",
"is_active": "فعال"
},
"items": [
{
"uid": "sym_123",
"symbol": "BTC-IRR",
"is_active": true
},
{
"uid": "sym_456",
"symbol": "ETH-IRR",
"is_active": true
}
],
"total": 2,
"offset": 0,
"limit": 10
}
پاسخ ناموفق (بدون توکن):
4.2. ایجاد نماد (فقط ادمین)¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/symbols" \
-H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \
-d '{
"symbol": "SOL-IRR",
"price_precision": 2,
"quantity_precision": 6,
"min_order_quantity": "0.1",
"tick_size": "1000",
"daily_fluctuation_price_limit_percent": "10",
"description": "Solana to IRR"
}'
پاسخ موفق:
پاسخ ناموفق (نماد تکراری):
5. Order API¶
5.1. ایجاد سفارش لیمیت خرید¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders" \
-H "Authorization: Bearer <user_token>" \
-H "Content-Type: application/json" \
-d '{
"symbol": "BTC-IRR",
"side": "buy",
"type": "limit",
"price": "1000000000",
"quantity": "0.5",
"time_in_force": "good-till-canceled"
}'
پاسخ موفق:
{
"uid": "ord_789xyz",
"status": "active",
"symbol": "BTC-IRR",
"side": "buy",
"type": "limit",
"price": "1000000000",
"quantity": "0.5",
"filled": "0.0",
"created_at": "2025-12-30T12:00:00Z"
}
پاسخ ناموفق (موجودی ناکافی):
پاسخ ناموفق (حجم کمتر از حداقل):
{
"detail": [
{
"loc": ["body", "quantity"],
"msg": "value is less than minimum",
"type": "value_error.number.not_ge",
"ctx": {"limit_value": 0.0001}
}
]
}
5.2. ایجاد سفارش مارکت فروش¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders" \
-H "Authorization: Bearer <user_token>" \
-H "Content-Type: application/json" \
-d '{
"symbol": "BTC-IRR",
"side": "sell",
"type": "market",
"quantity": "0.2"
}'
پاسخ موفق:
{
"uid": "ord_790abc",
"status": "filled",
"symbol": "BTC-IRR",
"side": "sell",
"type": "market",
"quantity": "0.2",
"filled": "0.2",
"trades": [
{
"trade_id": "trade_791",
"quantity": "0.2",
"price": "999000000"
}
],
"created_at": "2025-12-30T12:00:00Z"
}
5.3. لیست سفارشات¶
درخواست:
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/orders?\
symbol=BTC-IRR&\
status=active&\
offset=0&\
limit=10" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"heads": {
"uid": "شناسه",
"symbol": "نماد",
"side": "جهت",
"price": "قیمت",
"quantity": "حجم",
"status": "وضعیت"
},
"items": [
{
"uid": "ord_123",
"symbol": "BTC-IRR",
"side": "buy",
"price": "1000000000",
"quantity": "0.5",
"status": "active"
}
],
"total": 1,
"offset": 0,
"limit": 10
}
5.4. لغو سفارش¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders/ord_123/cancel" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"uid": "ord_123",
"status": "cancelled",
"symbol": "BTC-IRR",
"side": "buy",
"quantity": "0.5",
"filled": "0.0"
}
پاسخ ناموفق (سفارش قابل لغو نیست):
6. Trade API¶
6.1. لیست معاملات¶
درخواست:
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/trades?\
symbol=BTC-IRR&\
offset=0&\
limit=10" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"heads": {
"uid": "شناسه",
"symbol": "نماد",
"price": "قیمت",
"quantity": "حجم",
"created_at": "تاریخ"
},
"items": [
{
"uid": "trade_123",
"symbol": "BTC-IRR",
"price": "999000000",
"quantity": "0.2",
"maker_fee": "199800",
"taker_fee": "399600",
"created_at": "2025-12-30T10:05:00Z"
}
],
"total": 1,
"offset": 0,
"limit": 10
}
7. Market Data API¶
7.1. دریافت تیکر نماد خاص¶
درخواست:
پاسخ موفق:
{
"symbol": "BTC-IRR",
"last_price": "1000000000",
"daily_volume": "50000000000",
"bid": "999000000",
"ask": "1001000000",
"daily_change": "50000000",
"daily_change_relative": "0.05",
"high": "1020000000",
"low": "980000000",
"timestamp": 1735555200
}
7.2. دریافت عمق بازار¶
درخواست:
پاسخ موفق:
{
"symbol": "BTC-IRR",
"last_updated": "2025-12-30T10:00:00Z",
"last_price": "1000000000",
"bids": [
{"price": "999000000", "quantity": "0.5"},
{"price": "998000000", "quantity": "1.2"}
],
"asks": [
{"price": "1001000000", "quantity": "0.3"},
{"price": "1002000000", "quantity": "0.7"}
]
}
8. Wallet API¶
8.1. لیست کیف پولها¶
درخواست:
curl -X GET "{{ API_BASE_URL }}/api/accounting/v1/wallets?\
type=spot&\
offset=0&\
limit=10" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"heads": {
"uid": "شناسه",
"currency": "ارز",
"balance": "موجودی کل",
"available": "موجودی قابل استفاده"
},
"items": [
{
"uid": "wallet_456",
"currency": "IRR",
"balance": "100000000",
"hold": "50000000",
"available": "50000000"
}
],
"total": 1,
"offset": 0,
"limit": 10
}
8.2. واریز وجه¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/accounting/v1/wallets/wallet_456/deposit" \
-H "Authorization: Bearer <user_token>" \
-H "Content-Type: application/json" \
-d '{
"amount": "100000000",
"currency": "IRR",
"payment_method": "bank_transfer",
"reference_id": "bank_ref_123456"
}'
پاسخ موفق:
{
"uid": "txn_789",
"type": "deposit",
"amount": "100000000",
"status": "completed",
"created_at": "2025-12-30T13:00:00Z"
}
8.3. برداشت وجه¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/accounting/v1/wallets/wallet_456/withdraw" \
-H "Authorization: Bearer <user_token>" \
-H "Content-Type: application/json" \
-d '{
"amount": "50000000",
"currency": "IRR",
"destination": "bank",
"destination_address": "IR123456789012345678901234"
}'
پاسخ موفق:
{
"uid": "txn_790",
"type": "withdrawal",
"amount": "50000000",
"status": "pending",
"created_at": "2025-12-30T13:30:00Z"
}
9. Session API¶
9.1. لیست جلسات معاملاتی¶
درخواست:
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/sessions?\
symbol=BTC-IRR&\
offset=0&\
limit=10" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"heads": {
"uid": "شناسه",
"symbol": "نماد",
"open_at": "زمان شروع",
"close_at": "زمان پایان",
"opening_price": "قیمت شروع"
},
"items": [
{
"uid": "sess_123",
"symbol": "BTC-IRR",
"open_at": "2025-12-30T09:00:00Z",
"close_at": "2025-12-30T17:00:00Z",
"opening_price": "1000000000"
}
],
"total": 1,
"offset": 0,
"limit": 10
}
10. User API¶
10.1. دریافت اطلاعات کاربر¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/user/v1/users/user_123" \
-H "Authorization: Bearer <user_token>"
پاسخ موفق:
{
"uid": "user_123",
"username": "john_doe",
"email": "[email protected]",
"role": "trader",
"status": "active",
"wallet_id": "wallet_456"
}
10.2. ایجاد کاربر (فقط ادمین)¶
درخواست:
curl -X POST "{{ API_BASE_URL }}/api/user/v1/users" \
-H "Authorization: Bearer <admin_token>" \
-H "Content-Type: application/json" \
-d '{
"username": "ali_rezaei",
"email": "[email protected]",
"phone": "+989121234567",
"national_code": "0020030040",
"role": "trader"
}'
پاسخ موفق:
{
"uid": "user_789xyz",
"username": "ali_rezaei",
"email": "[email protected]",
"wallet_id": "wallet_abc123",
"status": "active"
}
11. کاربردهای پیشرفته¶
11.1. گردش کار کامل یک معامله¶
# مرحله 1: دریافت توکن
export JWT_TOKEN=$(curl -s -X POST "{{ USSO_BASE_URL }}/auth/login" \
-H "Content-Type: application/json" \
-d '{"client_id":"client_abc123","client_secret":"secret_xyz789"}' | jq -r '.access_token')
# مرحله 2: مشاهده موجودی
curl -X GET "{{ API_BASE_URL }}/api/accounting/v1/wallets" \
-H "Authorization: Bearer $JWT_TOKEN"
# مرحله 3: مشاهده قیمت
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/tickers/BTC-IRR"
# مرحله 4: ثبت سفارش خرید
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders" \
-H "Authorization: Bearer $JWT_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"symbol": "BTC-IRR",
"side": "buy",
"type": "limit",
"price": "1000000000",
"quantity": "0.1"
}'
# مرحله 5: مشاهده سفارشات
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/orders?status=active" \
-H "Authorization: Bearer $JWT_TOKEN"
# مرحله 6: مشاهده معاملات
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/trades" \
-H "Authorization: Bearer $JWT_TOKEN"
11.2. اسکریپت تست کامل¶
#!/bin/bash
# تنظیمات
BASE_URL="https://api.example.com"
CLIENT_ID="client_abc123"
CLIENT_SECRET="secret_xyz789"
echo "=== تست کامل API ==="
# 1. Login
echo -e "\n1. Login..."
LOGIN_RESPONSE=$(curl -s -X POST "$BASE_URL/auth/login" \
-H "Content-Type: application/json" \
-d "{\"client_id\":\"$CLIENT_ID\",\"client_secret\":\"$CLIENT_SECRET\"}")
JWT_TOKEN=$(echo $LOGIN_RESPONSE | jq -r '.access_token')
echo "Token: ${JWT_TOKEN:0:20}..."
# 2. Health Check
echo -e "\n2. Health Check..."
curl -s "$BASE_URL/api/exchange/v1/health" | jq .
# 3. Get Symbols
echo -e "\n3. Get Symbols..."
curl -s "$BASE_URL/api/exchange/v1/symbols?limit=5" \
-H "Authorization: Bearer $JWT_TOKEN" | jq '.items[] | {symbol, is_active}'
# 4. Get Ticker
echo -e "\n4. Get Ticker..."
curl -s "$BASE_URL/api/exchange/v1/tickers/BTC-IRR" | jq '{symbol, last_price, daily_change}'
# 5. Get Wallets
echo -e "\n5. Get Wallets..."
curl -s "$BASE_URL/api/accounting/v1/wallets" \
-H "Authorization: Bearer $JWT_TOKEN" | jq '.items[] | {currency, balance, available}'
echo -e "\n=== تست کامل شد ==="
12. خطاهای رایج و راهحلها¶
12.1. خطای 401 - توکن ندارد¶
مشکل:
راهحل:
# ابتدا login کنید و توکن بگیرید
export JWT_TOKEN=$(curl -s -X POST "{{ USSO_BASE_URL }}/auth/login" \
-H "Content-Type: application/json" \
-d '{"client_id":"...","client_secret":"..."}' | jq -r '.access_token')
# سپس با توکن درخواست دهید
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/symbols" \
-H "Authorization: Bearer $JWT_TOKEN"
12.2. خطای 401 - توکن منقضی¶
مشکل:
راهحل:
# رفرش توکن
export JWT_TOKEN=$(curl -s -X POST "{{ USSO_BASE_URL }}/auth/refresh" \
-H "Content-Type: application/json" \
-d "{\"refresh_token\":\"$REFRESH_TOKEN\"}" | jq -r '.access_token')
12.3. خطای 422 - داده ناقص¶
مشکل:
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders" \
-H "Authorization: Bearer $JWT_TOKEN" \
-d '{"symbol":"BTC-IRR","side":"buy"}'
# پاسخ: {"detail": [{"loc": ["body", "type"], "msg": "field required"}]}
راهحل:
# اضافه کردن فیلدهای اجباری
curl -X POST "{{ API_BASE_URL }}/api/exchange/v1/orders" \
-H "Authorization: Bearer $JWT_TOKEN" \
-d '{
"symbol": "BTC-IRR",
"side": "buy",
"type": "limit",
"price": "1000000000",
"quantity": "0.5"
}'
13. نکات استفاده از cURL¶
13.1. ذخیره پاسخ در فایل¶
curl -X GET "{{ API_BASE_URL }}/api/exchange/v1/symbols" \
-H "Authorization: Bearer $JWT_TOKEN" > response.json
13.2. نمایش فقط هدر¶
13.3. نمایش جزئیات درخواست¶
13.4. استفاده از jq برای پردازش¶
# نمایش فقط قیمت
curl -s "{{ API_BASE_URL }}/api/exchange/v1/tickers/BTC-IRR" | jq -r '.last_price'
# نمایش لیست نمادها
curl -s "{{ API_BASE_URL }}/api/exchange/v1/symbols" | jq -r '.items[].symbol'
14. چکلیست قبل از اجرا¶
- [ ]
BASE_URLتنظیم شده است - [ ]
JWT_TOKENمعتبر است (اگر نیاز به احراز دارد) - [ ] پارامترهای اجباری ارسال شدهاند
- [ ] فرمت JSON صحیح است
- [ ] هدرهای لازم اضافه شدهاند
بعدی: مطالعه index.md برای لینکدهی به تمام بخشها