it-swarm.asia

باستخدام Drupal كعميل لخدمة ويب

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

أستخدم عميل خدمة الويب الوحدة النمطية Drupal 7 و الخدمات الوحدة النمطية Drupal 6 لكن لا اعرف كيف استعملهم قرأت التوثيق لكني لم احصل على اي نتيجة.

يمكن لأي شخص أن يساعد في هذه المشكلة ، أو يخبرني عن كيفية استخدام هذه الوحدات؟ هل هناك أي وحدة أخرى لهذا الغرض؟


حل ممكن: أجد وحدة تسمى XML VIEWS لكن هذه الوحدة تحول ملفات XML فقط.

الآن ، أبرمج في هذه الوحدة لتحويل JSON إلى XML.

في هذه الملفات: xml_views_plugin_query_xml.inc

في هذه الوظيفة: تنفيذ

أي شخص لديه حل آخر؟

8
Dvex

يحتوي دروبال على وظائف محددة يمكن أن تساعد في التواصل مع خدمة الويب ومعالجة إدخال JSON.
دروبال 7 لديه الوظائف التالية:

  • drupal_http_request () هي وظيفة تقديم طلب HTTP إلى موقع بعيد ، وهي تتعامل مع GET أو POST أو PUT أو أي طلبات HTTP أخرى ؛ كما يعالج عمليات إعادة التوجيه.
  • drupal_http_build_query () تحويل مصفوفة في سلسلة rawurlencode()- d.
  • drupal_json_decode () يفك تشفير سلسلة JSON في كود PHP.
  • drupal_json_encode () ترميز متغير PHP في سلسلة يتم التعامل معها بواسطة JSON.

باستخدام هذه الوظائف ، يمكنك كتابة الوحدة النمطية المخصصة الخاصة بك لتقديم الطلبات إلى موقع يقوم بتنفيذ خدمة ويب.

إذا كانت هناك بعض القيود حول عدد الطلبات التي يمكن إجراؤها لخادم الويب ، فيمكنك استخدام وظائف Drupal لتخزين النتيجة التي تم الحصول عليها من خادم الويب في ذاكرة التخزين المؤقت:

  • cache_get () ، لحفظ البيانات في ذاكرة التخزين المؤقت
  • cache_set () ، لحفظ البيانات في ذاكرة التخزين المؤقت

لاحظ أن Drupal يدعم أكثر من حاوية تخزين مؤقت واحدة ، ويمكن للوحدات النمطية استخدام صناديق التخزين المؤقت الخاصة بها ، عند الضرورة.
يدعم Drupal أيضًا عناصر ذاكرة التخزين المؤقت التي تتم إزالتها تلقائيًا عند تمرير ذاكرة التخزين المؤقت المتتالية (راجع وصف CACHE_TEMPORARY ثابت). تنفيذ hook_flush_caches () ، تسمح الوحدات للمستخدمين الإداريين بتنظيف ذاكرة التخزين المؤقت التي تستخدمها الوحدة عند النقر على زر "مسح" في صفحة "الأداء" ، أو في أي مرة تستدعي الوحدة - drupal_flush_all_caches () .

في Drupal 7 ، ترتبط بيانات ذاكرة التخزين المؤقت للبيانات المستخدمة بشكل متكرر بمتغير ثابت تمت معالجته بـ drupal_static () . عندما يتم استخدام البيانات بشكل متكرر حقًا عند إخراج نفس الصفحة ، يتم استخدام رمز مشابه لما يلي:

  // Use the advanced drupal_static() pattern, since this is called very often.
  static $drupal_static_fast;
  if (!isset($drupal_static_fast)) {
    $drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
  }
  $implementations = &$drupal_static_fast['implementations'];

  // …

  // Fetch implementations from cache.
  if (empty($implementations)) {
    $implementations = cache_get('module_implements', 'cache_bootstrap');
    if ($implementations === FALSE) {
      $implementations = array();
    }
    else {
      $implementations = $implementations->data;
    }
  }

الكود هو جزء من module_implements () .

9
kiamlaluno

في كل مرة أحتاج فيها لاستهلاك خدمة ويب ، قمت للتو بإنشاء PHP فئة قائمة حول file_get_contents أو curl بالاشتراك مع - json_decode أو simplexml_load_string .

يتم بعد ذلك الوصول إلى الفصل في وحدة نمطية عن طريق دالة getter التي تستخدم drupal_static أو $static نمط لـ Drupal 6.

ثم استخدم هذا داخل الكتل المخصصة الخاصة بي ، وعمليات رد القائمة ، وما إلى ذلك ، حسب الحاجة.

تعديل

إجابة @ kiamlaluno صحيحة وتوضح طريقة للقيام بذلك من خلال Drupal. السبب الرئيسي لعدم القيام بذلك هو أنني أفضل تجريد فئة خدمة الويب بطريقة تسمح لي استخدامه في تطبيقات أخرى. هناك مزايا وعيوب لذلك ، لذلك وزع خياراتك.

2
mpdonadio