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


8

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

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

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


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

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

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

この関数では:実行

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


オースティン(11)drupalcampでこれに関するいくつかの良いプレゼンテーションがありました:vimeo.com/33785095 vimeo.com/33091201
chrisjlee

回答:


9

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()の一部です。


drupal.org/project/wsclientを試しましたか?このモジュールがwsクライアントの実装に役立つかどうかに興味があります
milkovsky

2

私は、Webサービスを消費する必要があったたびに、私はちょうど周りベースのPHPクラスを作成しているのfile_get_contentsカールと一緒にjson_decodeまたはsimplexml_load_stringを

その後、クラスはdrupal_staticまたは$staticDrupal 6のパターンを使用するゲッター関数を介してモジュール内でアクセスされます。

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

編集

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


それは、Webサービスからのデータを使用するようにスケジュールすることを意味しますか?モジュールを持つサイトビルダーとしての解決策はありますか?
Dvex 2012年

申し訳ありませんが、何をしようとしているのかよくわかりません。
mpdonadio

つまり、プログラミングを必要としないソリューションを探します。モジュールを備えたサイトビルダーのようなソリューション。しかし、私の場合、プログラミングが必要な場合は、そのための手順が必要です。
Dvex 2012年

抽象webserviceクラスの例を提供できますか?
milkovsky 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.