Как создать 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.

Любая помощь в том, как проверить, установлен ли остальной сервер и как создать путь к конечной точке, будет очень полезна.

Я использую Drupal 7 с сервисным модулем services-7.x-3.0-rc3

Шридхар
источник
Вы решили свою проблему? Я создал конечную точку и путь к ресурсу точно так же, как вы, но получаю сообщение «Не найдено» Запрошенный URL-адрес / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node не найден на этом сервере. » ошибка. Пожалуйста, проверьте мой комментарий к наиболее высоко оцененному ответу. Дайте мне знать, если у вас есть решение для этого.
Радж Паван Гумдал

Ответы:

56

Модуль служб прост в использовании, но его сложно настроить, особенно если вы новичок в этой концепции. Итак, я собираюсь опубликовать скриншоты, чтобы упростить настройку модулей Сервисов для пользователей Drupal.

Ниже приведена версия модуля Службы, установленная на моем компьютере:

введите описание изображения здесь

Создайте конечную точку с именем rest, как показано ниже:

введите описание изображения здесь

Выберите тип сервера и путь к конечной точке:

введите описание изображения здесь

Выберите список ресурсов, которые вы хотите включить, и укажите псевдонимы:

введите описание изображения здесь

Выберите форматеры ответов и запросите анализаторы, которые вы хотите включить:

введите описание изображения здесь

Вы можете проверить свою конфигурацию, как показано ниже:

введите описание изображения здесь

Вы можете получить список всех узлов, как показано ниже:

введите описание изображения здесь

И конкретный узел как:

введите описание изображения здесь

Ниже приведены отличные примеры сценариев, предоставленных MichaelCole здесь http://drupal.org/node/910598#comment-4677738 для создания узлов из любого внешнего PHP-приложения.

Я дублирую его код для полноты этого ответа.

//--------------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);
Ajinkya Kulkarni
источник
2
Поэтому стоит отметить, что он включил каждую опцию разбора запроса. Я потратил много времени, прежде чем понял, что «application / x-www-form-urlencoded» по умолчанию отключено.
drewish
где я должен написать приведенный фрагмент кода? Это внутри модулей / сервисов / сервера / rest_server / lib?
subhojit777
1
Код @ subhojit777, приведенный выше, представляет собой отдельный фрагмент кода PHP, который можно использовать для использования API-интерфейсов служб, размещенных на внешнем сервере, и вы можете записать его в свой файл модуля, но, вероятно, записать его в modules / services / server / rest_server / lib не лучшее место.
Аджинкя Кулкарни
Я настроил все как вы сказали на моем локальном хосте. У меня есть путь к моему сайту drupal, работающий как: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . Страница index.php работает, когда я нажимаю выше URL, но моя настроенная конечная точка и путь к ресурсу не будут работать. Мой URL для запуска службы: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Я получаю следующую ошибку: «Не найдено Запрошенный URL-адрес / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / узел не найден на этом сервере». Любые предложения о том, как решить эту проблему?
Радж Паван Гумдал
1
Аригато Гозаймасу Аджинкя сенсей. Аригато !!!
TheEYL
6

Я предлагаю вам прочитать Создание ресурса для служб 3.x .

Кроме того, я уверен, что Службы и RESTWS совместимы; они оба предлагают варианты одного и того же, и как таковые могут конфликтовать.

Блейк Сефтнер
источник
Я хотел бы знать, что я должен дать в пути к конечной точке в опции добавления сервиса в drupal 7
sridhar
и я должен написать какой-либо пользовательский код в drupal, чтобы создать узел из моего приложения PHP?
Шридхар
Сервисы имеют встроенные ресурсы, которые можно использовать. относительно RestWS и совместимости: есть порт RestWS для Сервисов, который был отклонен сопровождающими RestWS. Если кому-то это интересно, он может быть опубликован как отдельный модуль.
VoxPelli