Rate Limit
EasySlip API จำกัดอัตราการเรียกใช้งานเป็นจำนวนครั้งต่อวินาที (TPS — Transactions Per Second) เพื่อให้ระบบตรวจสอบสลิปให้บริการได้เสถียรกับผู้ใช้ทุกคน
TPS ของแต่ละแพ็กเกจ
TPS ที่ใช้ได้ขึ้นอยู่กับแพ็กเกจของคุณ ถ้าไม่แน่ใจว่าได้เท่าไร หรืออยากได้สูงกว่าที่แพ็กเกจกำหนด ติดต่อฝ่ายสนับสนุนเพื่อขอปรับเฉพาะบัญชีได้
ขีดจำกัดนี้แยกกันระหว่างการตรวจสอบ สลิปธนาคาร และ TrueMoney Wallet การเรียกฝั่งหนึ่งไม่ไปกินโควต้าอีกฝั่ง
Response Header
ทุก request ที่ผ่านระบบ rate limit จะได้ header เหล่านี้กลับมา
| Header | ความหมาย |
|---|---|
X-RateLimit-Limit | จำนวน request ต่อวินาทีที่ใช้ได้ในขณะนั้น |
X-RateLimit-Remaining | จำนวนที่เหลือในวินาทีปัจจุบัน |
X-RateLimit-Reset | จำนวนวินาทีจนกว่าตัวนับจะรีเซ็ต |
Retry-After | ส่งมาเฉพาะตอนถูกปฏิเสธ (429) — ให้รอกี่วินาทีก่อนลองใหม่ |
TIP
ค่า X-RateLimit-Limit อาจเปลี่ยนได้ตามสภาพโหลดของระบบ ให้อ่านจาก header ทุกครั้ง แทนการ hard-code ตัวเลขไว้ในโค้ด
เมื่อถูกจำกัด
จะได้ HTTP status 429 พร้อม header Retry-After
v2
json
{
"success": false,
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded"
}
}v1
json
{
"status": 429,
"message": "rate_limit_exceeded"
}วิธีรับมือที่แนะนำ
- รอตาม
Retry-Afterอย่าลองใหม่ทันที — การยิงซ้ำรัว ๆ ทำให้โดนปฏิเสธนานขึ้น - ใช้ exponential backoff ถ้ายังโดน 429 ซ้ำ ให้เพิ่มเวลารอขึ้นเรื่อย ๆ
- ทำคิวฝั่งคุณเอง ถ้ามีสลิปเข้ามาเป็นก้อนใหญ่ ให้ทยอยส่งตาม TPS ที่มี ดีกว่าปล่อยให้โดนปฏิเสธ
- เฝ้าดู
X-RateLimit-Remainingเพื่อชะลอตัวเองก่อนจะชนเพดาน
ตัวอย่าง JavaScript
javascript
async function verifyWithRetry(payload, maxRetries = 3) {
for (let attempt = 0; attempt <= maxRetries; attempt++) {
const res = await fetch('https://api.easyslip.com/v2/verify/bank', {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ payload }),
})
if (res.status !== 429) return res.json()
// รอตามที่เซิร์ฟเวอร์บอก แล้วค่อยเพิ่มเวลารอแบบ exponential
const retryAfter = Number(res.headers.get('Retry-After') ?? 1)
const waitSec = retryAfter * 2 ** attempt
await new Promise(r => setTimeout(r, waitSec * 1000))
}
throw new Error('rate limit exceeded after retries')
}ตัวอย่าง Python
python
import time
import requests
def verify_with_retry(payload, max_retries=3):
for attempt in range(max_retries + 1):
res = requests.post(
'https://api.easyslip.com/v2/verify/bank',
headers={'Authorization': f'Bearer {API_KEY}'},
json={'payload': payload},
)
if res.status_code != 429:
return res.json()
retry_after = int(res.headers.get('Retry-After', 1))
time.sleep(retry_after * (2 ** attempt))
raise Exception('rate limit exceeded after retries')ต่างจาก quota_exceeded อย่างไร
| Rate limit (429) | โควต้าหมด (quota_exceeded) | |
|---|---|---|
| จำกัดอะไร | จำนวน request ต่อวินาที | จำนวนสลิปที่ตรวจได้ ทั้งหมด ตามแพ็กเกจ |
| แก้ยังไง | รอแล้วลองใหม่ | เติมโควต้า หรือรอรอบรีเซ็ต |
| หายเองไหม | หายเองภายในไม่กี่วินาที | ไม่หายจนกว่าจะเติมหรือถึงรอบรีเซ็ต |