Як створити test_endpoint?


29

Я новачок в drupal, і я використовую сервісний модуль для використання REST і RESTWS модуля. Я використовував RESTWS і міг отримати вміст вузла за адресою http: //base_url/node/1.xml, і тепер мені потрібно додати вузол та користувачів із мого зовнішнього PHP-програми до drupal. Я переглянув Google і виявив, що нам потрібно використовувати http: // base_drupal_url / drupal7 / test_endpoint / users . Я спробував створити службу з Drupal 7, але я не знаю, що мені слід вказати на назву кінцевої точки, ім'я та шлях до кінцевої точки, і я припускаю, що мені потрібно вказати той же шлях до кінцевої точки у згортці.

Будь-яка допомога щодо того, як перевірити, чи встановлений сервер відпочинку та як створити шлях до кінцевої точки, буде дуже корисною.

Я використовую Drupal 7 з сервісним модулем сервісів-7.x-3.0-rc3


Ви вирішили свою проблему? Я створив кінцеву точку та шлях ресурсу саме так, як ви, але я отримую "Не знайдено Запрошений URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / вузол не знайдено на цьому сервері." помилка. Будь ласка, перевірте мій коментар до найвищої відповіді. Дайте мені знати, чи є у вас рішення для цього.
Радж Паван Гумдал

Відповіді:


56

Модуль сервісу простий у використанні, але налаштувати його складно, особливо якщо ви не знайомі з концепцією. Отже, я збираюся розмістити скріншоти, щоб полегшити конфігурацію модулів служб для користувачів "Drupal Answers".

Далі йде версія модуля Services, встановлений на моїй машині:

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

Створіть кінцеву точку під назвою "відпочинок", як показано нижче:

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

Виберіть тип шляху до сервера та кінцевої точки:

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

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

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

Виберіть формати відповідей та запитуйте парсери, які потрібно включити:

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

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

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

Список усіх вузлів можна отримати нижче:

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

І конкретний вузол як:

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

Нижче наведено чудові приклади скриптів, наданих 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);

2
Тож варто зазначити, що він включив кожен варіант розбору запиту. Я витрачав багато часу, перш ніж зрозумів, що "application / x-www-form-urlencoded" вимкнено за замовчуванням.
Вересень

де я повинен написати вищевказаний фрагмент коду? Це всередині модулів / служб / сервер / rest_server / lib?
subhojit777

1
@ subhojit777 вище код - це окремий фрагмент коду PHP, який можна використовувати для споживання служб api, розміщених на зовнішньому сервері, і ви можете записати його у вашому файлі модуля, але, можливо, запис у модулі / послуги / сервер / 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 / node не знайдено на цьому сервері." Будь-які пропозиції щодо вирішення цієї проблеми?
Радж Паван Гумдал

1
Arigato gozaimasu Ajinkya sensei. АРІГАТО !!!
TheEYL

6

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

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


Мені хотілося б знати, що я повинен дати в кінцевій точці в службі додати опцію в drupal 7
sridhar

і чи слід писати будь-який користувацький код в drupal, щоб створити вузол з мого додатка php?
sridhar

Послуги вбудовані в ресурси, якими можна користуватися. щодо RestWS та сумісності. Існує порт RestWS до служб, який відхилено підтримкою RestWS. Якщо хтось зацікавлений, він може бути опублікований як окремий модуль.
VoxPelli
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.