یک توکن، ساختهشده در پنل مشتری
بهصورت یک توکن bearer ارسال میشود. در صورت تمایل میتوان آن را به فقطخواندنی یا به یک سرویس مشخص محدود کرد؛ توکنها مستقل از رمز عبور هستند و ابطال یکی هرگز خروج از سیستم را به همراه ندارد.
JSON روی HTTPS. نیازی به SDK نیست، نیازی به حساب کاربری جداگانه برای توسعهدهنده نیست، و نقطه پایانیای که در پنل باشد ولی اینجا نباشد، وجود ندارد.
ایجاد سرور
curl -X POST https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN" \
-d '{"plan":"reef","image":"debian-13"}'بلافاصله یک شناسه فرآیند ساخت بازمیگرداند. دستگاه حدود 60 ثانیه بعد از طریق SSH پاسخ میدهد، و آدرس پیش از ارسال اطلاعات ورود مسیریابی میشود.
20 نقطه پایانی
URL پایه https://api.vpsoffshore.com/v1. در مسیر نسخهبندی میشود؛ v1 تا زمانیکه v2 وجود دارد کار خواهد کرد و تاریخ توقف آن یک سال پیشتر اعلام خواهد شد.
سرورها
فضای ذخیرهسازی
شبکه
کاتالوگ
صورتحساب
هرآنچه پنل میتواند انجام دهد، اینجا هم هست، و چیزی اینجا نیست که در پنل نباشد. اگر این دو با هم مغایرت داشته باشند، یک باگ است — از طریق پنل اطلاع داده شود تا رفع شود، نه اینکه بهعنوان رفتار عمدی مستند شود.
نحوه عملکرد آن
یک API بر اساس مسیرهای بد آن قضاوت میشود، نه مسیرهای خوبش. سه مورد از چهار مورد زیر درباره اتفاقی است که هنگام بروز خطا رخ میدهد.
یک توکن، ساختهشده در پنل مشتری
بهصورت یک توکن bearer ارسال میشود. در صورت تمایل میتوان آن را به فقطخواندنی یا به یک سرویس مشخص محدود کرد؛ توکنها مستقل از رمز عبور هستند و ابطال یکی هرگز خروج از سیستم را به همراه ندارد.
ورودی JSON، خروجی JSON، بدون نیاز به SDK
HTTPS ساده، بدون پاکت سفارشی، بدون بازگشت به XML و بدون تشریفات امضا. هرچه با curl قابل انجام باشد، یک کلاینت هم برایش وجود دارد. کتابخانههای رسمی برای Go، Python و TypeScript موجود است و هیچکدام الزامی نیست.
محدودیت نرخی که تصادفاً به آن نمیرسید
600 درخواست در دقیقه به ازای هر توکن، و 60 درخواست برای فراخوانیهای ایجاد. هر پاسخ بودجهٔ باقیمانده را در یک هدر حمل میکند و در صورت عبور از آن، کد 429 به همراه تعداد ثانیههای لازم برای انتظار بازگردانده میشود — هرگز بهصورت بیصدا رد نمیشود.
خطاهایی که میگویند چه باید کرد
یک پاسخ 4xx شامل یک کد قابلخواندن توسط ماشین، یک جمله قابلفهم برای انسان، و فیلد مقصر است. ترجیح میدهیم خطایی طولانی برگردانیم تا خطایی کوتاه که باید حدس بزنید.
دو چیزی که فقط یکبار نوشته میشود
هر دو ارزش خواندن پیش از نوشتن نخستین فراخوانی را دارند، نه پس از نخستین شکست.
احراز هویت
curl https://api.vpsoffshore.com/v1/servers \
-H "Authorization: Bearer $TOKEN"
توکنها در پنل ساخته میشوند و میتوانند به حالت فقطخواندنی یا به یک سرویس محدود شوند. این توکنها مستقل از رمز عبور هستند، و لغو یکی از آنها باعث خروج از هیچ نشستی نمیشود.
محدودیت نرخ را بخوانید
X-RateLimit-Remaining: 574
X-RateLimit-Reset: 41
روی هر پاسخ، نه فقط روی آن پاسخی که با شکست مواجه میشود. عبور از سقف مجاز، کد 429 را همراه با تعداد ثانیههای لازم برای انتظار برمیگرداند؛ هرگز یک قطع بیصدا و هرگز یک پاسخ کوتاهشده.
خطا فیلد را مشخص میکند
{"error":"plan_unknown",
"message":"No plan named 'reff'. Did you mean 'reef'?",
"field":"plan"}
یک کد قابلخواندن توسط ماشین، یک جمله قابلفهم برای انسان و فیلدی که خطا در آن است. خطاهای طولانی ارزانتر از خطاهای کوتاهی هستند که باید حدس زده شوند.
استعلام وضعیت ساخت
curl https://api.vpsoffshore.com/v1/servers/$ID \
-H "Authorization: Bearer $TOKEN" | jq .state
میرود از building → running. نیازی به ثبت webhook پیش از ایجاد چیزی نیست، و polling با فاصله یک ثانیه در محدوده مجاز باقی میماند.
چیزی برای درخواست دادن نیست
بدون حساب توسعهدهنده، بدون تأیید، و بدون محیط آزمایشی که رفتاری متفاوت از محیط عملیاتی داشته باشد.
در ادامه بخوانید
از اینجا به کجا برویم