Wie erstelle ich test_endpoint?

29

Ich bin neu in Drupal und verwende das Servicemodul für die Verwendung von REST- und RESTWS-Modulen. Ich habe RESTWS verwendet und konnte den Inhalt des Knotens über http: //base_url/node/1.xml abrufen. Jetzt muss ich einen Knoten und Benutzer aus meiner externen PHP-Anwendung zu Drupal hinzufügen. Ich habe gegoogelt und hier festgestellt, dass wir http: // base_drupal_url / drupal7 / test_endpoint / users verwenden müssen . Ich habe versucht, einen Dienst aus Drupal 7 zu erstellen, aber ich weiß nicht, was ich für den Endpunkttitel, den Namen und den Endpunktpfad angeben soll, und ich gehe davon aus, dass ich im Curl denselben Endpunktpfad angeben muss.

Jede Hilfe, um zu überprüfen, ob der Restserver installiert ist und wie der Endpunktpfad erstellt wird, ist sehr hilfreich.

Ich benutze Drupal 7 mit dem Servicemodul services-7.x-3.0-rc3

sridhar
quelle
Hast du dein Problem gelöst? Ich habe genau wie Sie einen Endpunkt und einen Ressourcenpfad erstellt, erhalte jedoch die Meldung "Nicht gefunden Die angeforderte URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node wurde auf diesem Server nicht gefunden." Error. Bitte überprüfen Sie meinen Kommentar zu der am höchsten bewerteten Antwort. Lassen Sie mich wissen, ob Sie eine Lösung dafür haben.
Raj Pawan Gumdal

Antworten:

56

Das Servicemodul ist einfach zu verwenden, es kann jedoch schwierig zu konfigurieren sein, insbesondere wenn Sie mit dem Konzept noch nicht vertraut sind. Daher werde ich die Screenshots veröffentlichen, um die Konfiguration der Services-Module für Benutzer von "Drupal Answers" zu vereinfachen.

Im Folgenden ist die Version des Services-Moduls aufgeführt, die auf meinem Computer installiert ist:

Bildbeschreibung hier eingeben

Erstellen Sie einen Endpunkt mit dem Namen "rest" (siehe unten):

Bildbeschreibung hier eingeben

Wählen Sie den Servertyp und den Endpunktpfad aus:

Bildbeschreibung hier eingeben

Wählen Sie die Liste der Ressourcen aus, die Sie aktivieren möchten, und geben Sie Aliase an:

Bildbeschreibung hier eingeben

Wählen Sie die Antwortformatierer und Anforderungsparser aus, die Sie aktivieren möchten:

Bildbeschreibung hier eingeben

Sie können Ihre Konfiguration wie folgt testen:

Bildbeschreibung hier eingeben

Sie können die Liste aller Knoten wie folgt abrufen:

Bildbeschreibung hier eingeben

Und spezifischer Knoten als:

Bildbeschreibung hier eingeben

Im Folgenden finden Sie die hervorragenden Beispielskripte, die MichaelCole hier zur Verfügung stellt: http://drupal.org/node/910598#comment-4677738 , um Knoten aus einer externen PHP-Anwendung zu erstellen.

Ich dupliziere seinen Code für die Vollständigkeit dieser Antwort.

//--------------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
quelle
2
Es lohnt sich also darauf hinzuweisen, dass er jede Analyseoption für Anfragen aktiviert hat . Ich habe viel Zeit verschwendet, bis mir klar wurde, dass "application / x-www-form-urlencoded" standardmäßig deaktiviert ist.
zog
Wo muss ich das obige Code-Snippet schreiben? Befindet es sich in modules / services / server / rest_server / lib?
subhojit777
1
@ subhojit777 Der obige Code ist ein eigenständiges PHP-Code-Snippet, mit dem auf einem externen Server gehostete Dienste-API verwendet werden können. Sie können es in Ihre Moduldatei schreiben, wahrscheinlich jedoch in modules / services / server / rest_server / lib nicht der beste Ort.
Ajinkya Kulkarni
Ich habe alles eingerichtet, wie Sie auf meinem localhost sagten. Ich habe einen Pfad zu meiner Drupal-Site, der wie folgt ausgeführt wird: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . Die Seite index.php wird ausgeführt, wenn ich die oben angegebene URL getroffen habe, aber mein konfigurierter Endpunkt und Ressourcenpfad funktionieren nicht. Meine URL zum Auslösen des Dienstes lautet: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Ich erhalte die folgende Fehlermeldung: "Nicht gefunden Die angeforderte URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node wurde auf diesem Server nicht gefunden." Irgendwelche Vorschläge zur Behebung dieses Problems?
Raj Pawan Gumdal
1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL
6

Ich schlage vor , Sie lesen eine Ressource für Dienstleistungen 3.x anlegen .

Ich bin mir auch sicher, ob Services und RESTWS kompatibel sind. Beide bieten Variationen derselben Sache an und können als solche Konflikte verursachen.

Blake Senftner
quelle
Ich würde gerne wissen, was ich im Endpunktpfad in der Service-Add-Option in Drupal 7
Sridhar
und sollte ich einen benutzerdefinierten Code in Drupal schreiben, um einen Knoten aus meiner PHP-Anwendung zu erstellen?
sridhar
Services haben Ressourcen eingebaut, die verwendet werden können. in Bezug auf RestWS und Kompatibilität: Es gibt einen Port von RestWS zu Services, der von den RestWS-Betreuern abgelehnt wurde. Wenn jemand interessiert ist, könnte es jedoch als separates Modul veröffentlicht werden.
VoxPelli