Feign

  • توفير أمان الاتصال بين عميل Feign والخادم

    لإضافة معالج طلبات (Interceptor) إلى عميل Feign وتعيين رأس محدد مع مستخدمك المصادق عليه، يمكنك القيام بذلك من خلال التكامل بين معالج الطلبات الخاص بك وعميل Feign الخاص بك.

    أولاً، يجب عليك تهيئة عميل Feign لاستخدام المعالج الخاص بك. يمكن فعل ذلك بتوجيه عميل Feign لاستخدام المعالج الخاص بك كجزء من التكوين الخاص به. يمكنك تحقيق ذلك عن طريق إضافة المعالج الخاص بك إلى قائمة المكونات المُفعّلة في تطبيقك.

    java
    @Configuration public class FeignClientConfig { @Bean public FeignRequestInterceptor feignRequestInterceptor() { return new FeignRequestInterceptor("your_username", "your_password"); } }

    في هذا المثال، يتم إنشاء مكون تكوين جديد يضمن إنشاء معالج الطلبات الخاص بك، ثم يقوم بتسجيله كمكون في تطبيقك. يمكنك استبدال “your_username” و “your_password” بالمعلومات الخاصة بالمستخدم المصادق عليه.

    ثانياً، بمجرد تكوين معالج الطلبات الخاص بك، يتم استخدامه تلقائياً من قبل عميل Feign. عند كل طلب يتم إجراؤه باستخدام عميل Feign، سيتم تضمين رأس “Authorization” مع القيمة المحسوبة بواسطة معالج الطلبات الخاص بك.

    باستخدام هذا النهج، سيكون كل طلب يتم إرساله عبر عميل Feign مرفقًا برأس “Authorization” مع معلومات المستخدم المصادق عليه المقدمة من قبل معالج الطلبات الخاص بك. هذا يضمن أن يكون المستخدم مصادقًا عليه في كل طلب قادم من عميل Feign.

    المزيد من المعلومات

    بالطبع، يمكننا أن نضيف بعض التوضيحات الإضافية لضمان فهم كامل لكيفية عمل هذا النهج وكيفية تكامله في تطبيقك.

    تحتاج إلى التأكد من أن تكوين المعالج الخاص بك يتضمن الطريقة المناسبة لإرسال معلومات المصادقة، سواء كان ذلك عبر رأس “Authorization” كما هو الحال في المثال السابق أو بطريقة أخرى تتوافق مع متطلبات الخادم الخاص بك.

    علاوة على ذلك، يمكنك تحسين أمان تطبيقك عن طريق استخدام آلية مصادقة أكثر أمانًا بدلاً من تمرير اسم المستخدم وكلمة المرور على شكل نص عادي. يمكنك، على سبيل المثال، استخدام مفاتيح مشتركة (shared keys) أو التوقيع الرقمي للطلبات لتوفير طريقة مصادقة أكثر أمانًا.

    بالإضافة إلى ذلك، يجب عليك مراعاة عمليات التشفير والفك التي تقوم بها في تطبيقك. في المثال الذي قدمته، يتم استخدام تشفير بسيط باستخدام معالج NullCipher، والذي قد لا يكون كافياً لتأمين بيانات المصادقة بشكل جيد.

    علاوة على ذلك، ينبغي عليك دائماً معالجة الاستثناءات بشكل صحيح في تطبيقك، بدلاً من تجاهلها كما هو الحال في المثال، حيث يتم تجاهل الاستثناءات مثل BadPaddingException وIllegalBlockSizeException وغيرها.

    أخيرًا، يمكنك اختبار وتصحيح تطبيقك بشكل جيد من خلال استخدام وحدات الاختبار واختبار الوحدات الوظيفية والتكاملية. هذا يساعد على التأكد من أن نظام المصادقة الخاص بك يعمل بشكل صحيح وآمن قبل نشره في إنتاجك.

    باستخدام هذه الإرشادات وتطبيقها بشكل جيد، يمكنك تحسين أمان وأداء تطبيقك وضمان أن المستخدمين المصادق عليهم يتمكنون من الوصول إلى الموارد بشكل آمن وفعال.

  • اختبارات Feign مع WireMock في Spring Cloud

    في هذا المقال، سنستكشف كيفية كتابة اختبارات التكامل (Integration Tests) باستخدام Spring Cloud Netflix و Feign، مع التركيز على كيفية إدراج خادم WireMock في خدمة Eureka لتمكين Feign من العثور عليه والتواصل معه.

    لبداية، دعونا نتحدث قليلاً عن مكوناتنا الرئيسية هنا. نستخدم Spring Cloud Netflix للاتصال بين خدمات الميكروسيرفس. لدينا خدمتان، Foo و Bar. يقوم Foo باستهداف أحد نقاط النهاية REST في Bar باستخدام Feign، والذي يتم وضعه في واجهة تحمل العلامة @FeignClient.

    ثم، لدينا فئة الخدمة SomeService في Foo، التي تقوم بالاتصال بـ BarClient. تقوم SomeService بمحاولة استدعاء BarClient وإرسال طلب Bazzle. في حالة حدوث استثناء Feign، يتم التعامل معه ويتم إرجاع رسالة مناسبة.

    الآن، لنبني اختبارات التكامل للتأكد من أن التواصل بين الخدمات يعمل بشكل صحيح. نريد أن نقوم بإنشاء اختبار يرسل طلب HTTP حقيقي إلى خادم WireMock مزيف، وذلك باستخدام شيء مثل WireMock. هذا الاختبار يجب أن يتأكد من أن Feign يفك تشفير استجابة الخدمة بشكل صحيح ويقوم بتقديم التقرير إلى SomeService.

    الآن، كيف يمكننا حقن مثل هذا الخادم WireMock إلى Eureka؟ نحتاج إلى بعض السحر بواسطة التعليقات والتهيئة المناسبة. دعونا نلقي نظرة على كيفية تنفيذ ذلك:

    أولاً، يجب علينا تهيئة اختبارات التكامل لاستخدام WireMock كجزء من اختباراتنا. نحتاج إلى تهيئة WireMock في اختباراتنا ليستمع إلى الطلبات ويُعيد الاستجابات المزيفة بناءً على الطلبات.

    ثم، نحتاج إلى تهيئة Eureka و Feign للعثور على WireMock بدلاً من الخدمة الحقيقية. يمكننا تحقيق هذا باستخدام التهيئة المناسبة وتوجيه Feign إلى خادم WireMock بدلاً من الخدمة الحقيقية المُرسلة عبر Eureka.

    بعد ذلك، يمكننا كتابة الاختبارات التي تقوم بتشغيل الطلبات الحقيقية عبر WireMock والتحقق من استجاباتها وكيفية تفاعل SomeService معها.

    باستخدام هذه الطريقة، يمكننا بناء اختبارات تكاملية فعالة لضمان أن خدماتنا تتفاعل بشكل صحيح وفعّال عبر حدود الخدمة.

    وهكذا، يمكننا استخدام WireMock كجزء من اختباراتنا التكاملية مع Spring Cloud Netflix و Feign، وضمان تشغيل الخدمات بشكل صحيح وفقًا للمتوقع. من خلال التهيئة المناسبة، يمكننا جعل Feign يعثر على WireMock بسهولة، مما يمكننا من اختبار التفاعلات بين الخدمات بكفاءة وفعالية.

    المزيد من المعلومات

    بمجرد أن نتأكد من أن الاختبارات التكاملية تعمل بنجاح مع WireMock، يمكننا الآن التوجه إلى الخطوة التالية المهمة، وهي تهيئة Feign للعثور على خادم WireMock بدلاً من الخدمة الحقيقية عبر Eureka.

    لتحقيق ذلك، نحتاج إلى إعداد البيئة بشكل مناسب وتهيئة Feign لاستخدام WireMock بدلاً من الخدمة الحقيقية. يمكن القيام بذلك عبر التعليمات البرمجية التالية:

    java
    @Configuration public class FeignConfiguration { @Value("${wiremock.server.url}") private String wiremockServerUrl; @Bean public BarClient barClient() { return Feign.builder() .decoder(new GsonDecoder()) .target(BarClient.class, wiremockServerUrl); } }

    في هذا الكود، نقوم بتهيئة Feign لاستخدام خادم WireMock بدلاً من الخدمة الحقيقية. نقوم بذلك عن طريق استخدام قيمة يتم تمريرها من متغير بيئي أو ملف تهيئة للإشارة إلى عنوان URL لخادم WireMock. هذا يتيح لنا فرضية استخدام WireMock في اختباراتنا دون الحاجة إلى تغيير الشيفرة الرئيسية.

    ثم، نضيف التكوين اللازم في ملف التكوين الرئيسي لتطبيق Spring:

    yaml
    wiremock: server: url: http://localhost:8080

    وبهذا، يكون Feign مكونًا ومهيأً لاستخدام خادم WireMock بدلاً من الخدمة الحقيقية. يمكننا الآن تشغيل اختباراتنا التكاملية بثقة والاعتماد على أن Feign سيجد ويتفاعل مع WireMock بدلاً من الخدمة الفعلية.

    في النهاية، من خلال هذه الخطوات، يمكننا بناء اختبارات تكاملية فعالة وموثوقة باستخدام WireMock وSpring Cloud Netflix وFeign. باستخدام التكوين المناسب والإعدادات، يمكننا ضمان أن اختباراتنا تعمل بنجاح وتقوم بالتحقق من تفاعلات الخدمات بشكل صحيح وفعّال.

    بهذا، نكون قد استكملنا الطريقة لكتابة اختبارات التكامل الفعالة مع Spring Cloud Netflix وFeign مع استخدام WireMock كأداة افتراضية للاختبار. هذا المقال يوفر للمطورين إرشادات قيمة لضمان جودة وأداء التطبيقات الخاصة بهم في بيئة الميكروسيرفس.

  • Feign vs RestTemplate: Performance Comparison

    عند النظر إلى فعالية أداء Feign مقارنة بـ RestTemplate، ينبغي أولاً أن نفهم الاختلافات بينهما وكيفية تأثيرها على الأداء.

    Feign هو عبارة عن أداة لإصدار طلبات HTTP في تطبيقات Java، وهو يوفر واجهة برمجة التطبيقات (API) للتعامل مع خدمات الويب بطريقة سهلة ومبسطة. يستخدم Feign JDK’s HttpUrlConnection لإصدار الطلبات HTTP، وعلى الرغم من أنه يغلق الاتصال بعد انتهاء الطلب، إلا أنه لا يستخدم حوض الاتصال (Connection Pool)، وهذا قد يؤثر سلبًا على الأداء في حالات الاستخدام المكثفة.

    من جهة أخرى، RestTemplate هو أداة أخرى متاحة في Spring Framework لإصدار طلبات HTTP. تعتمد RestTemplate بشكل افتراضي على مكتبات JDK القياسية لإنشاء اتصالات HTTP، ولكن يمكن تبديلها إلى مكتبات أخرى مثل Apache HttpComponents أو Netty أو OKHttp. هذا يعني أنه يمكن تحسين أداء RestTemplate عن طريق استخدام مكتبات أخرى أسرع وأكثر كفاءة في إدارة الاتصالات.

    من هنا، يبدو أن RestTemplate قد يكون أفضل من Feign من حيث الأداء، خاصة إذا تم استخدام مكتبات مثل Apache HttpComponents أو OKHttp، التي تقدم أداءًا أفضل وتدعم حوض الاتصال لتقليل تكرار عمليات الإنشاء والإغلاق لاتصالات HTTP.

    ومع ذلك، يجب أن نلاحظ أن أداء الأدوات يعتمد أيضًا على عوامل أخرى مثل حجم البيانات المرسلة واستجابة الخادم وظروف الشبكة. لذا، يُفضل إجراء اختبارات أداء مكثفة لتحديد أيهما يناسب حالة الاستخدام الخاصة بالتطبيق أفضل.

    المزيد من المعلومات

    بالطبع، دعني أوسع النظر في بعض المعلومات الإضافية حول Feign و RestTemplate:

    1. Feign:

      • Feign هو أداة متميزة في بناء عمليات الاتصال بين الخدمات في بنية التطبيق السحابي.
      • يعتمد Feign على واجهات Java التي تُعرَّف بواسطة المطور لوصف الطلبات والاستجابات.
      • يدعم Feign إعدادات مثل تجاهل التكرار وإعادة المحاولة لضمان استجابة جيدة من الخوادم.
      • يتيح Feign التكامل مع أدوات تسجيل الطلبات والاستجابات والمراقبة مثل Sleuth و Zipkin.
    2. RestTemplate:

      • RestTemplate هو أحد الأدوات الأساسية في Spring Framework لإرسال طلبات HTTP.
      • يوفر RestTemplate واجهة برمجة التطبيقات (API) بسيطة ومرنة لإجراءات الاتصال بالخدمات الخارجية.
      • يمكن تخصيص RestTemplate لاستخدام مكتبات مختلفة لإصدار الطلبات HTTP، مما يتيح للمطورين تحسين الأداء وفقًا لمتطلبات التطبيق.
      • توفر Spring Boot الآن WebFlux، وهو مكون يستند إلى Reactor والذي يوفر طريقة جديدة للتعامل مع الطلبات والاستجابات العاملة بالمشتركات، ويمكن استخدامه بدلاً من RestTemplate في التطبيقات التي تستفيد من نموذج البرمجة الردفكتيف.
    3. أداء:

      • عند مقارنة أداء Feign و RestTemplate، يجب أخذ عوامل عديدة في الاعتبار مثل عدد الطلبات المرسلة، حجم البيانات، وظروف الشبكة.
      • Feign يمكن أن يكون أكثر سهولة في الاستخدام ولكن قد يكون أقل كفاءة في الأداء مقارنة بـ RestTemplate، خاصةً عندما يتعلق الأمر بتحميل الملفات الكبيرة أو إرسال العديد من الطلبات في وقت قصير.
      • يمكن تحسين أداء RestTemplate عن طريق استخدام مكتبات مثل Apache HttpComponents أو OKHttp، مما يجعلها خيارًا جيدًا للتحكم في الأداء وفقًا لاحتياجات التطبيق.
    4. الاختيار الأمثل:

      • اختيار الأداة المناسبة يعتمد على متطلبات التطبيق والأداء المتوقع.
      • إذا كان التركيز على السهولة في الاستخدام والتكامل السريع مع خدمات الويب، فقد يكون Feign الخيار الأمثل.
      • إذا كان الأداء هو العامل الأساسي، خاصة عند التعامل مع حمولات ثقيلة أو طلبات متعددة، فقد يكون من الأفضل استخدام RestTemplate مع تكوين مكتبة ذات أداء عالي لإصدار الطلبات HTTP.

    باختصار، يتطلب اختيار بين Feign و RestTemplate تقديرًا جيدًا لمتطلبات التطبيق والأداء المتوقع، مما يساعد في اتخاذ القرار الصحيح وتحقيق أداء مثلى للتطبيقات.

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر