web-dev-qa-db-ja.com

DrupalをWebサービスのクライアントとして使用する

DrupalをWebサービスのクライアントとして、データを抽出してビューに表示するために、またはコンテンツとして使用する必要があります(使用形式はJSONまたはRESTです)。

私は Webサービスクライアント モジュールをDrupal 7で使用し、 Services モジュールをDrupal 6で使用しています、しかし、私はそれらを使用する方法がわかりません。ドキュメントを読みましたが、結果が得られません。

誰かがこの問題を手伝ったり、これらのモジュールの使い方を教えたりできますか?この目的のための他のモジュールはありますか?


可能な解決策: XML VIEWS というモジュールを見つけましたが、このモジュールはXMLファイルのみを変換します。

ここで、JSONをXMLに変換するためにこのモジュールでプログラミングします。

このファイルでは:xml_views_plugin_query_xml.inc

この関数では:Execute

誰か別の解決策がありますか?

8
Dvex

Drupalには、Webサービスとの通信やJSON入力の処理に役立つ特定の機能があります。
Drupal 7には次の機能があります。

これらの関数を使用すると、独自のカスタムモジュールを記述して、Webサービスを実装するサイトにリクエストを送信できます。

Webサーバーに対して実行できる要求の数にいくつかの制限がある場合は、Drupal関数を使用して、Webサーバーから取得した結果をキャッシュできます。

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

Webサービスを利用する必要があるたびに、 file_get_contents または curl に基づいてPHPクラスに基づいて作成しました- json_decode または simplexml_load_string

次に、このクラスは、モジュール内で drupal_static を使用するgetter関数、またはDrupal 6.の$staticパターンを使用してアクセスされます。

次に、必要に応じて、カスタムブロック、メニューコールバックなどの中でこれを使用します。

編集

@kiamlalunoの答えは正解であり、Drupal APIを介してこれをすべて行う方法を示しています。これを行わない主な理由は、許可する方法でWebサービスクラスを抽象化することを好むからです。これには他のアプリケーションで使用するための利点と欠点があるので、オプションを比較検討してください。

2
mpdonadio