tRPC در TypeScript: سادهسازی توسعه API
ساخت یک API معمولاً به معنای انتخاب بین REST یا GraphQL است. شما زمان خود را صرف تنظیم مسیرها (routes)، مدیریت طرحوارهها (schemas) و همگامسازی تایپها بین فرانتاند و بکاند میکنید. اگر در هر دو طرف از TypeScript استفاده کنید، این فرآیند سنگین به نظر میرسد و در نهایت مجبور میشوید یک نوع (type) را دو بار بنویسید.
tRPC این گردش کار را تغییر میدهد. این ابزار نیاز به یک قرارداد API جداگانه را از بین میبرد. در عوض، از TypeScript استفاده میکند تا تایپها را بهطور خودکار بین سرور و کلاینت به اشتراک بگذارد.
چرا از tRPC استفاده کنیم؟
- عدم نیاز به همگامسازی دستی تایپها: شما یک تابع در سرور مینویسید و کلاینت بلافاصله از تایپهای ورودی و خروجی مطلع میشود.
- عدم نیاز به تولید کد (code generation): نیازی به اجرای ابزارهای اضافی برای ایجاد تایپها ندارید.
- جلوگیری از عدم تطابق طرحواره (schema drift): از آنجایی که کلاینت مستقیماً از تایپهای سرور استفاده میکند، فرانتاند شما همیشه با بکاند همگام میماند.
- توسعه سریعتر: فرآیند کار بیشتر شبیه به فراخوانی یک تابع در یک فایل محلی است تا ارسال یک درخواست شبکه.
روشهای سنتی دارای نقاط ضعف و مزایای خاص خود هستند. REST نیازمند فراخوانیهای دستی fetch و تایپهای تکراری است. GraphQL یک طرحواره (schema) ارائه میدهد اما با استفاده از resolverها و تولید کد (codegen)، پیچیدگی را افزایش میدهد.
tRPC با بکاند شما مانند مجموعهای از توابع ایمن از نظر تایپ (type-safe) برخورد میکند. شما پروسجرها (procedures) را در روترها (routers) تعریف میکنید. کلاینت تایپ روتر شما را وارد (import) کرده و این پروسجرها را مستقیماً فراخوانی میکند.
جریان نمونه:
- تعریف یک پروسجر در سرور همراه با اعتبارسنجی (مانند Zod).
- خروجی گرفتن (export) از تایپ روتر.
- فراخوانی آن پروسجر در کلاینت با قابلیت تکمیل خودکار (autocompletion) کامل و امنیت تایپ.
چه زمانی از tRPC استفاده کنیم:
- زمانی که هر دو بخش فرانتاند و بکاند شما از TypeScript استفاده میکنند.
- زمانی که هر دو سمت پشته (stack) در کنترل شماست.
- زمانی که در حال ساخت ابزارهای داخلی، داشبوردهای مدیریت یا اپلیکیشنهای فولاستک Next.js هستید.
- زمانی که در یک monorepo کار میکنید.
چه زمانی از tRPC اجتناب کنیم:
- زمانی که در حال ساخت یک API عمومی برای کاربران مختلف هستید.
- زمانی که کلاینتهای شما از زبانهای مختلفی مانند Python یا Go استفاده میکنند.
- زمانی که به نسخهبندی (versioning) پیچیده API نیاز دارید.
tRPC جایگزینی برای REST یا GraphQL در همه سناریوها نیست. این ابزاری برای سرعت و امنیت است، زمانی که پشته تکنولوژی شما یکپارچه باشد. tRPC اصطکاک ناشی از مرزهای API را از بین میبرد و به شما اجازه میدهد بر نوشتن منطق برنامه تمرکز کنید.
منبع: https://dev.to/geekyants/trpc-in-typescript-simplify-api-development-without-boilerplate-3lm3