Come creare test_endpoint?


29

Sono nuovo di Drupal e sto usando il modulo servizi per l'utilizzo del modulo REST e RESTWS. Ho usato RESTWS e ho potuto ottenere il contenuto del nodo tramite http: //base_url/node/1.xml e ora ho bisogno di aggiungere un nodo e gli utenti della mia applicazione PHP esterna a drupal. Ho cercato su Google e ho scoperto qui che dobbiamo usare http: // base_drupal_url / drupal7 / test_endpoint / users . Ho provato a creare un servizio da Drupal 7, ma non so cosa dovrei dare sul titolo dell'endpoint, nome e percorso dell'endpoint e presumo che debba dare lo stesso percorso dell'endpoint nel ricciolo.

Qualsiasi aiuto su come verificare se il server di riposo è installato e su come creare il percorso dell'endpoint sarebbe di grande aiuto.

Sto usando Drupal 7 con il modulo servizi services-7.x-3.0-rc3


Hai risolto il tuo problema? Ho creato un endpoint e un percorso delle risorse esattamente come te ma sto ottenendo "Non trovato L'URL richiesto / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node non è stato trovato su questo server." errore. Si prega di controllare il mio commento alla risposta più votata. Fammi sapere se hai una soluzione per questo.
Raj Pawan Gumdal,

Risposte:


56

Il modulo Servizi è facile da usare, ma può essere complicato da configurare soprattutto se non si ha familiarità con il concetto. Quindi, pubblicherò le schermate per semplificare la configurazione dei moduli dei servizi per gli utenti di "Drupal Answers".

Di seguito è la versione del modulo Servizi installato sul mio computer:

inserisci qui la descrizione dell'immagine

Crea un endpoint chiamato 'resto' come mostrato di seguito:

inserisci qui la descrizione dell'immagine

Seleziona il tipo di server e il percorso dell'endpoint:

inserisci qui la descrizione dell'immagine

Seleziona l'elenco delle risorse che desideri abilitare e specifica gli alias:

inserisci qui la descrizione dell'immagine

Seleziona i formatter di risposta e richiedi i parser che vuoi abilitare:

inserisci qui la descrizione dell'immagine

Puoi testare la tua configurazione come mostrato di seguito:

inserisci qui la descrizione dell'immagine

È possibile ottenere l'elenco di tutti i nodi come di seguito:

inserisci qui la descrizione dell'immagine

E nodo specifico come:

inserisci qui la descrizione dell'immagine

Di seguito sono riportati gli eccellenti esempi di script forniti da MichaelCole qui http://drupal.org/node/910598#comment-4677738 per creare nodi da qualsiasi applicazione PHP esterna.

Sto duplicando il suo codice per completezza di questa risposta.

//--------------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
Vale la pena sottolineare che ha abilitato ogni opzione di analisi delle richieste. Ho perso molto tempo prima di rendermi conto che "application / x-www-form-urlencoded" è disabilitato di default.
Drewish

dove devo scrivere lo snippet di codice sopra? È all'interno di moduli / servizi / server / rest_server / lib?
subhojit777,

1
@ subhojit777 sopra il codice è uno snippet di codice PHP autonomo che può essere utilizzato per consumare servizi api ospitati su un server esterno e puoi scriverlo nel tuo file di modulo, ma è probabile che scriverlo in moduli / servizi / server / rest_server / lib non è il posto migliore.
Ajinkya Kulkarni,

Ho installato tutto come hai detto sul mio localhost. Ho un percorso per il mio sito drupal che funziona come: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . La pagina index.php è in esecuzione quando ho colpito sopra l'URL, ma il mio endpoint configurato e il percorso della risorsa non funzionavano. Il mio URL per attivare il servizio è: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Viene visualizzato il seguente errore: "Not Found L'URL richiesto / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node non è stato trovato su questo server." Qualche suggerimento su come risolvere questo problema?
Raj Pawan Gumdal,

1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL

6

Vi suggerisco di leggere Creazione di una risorsa per i servizi 3.x .

Inoltre, sono sicuro che i servizi e RESTWS sono compatibili; entrambi offrono variazioni della stessa cosa e come tali possono essere in conflitto.


Vorrei sapere cosa devo dare nel percorso dell'endpoint nell'opzione di aggiunta del servizio in drupal 7
sridhar

e dovrei scrivere un codice personalizzato in drupal per creare un nodo dalla mia applicazione php?
Sridhar,

I servizi hanno risorse integrate che possono essere utilizzate. per quanto riguarda RestWS e compatibilità: esiste una porta di RestWS ai servizi che è stata rifiutata dai manutentori di RestWS. Se qualcuno è interessato, potrebbe essere pubblicato come modulo separato.
VoxPelli,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.