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


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);

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.