¿Cómo crear test_endpoint?

29

Soy nuevo en drupal y estoy usando el módulo de servicios para usar el módulo REST y RESTWS. Utilicé RESTWS y pude obtener el contenido del nodo en http: //base_url/node/1.xml y ahora necesito agregar un nodo y usuarios de mi aplicación PHP externa a drupal. Busqué en Google y descubrí que necesitamos usar http: // base_drupal_url / drupal7 / test_endpoint / users . Traté de crear un servicio desde Drupal 7, pero no sé qué debo dar en el título del punto final, el nombre y la ruta del punto final y supongo que necesito dar la misma ruta del punto final en el rizo.

Cualquier ayuda sobre cómo verificar si el servidor de descanso está instalado y cómo crear una ruta de punto final sería de gran ayuda.

Estoy usando Drupal 7 con el módulo de servicios services-7.x-3.0-rc3

sridhar
fuente
¿Resolviste tu problema? He creado un punto final y una ruta de recursos exactamente como usted, pero aparece "No se encontró la URL solicitada / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node no se encontró en este servidor". error. Por favor revise mi comentario a la respuesta más votada. Avísame si tienes una solución para esto.
Raj Pawan Gumdal

Respuestas:

56

El módulo de servicios es fácil de usar, pero puede ser difícil de configurar, especialmente si eres nuevo en el concepto. Por lo tanto, voy a publicar las capturas de pantalla para facilitar la configuración de los módulos de Servicios para los usuarios de "Respuestas Drupal".

La siguiente es la versión del módulo de Servicios instalado en mi máquina:

ingrese la descripción de la imagen aquí

Cree un punto final llamado 'descanso' como se muestra a continuación:

ingrese la descripción de la imagen aquí

Seleccione el tipo de servidor y la ruta del punto final:

ingrese la descripción de la imagen aquí

Seleccione la lista de recursos que desea habilitar y especifique alias:

ingrese la descripción de la imagen aquí

Seleccione los formateadores de respuesta y los analizadores de solicitud que desea habilitar:

ingrese la descripción de la imagen aquí

Puede probar su configuración como se muestra a continuación:

ingrese la descripción de la imagen aquí

Puede obtener la lista de todos los nodos de la siguiente manera:

ingrese la descripción de la imagen aquí

Y nodo específico como:

ingrese la descripción de la imagen aquí

Los siguientes son los excelentes scripts de ejemplos proporcionados por MichaelCole aquí http://drupal.org/node/910598#comment-4677738 para crear nodos desde cualquier aplicación PHP externa.

Estoy duplicando su código para completar esta respuesta.

//--------------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
fuente
2
Vale la pena señalar que habilitó todas las opciones de análisis de solicitudes. Perdí mucho tiempo antes de darme cuenta de que "application / x-www-form-urlencoded" está deshabilitado de forma predeterminada.
Drawish
¿Dónde tengo que escribir el fragmento de código anterior? ¿Está dentro de los módulos / servicios / servidor / rest_server / lib?
subhojit777
1
@ subhojit777 el código anterior es un fragmento de código PHP independiente que se puede usar para consumir servicios api alojados en un servidor externo, y puede escribirlo en su archivo de módulo, pero escribirlo en módulos / services / server / rest_server / lib es probablemente No es el mejor lugar.
Ajinkya Kulkarni
He configurado todo como dijiste en mi localhost. Tengo una ruta a mi sitio de drupal que se ejecuta como: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . La página index.php se está ejecutando cuando llego a la URL anterior, pero mi punto final configurado y la ruta de recursos no funcionarían. Mi URL para activar el servicio es: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Aparece el siguiente error: "No se encontró La URL solicitada / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node no se encontró en este servidor". ¿Alguna sugerencia sobre cómo solucionar este problema?
Raj Pawan Gumdal
1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL
6

Le sugiero que lea Creación de un recurso para Servicios 3.x .

Además, estoy seguro si los servicios y RESTWS son compatibles; Ambos ofrecen variaciones de la misma cosa y, como tales, pueden entrar en conflicto.

Blake Senftner
fuente
Me gustaría saber qué debo dar en la ruta del punto final en la opción de agregar servicio en drupal 7
sridhar
¿y debo escribir algún código personalizado en drupal para crear un nodo desde mi aplicación php?
sridhar
Los servicios han incorporado recursos que pueden usarse. con respecto a RestWS y compatibilidad: hay un puerto de RestWS a Servicios que fue rechazado por los encargados de RestWS. Sin embargo, si alguien está interesado, podría publicarse como un módulo separado.
VoxPelli