วิธีสร้าง test_endpoint


29

ฉันใหม่สำหรับ drupal และฉันใช้โมดูลบริการสำหรับการใช้โมดูล REST และ RESTWS ฉันใช้ RESTWS และสามารถรับเนื้อหาของโหนดได้โดย http: //base_url/node/1.xmlและตอนนี้ฉันต้องเพิ่มโหนดและผู้ใช้จากแอปพลิเคชัน PHP ภายนอกของฉันไปยัง drupal ฉัน googled และฉันพบได้ที่นี่ที่เราจำเป็นต้องใช้http: // base_drupal_url / drupal7 / test_endpoint / ผู้ใช้ ฉันพยายามสร้างบริการจาก Drupal 7 แต่ฉันไม่รู้ว่าฉันควรให้อะไรกับชื่อจุดปลายชื่อและจุดปลายเส้นทางและฉันคิดว่าฉันต้องให้เส้นทางจุดปลายเดียวกันใน curl

ความช่วยเหลือใด ๆ เกี่ยวกับวิธีการตรวจสอบว่าเซิร์ฟเวอร์ส่วนที่เหลือได้รับการติดตั้งและวิธีการสร้างเส้นทางจุดสิ้นสุดจะเป็นประโยชน์อย่างมากหรือไม่

ฉันใช้ Drupal 7 กับ services services services-7.x-3.0-rc3


คุณแก้ปัญหาของคุณหรือไม่ ฉันได้สร้างจุดสิ้นสุดและเส้นทางของทรัพยากรตรงตามที่คุณ แต่ฉันได้รับ "ไม่พบ URL ที่ร้องขอ / ~ DrupalWorkstation / Drupal / drupal_7_16 / ที่พัก / โหนดไม่พบบนเซิร์ฟเวอร์นี้" ความผิดพลาด กรุณาตรวจสอบความคิดเห็นของฉันเพื่อคำตอบโหวตสูงสุด แจ้งให้เราทราบหากคุณมีทางออกสำหรับสิ่งนี้
Raj Pawan Gumdal

คำตอบ:


56

โมดูลบริการนั้นใช้งานง่าย แต่สามารถปรับแต่งได้ยากโดยเฉพาะหากคุณยังใหม่กับแนวคิด ดังนั้นฉันจะโพสต์ภาพหน้าจอเพื่อทำให้การกำหนดค่าโมดูลบริการเป็นเรื่องง่ายสำหรับผู้ใช้ "Drupal Answers"

ต่อไปนี้เป็นเวอร์ชั่นของโมดูลบริการที่ติดตั้งบนเครื่องของฉัน:

ป้อนคำอธิบายรูปภาพที่นี่

สร้าง endpoint ที่ชื่อว่า 'rest' ตามที่แสดงด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

เลือกประเภทของเซิร์ฟเวอร์และพา ธ ปลายทาง:

ป้อนคำอธิบายรูปภาพที่นี่

เลือกรายการทรัพยากรที่คุณต้องการเปิดใช้งานและระบุนามแฝง:

ป้อนคำอธิบายรูปภาพที่นี่

เลือกตัวจัดรูปแบบการตอบสนองและตัวแยกวิเคราะห์คำขอที่คุณต้องการเปิดใช้งาน:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถทดสอบการกำหนดค่าตามที่แสดงด้านล่าง:

ป้อนคำอธิบายรูปภาพที่นี่

คุณสามารถรับรายการโหนดทั้งหมดดังต่อไปนี้:

ป้อนคำอธิบายรูปภาพที่นี่

และโหนดเฉพาะเป็น:

ป้อนคำอธิบายรูปภาพที่นี่

ต่อไปนี้เป็นตัวอย่างสคริปต์ที่ยอดเยี่ยมที่MichaelColeจัดทำไว้ที่นี่http://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

ฉันต้องเขียนข้อมูลโค้ดข้างต้นที่ไหน มันอยู่ในโมดูล / services / server / rest_server / lib หรือไม่?
subhojit777

1
@ subhojit777 โค้ดด้านบนเป็นตัวอย่างโค้ด PHP แบบสแตนด์อโลนที่สามารถใช้เพื่อใช้บริการ api ที่โฮสต์อยู่บนเซิร์ฟเวอร์ภายนอกและคุณสามารถเขียนลงในไฟล์โมดูลของคุณ แต่การเขียนในโมดูล / services / เซิร์ฟเวอร์ / rest_server / lib อาจเป็น ไม่ใช่สถานที่ที่ดีที่สุด
Ajinkya Kulkarni

ฉันมีการตั้งค่าทุกอย่างที่คุณพูดใน localhost ของฉัน ฉันมีเส้นทางไปยังเว็บไซต์ Drupal ของฉันทำงานตาม: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 หน้า index.php ทำงานเมื่อฉันกด URL ด้านบน แต่จุดปลายทางและเส้นทางทรัพยากรที่กำหนดค่าไว้จะไม่ทำงาน URL ของฉันที่จะเรียกการบริการที่เป็น: localhost / ~ DrupalWorkstation / Drupal / drupal_7_16 / ส่วนที่เหลือ / โหนด ฉันได้รับข้อผิดพลาดต่อไปนี้: "ไม่พบ URL / ~ DrupalWorkstation / Drupal / drupal_7_16 / rest / node ที่ร้องขอไม่พบบนเซิร์ฟเวอร์นี้" มีข้อเสนอแนะเกี่ยวกับวิธีแก้ไขปัญหานี้หรือไม่?
Raj Pawan Gumdal

1
Arigato gozaimasu Ajinkya อาจารย์ Arigatō !!!
TheEYL

6

ผมขอแนะนำให้คุณอ่านสร้างทรัพยากรสำหรับบริการ 3.x

นอกจากนี้ฉันยังทราบว่าบริการและ RESTWS เข้ากันได้หรือไม่ พวกเขาทั้งคู่เสนอสิ่งที่เหมือนกันและอาจขัดแย้งกัน


ฉันต้องการที่จะรู้ว่าสิ่งที่ฉันควรจะให้ในเส้นทางปลายทางในบริการเพิ่มตัวเลือกใน drupal 7
sridhar

และฉันควรเขียนโค้ดที่กำหนดเองใน drupal เพื่อสร้างโหนดจากแอปพลิเคชัน php ของฉันหรือไม่
sridhar

บริการมีทรัพยากรในตัวที่สามารถใช้ได้ เกี่ยวกับ RestWS และความเข้ากันได้: มีพอร์ตของ RestWS to Services ที่ถูกปฏิเสธโดยผู้ดูแลระบบ RestWS หากใครสนใจก็สามารถเผยแพร่เป็นโมดูลแยกต่างหากได้
VoxPelli
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.