test_endpointを作成する方法は?


29

私はdrupalが初めてで、RESTおよびRESTWSモジュールを使用するためにサービスモジュールを使用しています。RESTWSを使用し、http://base_url/node/1.xmlでノードのコンテンツを取得できました 。次に、外部PHPアプリケーションからノードとユーザーをdrupalに追加する必要があります。私はグーグルで調べて、ここでhttp:// base_drupal_url / drupal7 / test_endpoint / usersを使用する必要があることを発見しました。Drupal 7からサービスを作成しようとしましたが、エンドポイントのタイトル、名前、エンドポイントパスに何を指定すればよいかわかりません。また、curlで同じエンドポイントパスを指定する必要があると思います。

レストサーバーがインストールされているかどうかを確認する方法、およびエンドポイントパスを作成する方法に関するヘルプは、非常に役立ちます。

サービスモジュールservices-7.x-3.0-rc3でDrupal 7を使用しています


問題を解決しましたか?エンドポイントとリソースパスを正確に作成しましたが、「要求されたURL /〜DrupalWorkstation / Drupal / drupal_7_16 / rest / nodeがこのサーバーで見つかりませんでした」というメッセージが表示されます。エラー。投票数が最も多い回答に対する私のコメントを確認してください。これに対する解決策があれば教えてください。
ラージパワンガムダル

回答:


56

サービスモジュールは使いやすいですが、特にコンセプトが初めての場合は、設定が難しい場合があります。そのため、「Drupal Answers」ユーザーがサービスモジュールを簡単に設定できるように、スクリーンショットを投稿します。

私のマシンにインストールされているサービスモジュールのバージョンは次のとおりです。

ここに画像の説明を入力してください

以下に示すように、「rest」というエンドポイントを作成します。

ここに画像の説明を入力してください

サーバーのタイプとエンドポイントパスを選択します。

ここに画像の説明を入力してください

有効にするリソースのリストを選択し、エイリアスを指定します。

ここに画像の説明を入力してください

有効にする応答フォーマッターと要求パーサーを選択します。

ここに画像の説明を入力してください

以下に示すように、構成をテストできます。

ここに画像の説明を入力してください

以下のように、すべてのノードのリストを取得できます。

ここに画像の説明を入力してください

そして特定のノード:

ここに画像の説明を入力してください

以下は、外部のPHPアプリケーションからノードを作成するためのMichaelColeが提供する優れたサンプルスクリプトです。http://drupal.org/node/910598#comment-4677738

この答えを完全にするために彼のコードを複製しています。

//--------------login to the server------------------------
$service_url = 'http://example.dev/rest/user/login.xml'; // .xml asks for xml data in response
$post_data = array(
    'username' => 'test',
    'password' => 'test',
);
$post_data = http_build_query($post_data, '', '&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "LOGIN RESPONSE:\n";
var_dump($response);



// parse the response
$xml = new SimpleXMLElement($response);
$session_cookie = $xml->session_name . '=' . $xml->sessid;
// print "SESSION_COOKIE: $session_cookie";

file_put_contents('session_cookie.txt', $session_cookie);

//----------------create a node -------------------------------

$node_data = array(
    'type' => 'ct_metadata_core',
    'title' => 'test layer',
    'field_core_lat_n[und][0]' => array('value' => '90'),
    'field_core_lat_s[und][0]' => array('value' => '-90'),
    'field_core_long_e[und][0]' => array('value' => '180'),
    'field_core_long_w[und][0]' => array('value' => '-180'),
    'field_core_description[und][0]' => array('value' => 'National Data Buoy Center'),
    'field_core_originator[und][0]' => array('value' => 'NDBC'),
    'field_core_url[und][0]' => array('url' => 'http://www.ndbc.noaa.gov/kml/marineobs_as_kml.php?sort=pgm'),
    'field_cont_res_name_org[und][0]' => array('value' => 'test'),

);


$service_url = 'http://example.dev/rest/node'; // .xml asks for xml data in response
$session_cookie = file_get_contents('session_cookie.txt');

$node_data = http_build_query($node_data, '', '&'); // Format post data as application/x-www-form-urlencoded
// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session

curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, $node_data); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "CREATE NODE RESPONSE:\n";
var_dump($response);


//----------------logout from the server-------------------------

$service_url = 'http://example.dev/rest/user/logout';
$session_cookie = file_get_contents('session_cookie.txt');

// set up the request
$curl = curl_init($service_url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);  // have curl_exec return a string

curl_setopt($curl, CURLOPT_COOKIE, "$session_cookie"); // use the previously saved session
curl_setopt($curl, CURLOPT_POST, true);             // do a POST
curl_setopt($curl, CURLOPT_POSTFIELDS, ""); // POST this data
// make the request
curl_setopt($curl, CURLOPT_VERBOSE, true); // output to command line
$response = curl_exec($curl);
curl_close($curl);
print "LOGOUT RESPONSE:\n";
var_dump($response);

2
指摘する価値があるので、彼はすべてのリクエスト解析オプションを有効にしました。「application / x-www-form-urlencoded」がデフォルトで無効になっていることに気付くまでに多くの時間を無駄にしました。
描いた

上記のコードスニペットをどこで書く必要がありますか?modules / services / server / rest_server / lib内ですか?
subhojit777

1
上記のコード@ subhojit777は、外部サーバーでホストされているサービスAPIを使用するために使用できるスタンドアロンのPHPコードスニペットであり、モジュールファイルに書き込むことができますが、modules / services / server / rest_server / libに書き込むことはおそらく最高の場所ではありません。
Ajinkya Kulkarniさん

あなたが私のローカルホストで言ったように私はすべてをセットアップしました。localhost /〜DrupalWorkstation / Drupal / drupal_7_16として実行されているdrupalサイトへのパスがあります。上記のURLにアクセスするとindex.phpページが実行されますが、構成されたエンドポイントとリソースパスは機能しません。サービスをトリガーする私のURLはlocalhost /〜DrupalWorkstation / Drupal / drupal_7_16 / rest / nodeです。次のエラーが表示されます。「要求されたURL /〜DrupalWorkstation / Drupal / drupal_7_16 / rest / nodeがこのサーバーで見つかりませんでした。」この問題を修正する方法に関する提案はありますか?
ラジパワンガムダル

1
ありがとう、あじんきゃ先生。ありがと!!!
TheEYL

6

Services 3.xのリソースの作成を読むことをお勧めします。

また、サービスとRESTWSに互換性があるかどうかも確認しています。どちらも同じもののバリエーションを提供するため、競合する可能性があります。


drupal 7
sridhar

私のPHPアプリケーションからノードを作成するには、drupalでカスタムコードを作成する必要がありますか?
スリダー

サービスには、使用可能なリソースが組み込まれています。RestWSと互換性について:RestWSメンテナによって拒否されたサービスへのRestWSのポートがあります。誰かが興味を持っている場合は、別のモジュールとして公開することもできます。
VoxPelli
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.