Wretch: درخواست HTTP با یه زنجیرهٔ خوانا
خلاصهٔ کاملتر
Wretch یه wrapper دور fetch هست که حجمش حدود ۱.۸ کیلوبایت gzip شدهست. ایدهٔ اصلیش اینه که کل درخواست HTTP رو تو یه زنجیرهٔ متد بنویسی، بهجای اینکه یه آبجکت تنظیمات بسازی و بعد جواب رو جدا چک کنی. به قول سازنده، a.b().c() از ساختن یه متغیر و صدا زدن جدای هر متد قشنگتره.
یه نکتهٔ مهم طراحیش immutability هست، یعنی Wretch وضعیت داخلیش رو هیچوقت عوض نمیکنه و هر متد یه کپی جدید برمیگردونه. پس میتونی یه نمونهٔ پایه با آدرس و تنظیمات مشترک بسازی و ازش چند تا درخواست مختلف دربیاری، بدون اینکه یکیشون اون یکی رو خراب کنه.
ترتیب زنجیره اینجوریه: آدرس رو میدی، body رو با .json() یا .formData یا .formUrl اضافه میکنی، متد HTTP مثل .post() یا .get() رو صدا میزنی، خطاها رو با catcherهایی مثل .notFound() یا .error(500, ...) میگیری و آخرش جواب رو با .json() یا .text() یا .blob() میخونی. مثال کاملش تو صفحهٔ پروژه این شکلیه:
const user = await wretch("https://jsonplaceholder.typicode.com/users")
.json({ name: "John Doe", email: "john@example.com" })
.post()
.notFound(err => console.log("User not found"))
.error(500, err => console.log("Server error"))
.json()برای قابلیتهای بیشتر دو تا راه داره. addonها متد جدید اضافه میکنن، مثلاً برای query string یا form data. middlewareها هم درخواست رو وسط راه میگیرن تا چیزایی مثل retry، کش و throttle (یعنی محدود کردن تعداد درخواست تو یه بازهٔ زمانی) رو اضافه کنی. Wretch روی مرورگر و Node.js کار میکنه و فایلهای تعریف TypeScript هم همراهشه تا autocomplete داشته باشی.
نکات کلیدی:
- حجم حدود ۱.۸ کیلوبایت gzip شده
- هر متد یه کپی جدید برمیگردونه و وضعیت داخلی عوض نمیشه
- catcherهای آماده مثل .notFound()، .unauthorized() و .error(500, ...)
- retry، کش و throttle از طریق middleware اضافه میشن
- روی مرورگر و Node.js کار میکنه و تعریف TypeScript داره




