Jak utworzyć test_endpoint?

29

Jestem nowym użytkownikiem drupala i używam modułu usług do używania REST i modułu RESTWS. Użyłem RESTWS i mogłem pobrać zawartość węzła przez http: //base_url/node/1.xml i teraz muszę dodać węzeł i użytkowników z mojej zewnętrznej aplikacji PHP do drupala. Poszukałem google i znalazłem tutaj, że musimy użyć http: // base_drupal_url / drupal7 / test_endpoint / users . Próbowałem utworzyć usługę z Drupal 7, ale nie wiem, co powinienem podać w tytule punktu końcowego, nazwie i ścieżce punktu końcowego i zakładam, że muszę podać tę samą ścieżkę punktu końcowego w zawinięciu.

Bardzo pomocna byłaby jak sprawdzić, czy serwer odpoczynku jest zainstalowany i jak utworzyć ścieżkę punktu końcowego.

Używam Drupal 7 z modułem usług services-7.x-3.0-rc3

śridhar
źródło
Czy rozwiązałeś swój problem? Utworzyłem punkt końcowy i ścieżkę zasobu dokładnie tak, jak Ty, ale otrzymuję komunikat „Nie znaleziono żądanego adresu URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node nie został znaleziony na tym serwerze”. błąd. Proszę sprawdzić mój komentarz do najlepiej głosowanej odpowiedzi. Daj mi znać, jeśli masz na to rozwiązanie.
Raj Pawan Gumdal

Odpowiedzi:

56

Moduł usług jest łatwy w użyciu, ale jego konfiguracja może być trudna, szczególnie jeśli dopiero zaczynasz korzystać z tej koncepcji. Zamierzam opublikować zrzuty ekranu, aby ułatwić konfigurację modułów usług użytkownikom „Drupal Answers”.

Poniżej znajduje się wersja modułu usług zainstalowanego na moim komputerze:

wprowadź opis zdjęcia tutaj

Utwórz punkt końcowy o nazwie „odpoczynek”, jak pokazano poniżej:

wprowadź opis zdjęcia tutaj

Wybierz typ serwera i ścieżkę punktu końcowego:

wprowadź opis zdjęcia tutaj

Wybierz listę zasobów, które chcesz włączyć, i określ aliasy:

wprowadź opis zdjęcia tutaj

Wybierz formatatory odpowiedzi i analizatory składni żądań, które chcesz włączyć:

wprowadź opis zdjęcia tutaj

Możesz przetestować swoją konfigurację, jak pokazano poniżej:

wprowadź opis zdjęcia tutaj

Możesz uzyskać listę wszystkich węzłów, jak poniżej:

wprowadź opis zdjęcia tutaj

I konkretny węzeł jako:

wprowadź opis zdjęcia tutaj

Poniżej znajdują się doskonałe przykłady skryptów dostarczonych przez MichaelCole tutaj http://drupal.org/node/910598#comment-4677738 do tworzenia węzłów z dowolnej zewnętrznej aplikacji PHP.

Powielam jego kod, aby uzyskać kompletność tej odpowiedzi.

//--------------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
źródło
2
Warto więc zaznaczyć, że włączył każdą opcję analizowania żądań. Zmarnowałem dużo czasu, zanim zdałem sobie sprawę, że „application / x-www-form-urlencoded” jest domyślnie wyłączony.
narysowany
gdzie muszę napisać powyższy fragment kodu? Czy jest w modułach / usługach / serwerze / rest_server / lib?
subhojit777
1
@ subhojit777 powyższy kod jest samodzielnym fragmentem kodu PHP, którego można użyć do korzystania z usług interfejsu API hostowanych na serwerze zewnętrznym i można go zapisać w pliku modułu, ale prawdopodobnie zapisanie go w module / services / server / rest_server / lib jest prawdopodobnie nie najlepsze miejsce.
Ajinkya Kulkarni
Mam wszystko skonfigurowane tak, jak powiedziałeś na moim localhost. Mam ścieżkę do mojej strony drupal działającej jako: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . Strona index.php działa, gdy trafię powyżej adresu URL, ale mój skonfigurowany punkt końcowy i ścieżka zasobów nie działają. Mój adres URL do uruchomienia usługi to: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Pojawia się następujący błąd: „Nie znaleziono żądanego adresu URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node nie znaleziono na tym serwerze.” Wszelkie sugestie dotyczące rozwiązania tego problemu?
Raj Pawan Gumdal
1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL,
6

Proponuję przeczytać Tworzenie zasobów dla usług 3.x .

Jestem też pewien, że Usługi i RESTWS są kompatybilne; oba oferują odmiany tej samej rzeczy i jako takie mogą powodować konflikty.

Blake Senftner
źródło
Chciałbym wiedzieć, co powinienem podać w ścieżce punktu końcowego w usłudze dodaj opcję w drupal 7
sridhar
i czy powinienem napisać niestandardowy kod w Drupal, aby utworzyć węzeł z mojej aplikacji php?
śridhar
Usługi mają wbudowane zasoby, z których można korzystać. w odniesieniu do RestWS i kompatybilności: istnieje port RestWS do usług, który został odrzucony przez opiekunów RestWS. Jeśli ktoś jest zainteresowany, może zostać opublikowany jako osobny moduł.
VoxPelli,