Drupal 7.でサービスモジュールを使用しています。AJAXを介して検索用語を送信し、以下を含む配列を受け取ることができるサービスを実装したいタイトルに緩やかに一致する上位5つのノード(ノードid
およびtitle
)。接続時に http://example.com/api/ このメッセージが表示されます
サービスエンドポイントの「検索」が正常にセットアップされました。
しかし、 http://example.com/api/search/Test のようなものに移動しようとすると、404が表示されます。
後で試してみて、他のチュートリアルから読んだとき、私は休みのあるリソースを作成します、私にとっては石鹸はdrupalでは不可能です。試してみましたが、成功しませんでした。このコードをコピーしてページングし、カスタムモジュール名とフックのみを変更できます。
/**
* Implements hook_ctools_plugin_api().
*/
function core_custom_webservice_ctools_plugin_api($owner, $api) {
if ($owner == 'services' && $api == 'services') {
return array(
'version' => 3,
'file' => 'core_custom_webservice.services.inc'
);
}
}
function core_custom_webservice_services_resources() {
$resources = array(
'webservice_resources' => array(
'operations' => array(
'retrieve' => array(
'help' => t('Response of webservice'),
'file' => array('type' => 'inc', 'module' => 'core_custom_webservice', 'name' => 'core_custom_webservice.resource',),
'callback' => '_core_custom_webservice_get_response',
'access callback' => '_core_custom_webservice_access',
'access arguments' => array('view'),
'access arguments append' => TRUE,
'args' => array(
array(
'name' => 'parameters',
'type' => 'string',
'description' => 'The parameters that define requested data',
'source' => array('path' => '0'), // first argument in the url
'optional' => FALSE,
),
),
),
),
),
);
return $resources;
}
/* * *************************************************************************************************
* Access callback
* For now only view/retrieve is implemented and if the user is logged in, he gets access
*/
function _core_custom_webservice_access($op) {
global $user;
$access = TRUE;
switch ($op) {
case 'view':
if ($user->uid) {
$access = TRUE;
}
break;
}
return $access;
}
function _core_custom_webservice_get_response($arg) {
$response = 'something';
return 'print '.$response;
}
http://path.come/?q = webservice_server_rest/webservice_resources/string.json でサービスパスと成功を再試行してください
ServicesモジュールでRESTfulリソースを作成した場合、JSON形式のHTTPリクエストに応答することが期待されるため、http://example.com/api/search/Test.json
に移動してみてください
このモジュールを使用してみてください https://www.drupal.org/project/services_views 。現在、次の2つの機能があります。-ビューベースのリソースを作成し、ビューにサービス表示を作成します-ビューのリソース呼び出しを介してシステムの任意のビューを実行します
基本的に404は見つかりませんエラー
サービスのエンドポイントが
http://example.com/api/search/ {search-term}
送信される応答本文は正しい形式です
3. contentヘッダーはapplication/jsonに設定され、Content-Typeに名前が付けられます
このエラーも発生し、サービスエンドポイントのパスとビューのパスの両方をURLに含める必要があることに気付きました。
もともと私は http://my.local/events を試していましたが、 http://my.local/events/events を使用する必要がありました(サービスに名前を付けました)私のビューと同じエンドポイントパス)。
こんにちはあなたがしなければならない最初のことは
手順1:カスタムモジュールを作成して実装するhook_services_resources()
例:
function mymodule_services_resources() {
return array(
'search' => array(
'create' => array(
'help' => 'Search for a content',
'file' => array('file' => 'inc', 'module' => 'your module name'),
'callback' => '_function_to_call_when_this_service_is_called',
'access callback' => 'user_access',
'access arguments' => array('access content'),
'access arguments append' => FALSE,
'args' => array(
array(
'name' => 'data',
'type' => 'struct',
'description' => 'The id of the data to get',
'source' => 'data',
'optional' => FALSE,
),
),
),
),
);
}
ステップ2:に行く
構造->サービス
モジュールを有効にします
ステップ3:クライアントにデータを送信する$ data-クライアントに送信されるデータは配列でなければなりません
$url = $base_url.'/api/search';
$response = drupal_http_request($url, array(
'headers' => array('Content-Type' => 'application/json', 'Accept' => 'application/json'),
'method' => 'POST',
'data' => json_encode($data),
'max_redirects' => 0,
)
);
正常に動作するかどうかを確認するために応答を印刷します。
チェックリスト: