Forge: خط تولید SDK و CLI کلودفلر
خلاصهٔ کاملتر
کلودفلر پروژهٔ Forge رو معرفی کرد، یه پایپلاین اوپنسورس و پلاگینپذیر برای تولید SDK، CLI، کتابخونه و داکیومنت که هر کسی میتونه رایگان دیپلوی و اجراش کنه. همین حالا خروجی لازم برای cf CLI رو میسازه و قراره تو ماههای آینده داکیومنت API و SDKهای کلودفلر رو هم بچرخونه. تو مقاله اومده که انگیزهشون این بود که ایجنتها رو مشتری خودشون حساب کنن: قبلاً فقط محصولات دولوپری به CLI و SDK و MCP server نیاز داشتن، حالا اینها برای هر محصولی پیشفرض شدن.
مسئلهٔ اصلی مقیاس بود. API کلودفلر بیش از ۳۵۰۰ عملیات داره و صدها سرویس پشتش به زبانهای مختلف از جمله Rust، Go، TypeScript و Python نوشته شدن. تیمهای محصول لازم داشتن قبل از merge کردن یه تغییر API، بیلد پیشنمایش CLI و SDK و سایت داک رو نصب و تست کنن تا مطمئن شن پایپلاین تولید رو نشکستن. به گفتهٔ نویسنده چند محصول میزبانیشده رو امتحان کردن و حتی تو پروداکشن به بعضیشون تکیه کردن، ولی هیچکدوم مشکل رو حل نکرد و بعضیهاشون کلاً تعطیل شدن.
راهحل Forge اینه که مثل ریویوی خودکار کد و پایپلاین تست، تو CI و روی ریپوی خود هر تیم اجرا میشه، هر تغییر رو لینت میکنه و بعد بیلد پیشنمایشی از CLI و داک و SDK میسازه که فقط تغییرهای خودت توش هایلایت شده و میتونی نصبش کنی. نویسنده همین ایده رو به Workers Previews تشبیه میکنه، فقط این بار برای تولید SDK و در مقیاسی که سطح API بین صدها سرویس و ریپازیتوری پخش شده.
بخش فنی جالبش transformerهای Forgeه. ورودی امروز OpenAPIه، ولی خروجی تقریباً هر چیزی میتونه باشه؛ مثلاً Cap'n Web، سیستم RPC کلودفلر که اجازه میده TypeScript یه API ریموت رو مثل یه متد محلی صدا بزنه و همهش تو یه درخواست جمع شه:
let authed = api.authenticate(apiToken);
let profile = api.getUserProfile(authed.getUserId());
let friends = authed.getFriendIds().map(id => api.getUserProfile(id));
// ...in a *single* request
let [me, myFriends] = await Promise.all([profile, friends]);یعنی میشه از یه spec، بایندینگ Workers به APIهای دیگه رو هم تولید کرد، چون بایندینگها تو رانتایم Workers خودشون Workerهایی هستن که متدهای RPC رو بیرون میدن. همین منطق برای TanStack Query، اسکیمای Zod و Valibot یا MCP server هم کار میکنه.
فرق دیگهش زنجیره کردن خروجیهاست. تو بقیهٔ ابزارها معمولاً CLI و Terraform از SDK زبان Go ساخته میشه و خودت نمیتونی این ترتیب رو عوض کنی. cf CLI با TypeScript نوشته شده، پس کلودفلر لازم داشت خودش زنجیره رو تعیین کنه. نویسنده میگه CLI اساساً فرق داره: دستورهای دستینوشتهای مثل cf dev و cf build داره که پشتشون هیچ فراخوانی API نیست و باید APIهای TypeScript پکیجهایی مثل Vite رو صدا بزنن، و همون دستورها باید به داک هم برگردن.
Forge زمینهٔ نسخهبندی API رو هم فراهم میکنه. نسخهٔ v4 کلودفلر ده ساله تنها نسخهٔ اصلی APIشونه، ولی تو همین مدت تغییرهایی داده که با معیار SemVer نسخهٔ بزرگ جدید حساب میشه. یه v5 بزرگ خیلی از مشتریها رو جا میذاشت، پس دنبال روشی هستن که نسخهٔ اصلی جدید بدن بدون شکستن کلاینتها و SDKهای قدیمی. کد Forge با لایسنس Apache 2.0 منتشر شده و میشه خصوصی و با تغییرات دلخواه هم اجراش کرد.
نکات کلیدی:
- API کلودفلر بیش از ۳۵۰۰ عملیات داره و سرویسهای پشتش به Rust، Go، TypeScript و Python نوشته شدن.
- Forge تو CI هر ریپو اجرا میشه، تغییرها رو لینت میکنه و برای هر تغییر بیلد پیشنمایش CLI، SDK و داک میسازه.
- ورودی فعلی فقط OpenAPIه؛ AsyncAPI، GraphQL، Cap'n Proto و Protobuf تو نقشهٔ آیندهست.
- خروجیها زنجیرهپذیرن و خود کاربر ترتیب زنجیره رو تعیین میکنه، نه ابزار.
- cf CLI با TypeScript نوشته شده و دستورهایی مثل cf dev و cf build دستی روش اضافه شدن.
- لایسنس Apache 2.0؛ SDKهای TypeScript، Rust، Python، Go، PHP و Terraform به گفتهٔ کلودفلر بهزودی میان.




