カスタムサービスモジュールを呼び出そうとしていますが、401と表示されています。
資源:
$resources = array(
'get_contacts' => array(
'operations' => array(
'index' => array(
'help' => 'Get customers and their contacts',
'file' => array('type' => 'inc', 'module' => 'sync_contacts', 'name' => 'resources/sync_contacts.resource'),
'callback' => '_get_customer_contacts',
'args' => array(
array(
'name' => 'merchant_id',
'type' => 'int',
'description' => t('Get customers and their contacts by merchant_id.'),
'source' => array('data' => 'merchant_id'),
'optional' => FALSE,
),
),
'access callback file' => array(
'type' => 'inc',
'module' => 'drupalgap',
'name' => 'drupalgap.resource',
),
'access callback' => '_sync_contacts_access',
'access arguments' => array('view'),
'access arguments append' => TRUE,
),
),
),
);
サービス機能:
function sync_contacts_get_customers_list(options) {
try {
options.method = 'GET';
options.path = 'get_contacts.json';//'.json' removed and tested also
options.service = 'sync_contacts';
options.resource = 'get_contacts';
Drupal.services.call(options);
}
catch (error) {
console.log( error);
}
}
サービス関数呼び出し:
try {
var my_args = {
merchant_id: 1
};
sync_contacts_get_customers_list({
data: JSON.stringify(my_args),
success: function(result) {
drupalgap_alert("SUCCESSSS");
$("#contactList").append(JSON.stringify(result, null, 2));
}
});
} catch (error) { console.log(error); }
ポストマン:
これがカスタムサービスの使用方法です。実行すると、「401(Unauthorized:Missing required argument merchant_id)」と表示されます。
この問題を解決するにはどうすればよいですか?
SOLUTION:
以下の回答でタイラーのリソースを使用し、サービスコールを以下のように変更しました(GETをPOSTに変更し、それに応じてパスを変更しました)。
Note:
テストするには、POSTMANでもPOSTを使用して呼び出し、merchant_id
as Raw
すなわち。 {"merchant_id": 1}
function sync_contacts_get_customers_list(options) {
try {
options.method = 'POST';
options.path = 'sync_contacts_resources/get_contacts';
options.service = 'sync_contacts';
options.resource = 'get_contacts';
Drupal.services.call(options);
}
catch (error) {
console.log( error);
}
}
sync_contacts_get_customers_list
関数でPOST
メソッドを使用する必要があります。
options.method = 'POST';
これがないと、Drupalサービスまでは何も「投稿」しないので、Drupalのリソースはmerchant_id
に配信されません。
GET
リクエストを使用する場合は、ビューのJSON( Views datasource )とコンテキストフィルターを使用することをお勧めします。それ以外の場合、サービスのカスタムリソースは常にPOST
[〜#〜] afaik [〜#〜](エンティティのCRUDインターフェイスを構築している場合を除く)(例- Services Entity API )。
また、Drupalでカスタムリソースを定義する方法は正しくありません。代わりにactions
を使用してください。
$resources = array(
'sync_contacts_resources' => array(
'actions' => array(
'get_contacts' => array(
'help' => 'Get customers and their contacts',
'file' => array('type' => 'inc', 'module' => 'sync_contacts', 'name' => 'resources/sync_contacts.resource'),
'callback' => '_get_customer_contacts',
'args' => array(
array(
'name' => 'merchant_id',
'type' => 'int',
'description' => t('Get customers and their contacts by merchant_id.'),
'source' => array('data' => 'merchant_id'),
'optional' => FALSE,
),
),
'access callback file' => array(
'type' => 'inc',
'module' => 'drupalgap',
'name' => 'drupalgap.resource',
),
'access callback' => '_sync_contacts_access',
'access arguments' => array('view'),
'access arguments append' => TRUE,
),
),
),
);