رفتن به محتوای اصلی
بازگشت به وبلاگ

توسعه و اتصال فنی

خطای ارائه‌دهنده مدل را به قرارداد خطای برنامه تبدیل کنیم؛ JSON و Retry-After

کد خطای ارائه‌دهنده نباید مستقیم قرارداد برنامه شما شود. ممکن است یک سرویس برای نبود اعتبار و دیگری برای محدودیت نرخ کدهای متفاوت بدهد. لایه واسط باید معنای خطا را به کد دامنه پایدار نگاشت کند تا مشتری نرم‌افزاری تصمیم درست بگیرد. این راهنما درباره قرارداد ماشین‌خوان است، نه فقط متن خطای فرم.

کد خطای ارائه‌دهنده نباید مستقیم قرارداد برنامه شما شود. ممکن است یک سرویس برای نبود اعتبار و دیگری برای محدودیت نرخ کدهای متفاوت بدهد. لایه واسط باید معنای خطا را به کد دامنه پایدار نگاشت کند تا مشتری نرم‌افزاری تصمیم درست بگیرد. این راهنما درباره قرارداد ماشین‌خوان است، نه فقط متن خطای فرم.

کد دامنه و وضعیت HTTP را جدا تعریف کنید

فهرست کوتاهی مانند INPUT_INVALID،AI_RATE_LIMITED و AI_UNAVAILABLE بسازید. برای هرکدام بگویید تکرار خودکار مجاز است یا نه و چه داده تکمیلی لازم دارد. محدودیت نرخ با نداشتن اعتبار حساب یکی نیست؛ دومی ممکن است به تصمیم مدیر حساب نیاز داشته باشد، نه retry بی‌پایان کاربر.

RFC 9457 برای خطای قابل پردازش قالبی با نوع، عنوان و وضعیت معرفی می‌کند. در نمونه زیر از همان ساختار استفاده شده و code و correlation_id افزونه اختصاصی نمونه‌اند. قرارداد باید این افزونه‌ها را مستند کند؛ استاندارد بودن قالب، معنی کد سفارشی شما را به کتابخانه‌ها آموزش نمی‌دهد.

نمونه پاسخ محدودیت نرخ

HTTP/1.1 429 Too Many Requests
Content-Type: application/problem+json
Retry-After: 30

{
  "type": "urn:example:problem:ai-rate-limited",
  "title": "ظرفیت موقت درخواست پر است",
  "status": 429,
  "code": "AI_RATE_LIMITED",
  "retryable": true,
  "correlation_id": "demo-corr-01"
}

مقدار۳۰ صرفاً زمان انتظار ساختگی است. اگر سرویس زمان معتبری داده، واسط باید آن را با بودجه و سیاست داخلی بررسی کند؛ اگر زمان معلوم نیست، عدد دلخواه نسازد. Retry-After می‌تواند طبق قرارداد HTTP شکل زمانی متفاوت داشته باشد، پس parser مقصد باید شکل‌های پشتیبانی‌شده را روشن کند. retryable=true نیز به معنی اجازه اجرای دوباره هر اقدام نوشتنی نیست؛ کلید اقدام و وضعیت اثر باید جدا کنترل شوند.

ورودی ارائه‌دهنده ساختگیکد دامنهHTTP نمونهتکرار
محدودیت نرخAI_RATE_LIMITED429با زمان و سقف معتبر
اعتبار حساب تمامAI_ACCOUNT_ACTION_REQUIRED503خودکار نه
ورودی نامعتبرINPUT_INVALID400پس از اصلاح ورودی

تغییر ارائه‌دهنده نباید قرارداد را بشکند

پاسخ‌های خطای ساختگی دو ارائه‌دهنده را به adapter بدهید و انتظار داشته باشید خروجی دامنه یکسان بماند. فیلد ناشناس باید به حالت خطای کنترل‌شده برود، نه موفقیت پیش‌فرض. وضعیت داخل JSON با status خط پاسخ هماهنگ باشد. شناسه پیگیری یک مقدار بی‌اطلاعات و مجاز است و نباید ایمیل یا کلید حساب را در خود داشته باشد.

پاسخ خام سرویس در خروجی عمومی قرار نمی‌گیرد؛ فقط شاهد محدود در مسیر مجاز ثبت می‌شود. این قرارداد سیاست پیشنهادی یک برنامه نمونه است و نگاشت کد همه سرویس‌ها محسوب نمی‌شود. برای SDK واقعی، شکل خطا و نسخه آن را بخوانید و بعد مجموعه آزمون نگاشت را به‌روز کنید.

کاربرگ همراه و منبع

دریافت CSV اختصاصی این راهنما؛ تمام رکوردها و شناسه‌های کاربرگ ساختگی‌اند. مقادیر نمونه را به داده یا نتیجه واقعی مشتری تعبیر نکنید.

RFC 9457: قالب خطای قابل پردازش HTTP؛ MDN: 429 و Retry-After. منابع در ۱ نوامبر ۲۰۲۶ خوانده شدند؛ مثال و الگوی اجرایی بالا پیشنهاد آموزشی تحریریه است، نه تأیید قابلیت محصول.

اگر این مسئله در مسیر پاسخ‌گویی مشتری شما وجود دارد، آموزش‌های اپرا را ببینید و همین کاربرگ را برای بررسی دامنه و محدودیت در دمو آماده کنید.

برای این نیاز، کدام خدمت مناسب‌تر است؟

تماس و منشی، چت سایت و تحلیل مکالمه سه مسیر متفاوت‌اند. ابتدا خدمت متناسب نیازتان را انتخاب کنید.

انتخاب میان سه خدمتراهنمای شروع با تیم اپرا

برآورد هزینه