Comment créer test_endpoint?

29

Je suis nouveau sur drupal et j'utilise le module de services pour utiliser REST et le module RESTWS. J'ai utilisé RESTWS et j'ai pu obtenir le contenu du nœud par http: //base_url/node/1.xml et maintenant je dois ajouter un nœud et des utilisateurs de mon application PHP externe à Drupal. J'ai googlé et j'ai trouvé ici que nous devons utiliser http: // base_drupal_url / drupal7 / test_endpoint / users . J'ai essayé de créer un service à partir de Drupal 7, mais je ne sais pas quoi donner sur le titre, le nom et le chemin du point de terminaison et je suppose que je dois donner le même chemin de point de terminaison dans la boucle.

Toute aide sur la façon de vérifier si le serveur de repos est installé et sur la façon de créer le chemin du point de terminaison serait d'une grande aide.

J'utilise Drupal 7 avec le module de services services-7.x-3.0-rc3

sridhar
la source
Avez-vous résolu votre problème? J'ai créé un point de terminaison et un chemin de ressource exactement comme vous, mais j'obtiens "Introuvable L'URL demandée / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node est introuvable sur ce serveur." Erreur. Veuillez vérifier mon commentaire à la réponse la plus élevée. Faites-moi savoir si vous avez une solution pour cela.
Raj Pawan Gumdal

Réponses:

56

Le module de services est facile à utiliser, mais il peut être difficile à configurer, surtout si vous êtes nouveau dans le concept. Je vais donc publier les captures d'écran pour rendre la configuration des modules Services facile pour les utilisateurs de "Drupal Answers".

Voici la version du module Services installée sur ma machine:

entrez la description de l'image ici

Créez un point de terminaison appelé «repos» comme indiqué ci-dessous:

entrez la description de l'image ici

Sélectionnez le type de serveur et le chemin du point de terminaison:

entrez la description de l'image ici

Sélectionnez la liste des ressources que vous souhaitez activer et spécifiez des alias:

entrez la description de l'image ici

Sélectionnez les formateurs de réponse et les analyseurs de requête que vous souhaitez activer:

entrez la description de l'image ici

Vous pouvez tester votre configuration comme indiqué ci-dessous:

entrez la description de l'image ici

Vous pouvez obtenir la liste de tous les nœuds comme ci-dessous:

entrez la description de l'image ici

Et un nœud spécifique comme:

entrez la description de l'image ici

Voici les excellents exemples de scripts fournis par MichaelCole ici http://drupal.org/node/910598#comment-4677738 pour créer des nœuds à partir de n'importe quelle application PHP externe.

Je reproduis son code pour l'exhaustivité de cette réponse.

//--------------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
la source
2
Il vaut donc la peine de souligner qu'il a activé chaque option d'analyse de demande. J'ai perdu beaucoup de temps avant de réaliser que "application / x-www-form-urlencoded" est désactivé par défaut.
drewish
où dois-je écrire l'extrait de code ci-dessus? Est-ce à l'intérieur des modules / services / server / rest_server / lib?
subhojit777
1
@ subhojit777 ci-dessus est un extrait de code PHP autonome qui peut être utilisé pour consommer des services api hébergés sur un serveur externe, et vous pouvez l'écrire dans votre fichier de module, mais l'écrire dans modules / services / server / rest_server / lib est probablement pas le meilleur endroit.
Ajinkya Kulkarni
J'ai tout configuré comme vous l'avez dit sur mon hôte local. J'ai un chemin vers mon site drupal fonctionnant comme: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . La page index.php est en cours d'exécution lorsque j'atteins l'URL ci-dessus, mais mon point de terminaison et mon chemin de ressources configurés ne fonctionneraient pas. Mon URL pour déclencher le service est: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . J'obtiens l'erreur suivante: "Introuvable L'URL demandée / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node est introuvable sur ce serveur." Des suggestions sur la façon de résoudre ce problème?
Raj Pawan Gumdal
1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL
6

Je vous suggère de lire Création d' une ressource pour 3.x services .

De plus, je suis sûr que les services et RESTWS sont compatibles; ils offrent tous deux des variantes de la même chose, et en tant que tels peuvent entrer en conflit.

Blake Senftner
la source
Je voudrais savoir ce que dois-je donner dans le chemin du point de terminaison dans l'option d'ajout de service dans drupal 7
sridhar
et dois-je écrire du code personnalisé dans drupal pour créer un nœud à partir de mon application php?
sridhar
Les services ont intégré des ressources qui peuvent être utilisées. concernant RestWS et la compatibilité: il existe un port de RestWS vers les services qui a été rejeté par les mainteneurs de RestWS. Si quelqu'un est intéressé, il pourrait être publié sous forme de module séparé.
VoxPelli