Como criar test_endpoint?

29

Eu sou novo no drupal e estou usando o módulo de serviços para usar o módulo REST e RESTWS. Usei o RESTWS e pude obter o conteúdo do nó em http: //base_url/node/1.xml e agora preciso adicionar um nó e usuários do meu aplicativo PHP externo ao drupal. Pesquisei no Google e descobri aqui que precisamos usar http: // base_drupal_url / drupal7 / test_endpoint / users . Tentei criar um serviço a partir do Drupal 7, mas não sei o que devo fornecer no título, no nome e no caminho do nó de extremidade, e presumo que preciso fornecer o mesmo caminho no cacho.

Qualquer ajuda sobre como verificar se o servidor de descanso está instalado e como criar o caminho do terminal seria de grande ajuda.

Estou usando o Drupal 7 com o módulo de serviços services-7.x-3.0-rc3

sridhar
fonte
Você resolveu o seu problema? Eu criei um terminal e um caminho de recurso exatamente como você, mas estou recebendo "Não encontrado. O URL solicitado / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node não foi encontrado neste servidor." erro. Por favor, verifique meu comentário para a resposta mais votada. Deixe-me saber se você tem uma solução para isso.
Raj Pawan Gumdal 30/10/12

Respostas:

56

O módulo de serviços é fácil de usar, mas pode ser complicado de configurar, especialmente se você é novo no conceito. Então, vou postar as capturas de tela para facilitar a configuração dos módulos de serviços para os usuários do "Drupal Answers".

A seguir está a versão do módulo Serviços instalado na minha máquina:

insira a descrição da imagem aqui

Crie um terminal chamado 'rest' como mostrado abaixo:

insira a descrição da imagem aqui

Selecione o tipo de servidor e o caminho do nó de extremidade:

insira a descrição da imagem aqui

Selecione a lista de recursos que você deseja ativar e especifique aliases:

insira a descrição da imagem aqui

Selecione os formatadores de resposta e solicite os analisadores que deseja ativar:

insira a descrição da imagem aqui

Você pode testar sua configuração como mostrado abaixo:

insira a descrição da imagem aqui

Você pode obter a lista de todos os nós como abaixo:

insira a descrição da imagem aqui

E nó específico como:

insira a descrição da imagem aqui

A seguir, estão os excelentes exemplos de scripts fornecidos por MichaelCole aqui http://drupal.org/node/910598#comment-4677738 para criar nós a partir de qualquer aplicativo PHP externo.

Estou duplicando o código dele para garantir a integralidade desta resposta.

//--------------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
fonte
2
Vale ressaltar que ele ativou todas as opções de análise de solicitação. Perdi muito tempo antes de perceber que "application / x-www-form-urlencoded" está desativado por padrão.
drewish
onde eu tenho que escrever o trecho de código acima? Está dentro dos módulos / services / server / rest_server / lib?
Subhojit777
1
@ subhojit777 acima do código é um trecho de código PHP independente que pode ser usado para consumir serviços da API hospedada em um servidor externo, e você pode escrevê-lo no arquivo de módulo, mas gravá-lo em modules / services / server / rest_server / lib provavelmente não é o melhor lugar.
Ajinkya Kulkarni
Eu configurei tudo como você disse no meu host local. Eu tenho um caminho para o meu site drupal executando como: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 . A página index.php está em execução quando eu clico acima da URL, mas meu nó de extremidade configurado e o caminho do recurso não funcionariam. Minha URL para acionar o serviço é: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node . Eu recebo o seguinte erro: "Não encontrado O URL solicitado / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node não foi encontrado neste servidor." Alguma sugestão de como resolver esse problema?
Raj Pawan Gumdal 30/10/12
1
Arigato gozaimasu Ajinkya sensei. ARIGATO !!!
TheEYL
6

Eu sugiro que você leia Criando um recurso para 3.x Serviços .

Além disso, tenho certeza de que os Serviços e o RESTWS são compatíveis; ambos oferecem variações da mesma coisa e, como tal, podem entrar em conflito.

Blake Senftner
fonte
Eu gostaria de saber o que devo dar no caminho ponto final na opção de serviço add no Drupal 7
sridhar
e devo escrever qualquer código personalizado no drupal para criar um nó do meu aplicativo php?
sridhar
Os serviços incorporaram recursos que podem ser usados. sobre o RestWS e a compatibilidade: há uma porta do RestWS para serviços que foi rejeitada pelos mantenedores do RestWS. Se alguém estiver interessado, ele poderá ser publicado como um módulo separado.
VoxPelli