test_endpoint를 만드는 방법?


29

drupal을 처음 사용하고 REST 및 RESTWS 모듈을 사용하기 위해 서비스 모듈을 사용하고 있습니다. RESTWS를 사용했으며 http : //base_url/node/1.xml로 노드의 내용을 가져올 수 있었고 이제 외부 PHP 응용 프로그램의 노드와 사용자를 드루팔에 추가해야합니다. 나는 구글 검색을 통해 http : // base_drupal_url / drupal7 / test_endpoint / users 를 사용해야한다는 것을 발견했다 . Drupal 7에서 서비스를 만들려고했지만 끝점 제목, 이름 및 끝점 경로에 무엇을 제공 해야하는지 모르겠으며 컬에서 동일한 끝점 경로를 제공해야한다고 가정합니다.

나머지 서버가 설치되어 있는지 확인하는 방법과 끝점 경로를 만드는 방법에 대한 도움이 될 것입니다.

서비스 모듈 services-7.x-3.0-rc3과 함께 Drupal 7을 사용하고 있습니다


문제를 해결 했습니까? 엔드 포인트와 리소스 경로를 정확하게 생성했지만 "찾을 수 없음 요청한 URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node를이 서버에서 찾을 수 없습니다."라는 메시지가 나타납니다. 오류. 가장 많이 투표 된 답변에 대한 의견을 확인하십시오. 이에 대한 해결책이 있으면 알려주세요.
Raj Pawan Gumdal

답변:


56

서비스 모듈은 사용하기 쉽지만 개념에 익숙하지 않은 경우 특히 구성하기가 까다로울 수 있습니다. 따라서 "Drupal Answers"사용자가 서비스 모듈을 쉽게 구성 할 수 있도록 스크린 샷을 게시하겠습니다.

다음은 내 컴퓨터에 설치된 서비스 모듈 버전입니다.

여기에 이미지 설명을 입력하십시오

아래와 같이 'rest'라는 엔드 포인트를 작성하십시오.

여기에 이미지 설명을 입력하십시오

서버 및 엔드 포인트 경로 유형을 선택하십시오.

여기에 이미지 설명을 입력하십시오

사용하려는 자원 목록을 선택하고 별명을 지정하십시오.

여기에 이미지 설명을 입력하십시오

사용하려는 응답 포맷터 및 요청 구문 분석기를 선택하십시오.

여기에 이미지 설명을 입력하십시오

아래와 같이 구성을 테스트 할 수 있습니다.

여기에 이미지 설명을 입력하십시오

다음과 같이 모든 노드 목록을 얻을 수 있습니다.

여기에 이미지 설명을 입력하십시오

특정 노드는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

다음은 MichaelColehttp://drupal.org/node/910598#comment-4677738 에서 제공하는 훌륭한 예제 스크립트로 외부 PHP 응용 프로그램에서 노드를 만듭니다.

이 답변의 완성을 위해 그의 코드를 복제하고 있습니다.

//--------------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
그래서 그는 모든 요청 파싱 옵션 을 사용하도록 설정했습니다 . "application / x-www-form-urlencoded"가 기본적으로 비활성화되어 있음을 깨닫기까지 많은 시간을 낭비했습니다.
drewish

위의 코드 스 니펫을 어디에 작성해야합니까? 모듈 / 서비스 / 서버 / rest_server / lib 안에 있습니까?
subhojit777

1
위의 코드 @ subhojit777은 외부 서버에서 호스팅되는 서비스 API를 소비하는 데 사용할 수있는 독립형 PHP 코드 스 니펫이며 모듈 파일로 작성할 수는 있지만 modules / services / server / rest_server / lib에 쓰는 것은 아마도 최고의 장소가 아닙니다.
Ajinkya Kulkarni

내 로컬 호스트에서 말한대로 모든 것을 설정했습니다. localhost / ~ DrupalWorkstation / Drupal / drupal_7_16으로 실행되는 드루팔 사이트 경로가 있습니다. URL을 초과하면 index.php 페이지가 실행되고 있지만 구성된 엔드 포인트 및 리소스 경로가 작동하지 않습니다. 서비스를 시작하는 URL은 localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node 입니다. 다음 오류가 발생합니다. "요청한 URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node를이 서버에서 찾을 수 없습니다." 이 문제를 해결하는 방법에 대한 제안 사항이 있습니까?
Raj Pawan Gumdal

1
아진 캬 선생님 아리 가토 고자 이마스. 아리 가토 !!!
TheEYL

6

Services 3.x에 대한 자원 작성 을 읽으십시오 .

또한 서비스와 RESTWS가 호환되는지 확인합니다. 둘 다 같은 것을 변형 시켜서 충돌 할 수 있습니다.


drupal 7
sridhar

내 PHP 응용 프로그램에서 노드를 만들려면 drupal에 사용자 정의 코드를 작성해야합니까?
sridhar

서비스에는 사용할 수있는 리소스가 내장되어 있습니다. RestWS 및 호환성 관련 : RestWS 관리자에 의해 거부 된 서비스에 대한 RestWS 포트가 있습니다. 관심이 있다면 누구나 별도의 모듈로 게시 할 수 있습니다.
VoxPelli
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.