HTTP Client
أولاً، سأشرح كيفية استخدام عميل Core مباشرة، ثم سأشرح كمثال تكامل اختياري لمحول HTTP المشترك الذي تستخدمه الخدمة المولدة تلقائيًا.
استخدام عميل Core مباشرة
Paths التي يتم حقنها في createHttpClient<Paths>() هي عقد الطلب. يتم تحديد url وmethod من مفتاح Paths، بينما يتم تحديد queryString وpathVariable من parameters، ويتم تحديد body من requestBody.
نوع الاستجابة هو R الذي يحدده المستدعي في callApi<R>(). لا يستنتج Core نوع الاستجابة تلقائيًا من استجابات OpenAPI.
httpClient.ts
tsشكل الاستجابة يتم اختياره حسب API.
لا يفرض typed-rx-http استخدام ResponseWrapper. إذا كانت استجابة الخادم عبارة عن غلاف، يتم تحديد نوع الغلاف كـ R، وإذا لم يكن كذلك، يتم تحديد نوع الاستجابة الفعلي كما هو.
اختياري: محول عام للمشروع + خدمة مولدة تلقائيًا.
تكوين commonService أدناه ليس هيكلًا أساسيًا لـ Core، بل هو نمط دمج مشروع يهدف إلى تطبيق مصادقة headers وSSR وسياسات الذاكرة المؤقتة على عدة خدمات مولدة في وقت واحد.
ما تفعله commonService في المشروع.
commonService ليس اسم فئة خاصة تقدمها @byeolnaerim/typed-rx-http، بل هو ملف مملوك للمستخدم يُستخدم لجمع سياسات HTTP المشتركة في مكان واحد. اسم الملف حر، وفي المثال أدناه، نستخدم اسم المشروع الفعلي rxjsHttpService.ts.
بدلاً من تكرار createHttpClient في الشاشة والخدمة المولدة تلقائيًا، نستخدم callApi و callApiStream التي أنشأها هذا الملف كنقطة دخول مشتركة. لذلك، إذا قمت بتعديل قواعد تجديد المصادقة، وتمرير رؤوس SSR، ومعالجة التخزين المؤقت والأخطاء مرة واحدة، فسيتم تطبيقها على جميع الخدمات المولدة.
ابدأ بمشاهدة الكود الكامل لـ commonService/rxjsHttpService.
1. الحد الأدنى من الشكل المكتمل
جوهر commonService هو الكود أدناه. يتم إنشاء headerStore و typed HTTP client مرة واحدة، ويتم تصدير callApi/callApiStream التي تستخدمها الخدمة المولدة بشكل مشترك. يمكن أيضًا عرض uploadFile و createSSEObservable من نفس العميل.
rxjsHttpService.ts
ts2. Next.js + مصادقة الجلسة + توسيع ذاكرة التخزين المؤقت CSR/SSR
فيما يلي مثال كامل لمشروع يضيف مصادقة الجلسة، ورأس SSR وذاكرة التخزين المؤقت CSR/SSR إلى المحول العام نفسه. إذا كان المشروع يستورد ملف cache wrapper، فإن هذا الشكل هو المعيار. يمكنك نسخه مباشرة ثم ضبط setLogin import و ApiTypes و CacheNames ومسار API المصادقة والمتغيرات البيئية والمسار غير المصرح به وفقًا لمشروعك.
rxjsHttpService.ts
tsأدوار حسب تكوين الكود
paths
هذا هو نوع مسارات OpenAPI المستخدم عند فحص URL وmethod وpath variable وquery وbody type بواسطة createHttpClient وServiceArguments.
headerStore
يتم تخزين رؤوس مشتركة مثل Content-Type وAuthorization في المتصفح ومشاركتها مع مصادقة الجلسة واتصال RSocket.
headersProvider
في CSR، يتم إرجاع headerStore، وفي SSR، يتم قراءة Cookie وAuthorization من الطلب الحالي لتوفير رؤوس مختلفة لكل طلب.
service
عميل HTTP typed فعلي مع base URL ورؤوس مشتركة ومعالجة 401 من الخادم ورسالة خطأ أساسية.
sessionAuth
يتم مزامنة رمز الجلسة قبل الطلب، وإذا كان 401 يتم التحديث ثم إعادة محاولة Observable الأصلي مرة واحدة، وإذا فشل يتم تنفيذ تدفق تسجيل الخروج.
callApi / callApiStream
دالة مشتركة يتم استيرادها بواسطة خدمة REST العامة التي تم إنشاؤها تلقائيًا وخدمة NDJSON stream. كلاهما يعيد RxJS Observable.
callApiClientCache / callApiServerCache
غلاف ذاكرة التخزين المؤقت الذي يستخدم ذاكرة التخزين المؤقت CSR في المتصفح ويقوم بتحميل ذاكرة التخزين المؤقت SSR من @byeolnaerim/typed-rx-http/next ديناميكيًا.
طريقة الاتصال بالخدمة التي تم إنشاؤها تلقائيًا.
يحسب المُولد المسار النسبي لملف commonServiceFile ويضيف الاستيراد لكل خدمة. الشاشة تستورد الوظائف المُنشأة بدلاً من استدعاء الملفات العامة مباشرة، وتقوم الوظيفة المُنشأة بتحويل path وparams وbody إلى pathVariable وqueryString وbody من ServiceArguments وتمريرها إلى callApi.
generateSwagger.cjs
jsاستجابة واحدة هي firstValueFrom.
يمكن استخدام واجهات برمجة التطبيقات REST التي تستجيب مرة واحدة وتنتهي مثل البحث، التخزين، والحذف بشكل طبيعي حتى داخل الدالة غير المتزامنة الموجودة.firstValueFromإذا تم استلامها.
BusinessSearchPage.tsx
tsxفي الشاشة، قيمة الإرجاعيظهر فقط، لكن الخدمة التي تم إنشاؤها تحتوي على URL، وطريقة HTTP ونوع الاستجابة. يتم دائمًا تمرير معلمات الاستعلام كـ{ params: { ... } }ل.
الاشتراك في عدة استجابات
طلبات مثل تقدم العمل أو تدفق RSocket التي تصل عدة قيم هيsubscribeتستقبل، ويتم إلغاء الاشتراك عند اختفاء المكون.
BatchJobPage.tsx
tsxعند استخدام callApi مباشرة
يمكنك استدعاء callApi للخدمة العامة مباشرةً عند عدم استخدام مولد الخدمة أو عند التحقق من نقطة النهاية المؤقتة قبل الإنشاء. يتم فحص نوع الطلب في المسارات ويتم تحديد نوع الاستجابة بواسطة المستدعي بشكل عام.