کلاینت‌های API با تایپ ایمن (Type-Safe) بدون استفاده از Codegen

از استفاده از as User برای پاسخ‌های API دست بردارید.

کست کردن با as User در واقع دروغی است که به کامپایلر خود می‌گویید. TypeScript فکر می‌کند داده‌ها درست هستند. در زمان اجرا (runtime)، داده‌ها اغلب اشتباه هستند. باگ‌ها سه تابع بعد خود را نشان می‌دهند. ردپای خطا (stack trace) کمکی نمی‌کند.

شبکه جایی است که نباید به هیچ‌چیز اعتماد کرد. داده‌ها را در مرز (boundary) تأیید کنید.

از Zod استفاده کنید. یک بار یک schema تعریف کنید. Zod هم تایپ و هم بررسی (check) را به شما می‌دهد. تایپ‌های شما دچار انحراف نخواهند شد.

یک wrapper ساده برای fetch بسازید. یک schema را به آن پاس بدهید. از safeParse برای بررسی بدنه (body) استفاده کنید. داده‌ها تنها پس از بررسی به یک تایپ تبدیل می‌شوند.

خطاها را پرتاب (throw) نکنید. یک شیء Result برگردانید. از یک union با ok: true یا ok: false استفاده کنید. این کار شما را مجبور می‌کند که شکست‌ها را مدیریت کنید.

همین منطق را برای URLهای خود نیز به کار ببرید. برای پارامترهای کوئری (query parameters) خود schema تعریف کنید. قبل از ارسال درخواست، از غلط‌های تایپی جلوگیری کنید.

زمانی از Zod استفاده کنید که:

  • تعداد اندک endpointها را دارید.
  • مستندات OpenAPI ندارید.
  • ایمنی در زمان اجرا (runtime safety) می‌خواهید.

زمانی از codegen استفاده کنید که:

  • صدها endpoint دارید.
  • یک مستندات (spec) بی‌نقص دارید.

کست کردن (cast) به معنای بررسی کردن نیست. as User را در نزدیکی fetch، به عنوان یک بوی بد کد (code smell) در نظر بگیرید.

در مرز (boundary) پارس (parse) کنید. در داخل (مرزها) اعتماد کنید.

منبع: https://dev.to/pavelespitia/type-safe-api-clients-in-typescript-without-a-code-generator-1k32