Counterfact: سرور موک هوشمند برای OpenAPI
خلاصهٔ کاملتر
Counterfact یه ابزار متنبازه که یه مشکل رایج رو حل میکنه: وقتی بکاند آماده نیست ولی فرانتاند باید روی API واقعی کار کنه. فقط کافیه آدرس فایل OpenAPI رو بهش بدی — چه فایل لوکال باشه چه یه URL — تا کل روتها رو بخونه و یه سرور زنده راه بندازه.
با اجرای یه دستور ساده، Counterfact یه پوشه routes/ با یه فایل .ts برای هر endpoint میسازه، بهعلاوه تایپهای کامل TypeScript. این یعنی هیچوقت نمیتونی یه endpoint اشتباه صدا بزنی — ادیتور قبل از سرور بهت خطا میده.
یکی از ویژگیهای جالبش shared state بین روتهاست. یه فایل _.context.ts تو هر دایرکتوری میذاری و همه روتها — چه POST، چه GET، چه DELETE — به همون داده دسترسی دارن. مثلاً وقتی یه حیوان خانگی اضافه میکنی، همون لحظه تو لیست هم دیده میشه:
export class Context {
private pets = new Map<number, Pet>();
private nextId = 1;
add(pet: Omit<Pet, "id">): Pet {
const id = this.nextId++;
const rec = { ...pet, id };
this.pets.set(id, rec);
return rec;
}
get(id: number) { return this.pets.get(id); }
list() { return [...this.pets.values()]; }
remove(id: number) { this.pets.delete(id); }
}هاتریلود هم بدون ریستارت کار میکنه — فایل روت رو ذخیره میکنی و سرور بلافاصله تغییرات رو میگیره، بدون اینکه state از دست بره.
ولی شاید جالبترین قابلیتش REPL زنده باشه. یه پرامپت JavaScript که مستقیم به سرور در حال اجرا وصله. میتونی state رو بررسی کنی، داده اضافه یا حذف کنی، خطای ۵۰۰ شبیهسازی کنی، یا بعضی روتها رو به یه بکاند واقعی پروکسی کنی — همه اینا در حین اجرای سرور و بدون لمس کد.
در مقایسه با ابزارهای مشابه مثل Prism یا WireMock، Counterfact تنها ابزاریه که همزمان هم تایپسیفتی TypeScript داره، هم REPL، هم shared state، هم هاتریلود. WireMock و Prism بعضی از این قابلیتها رو دارن ولی نه همه با هم.
نکات کلیدی:
- با یه دستور npx و یه فایل OpenAPI، سرور زنده راه میافته
- تایپهای TypeScript از روی spec تولید میشن — بدون drift
- state مشترک بین روتها از طریق فایل _.context.ts
- REPL زنده برای کنترل سرور بدون ویرایش فایل
- هاتریلود بدون از دست رفتن state
- حالت پروکسی برای ترکیب موک با بکاند واقعی




