เหตุใดบริการ Drupal RESTful API นี้จึงไม่ทำงาน


8

ฉันใช้โมดูลบริการใน Drupal 7 ฉันต้องการใช้บริการที่อนุญาตให้ฉันส่งข้อความค้นหาผ่าน AJAX และรับอาร์เรย์ที่มีโหนด 5 อันดับแรก (โหนดidและtitle) ที่ตรงกับชื่ออย่างหลวม ๆ เมื่อเชื่อมต่อกับhttp://example.com/api/ฉันได้รับข้อความนี้

"การค้นหา" จุดสิ้นสุดบริการได้รับการติดตั้งเรียบร้อยแล้ว

แต่เมื่อพยายามนำทางไปยังสิ่งที่ต้องการhttp://example.com/api/search/Testฉันจะได้รับ 404


1
ฉันขอแนะนำให้ตรวจสอบRESTwsซึ่งจะเป็นส่วนหนึ่งของ D8 core
kqw

สำหรับผู้อ่านในอนาคตให้พิจารณาใช้คำขอ HTTP POST กับ GET เพื่อดึงข้อมูลจากจุดปลาย ปลายทางของบริการจำนวนมากต้องการการร้องขอ POST
David Thomas

คำตอบ:


1

หลังจากลองแล้วลองเมื่ออ่านจากบทช่วยสอนอื่น ๆ ฉันสร้างทรัพยากรที่มีส่วนที่เหลือ soap สำหรับฉันเป็นสิ่งที่ไม่สามารถทำได้ใน drupal ฉันพยายาม แต่ไม่ประสบความสำเร็จคุณสามารถคัดลอกและหน้ารหัสนี้และแก้ไขเฉพาะชื่อโมดูลและตะขอ

/**
 * Implements hook_ctools_plugin_api().
 */
function core_custom_webservice_ctools_plugin_api($owner, $api) {
  if ($owner == 'services' && $api == 'services') {
    return array(
      'version' => 3,
      'file' => 'core_custom_webservice.services.inc'
    );
  }
}


function core_custom_webservice_services_resources() {
  $resources = array(
    'webservice_resources' => array(
      'operations' => array(
        'retrieve' => array(
          'help' => t('Response of webservice'),
          'file' => array('type' => 'inc', 'module' => 'core_custom_webservice', 'name' => 'core_custom_webservice.resource',),
          'callback' => '_core_custom_webservice_get_response',
          'access callback' => '_core_custom_webservice_access',
          'access arguments' => array('view'),
          'access arguments append' => TRUE,
          'args' => array(
            array(
              'name' => 'parameters',
              'type' => 'string',
              'description' => 'The parameters that define requested data',
              'source' => array('path' => '0'), // first argument in the url 
              'optional' => FALSE,
            ),
          ),
        ),
      ),
    ),
  );
  return $resources;
}

/* * *************************************************************************************************
 * Access callback 
 * For now only view/retrieve is implemented and if the user is logged in, he gets access
 */

function _core_custom_webservice_access($op) {
  global $user;
  $access = TRUE;

  switch ($op) {
    case 'view':
      if ($user->uid) {
        $access = TRUE;
      }
      break;
  }

  return $access;
}

function _core_custom_webservice_get_response($arg) {
  $response = 'something';
  return 'print '.$response;
}

ลองอีกครั้งในเส้นทางบริการและความสำเร็จของคุณด้วย http: //path.come/? q = webservice_server_rest / webservice_resources / string.json


0

หากคุณสร้าง RESTful Resource ด้วยโมดูล Services ฉันเชื่อว่ามันจะคาดหวังว่าจะตอบสนองต่อคำขอ HTTP ในรูปแบบ JSON ดังนั้นคุณสามารถลองใช้การนำทางไปยัง http://example.com/api/search/Test.json


0

พยายามที่จะใช้โมดูลนี้https://www.drupal.org/project/services_views ขณะนี้มีสองคุณสมบัติ: - สร้างการสร้างทรัพยากรตามมุมมองการแสดงผลบริการในมุมมอง - ดำเนินการมุมมองใด ๆ ของระบบผ่านการเรียกทรัพยากรมุมมอง


0

โดยทั่วไปแล้ว 404 ไม่พบข้อผิดพลาด

  1. ตรวจสอบให้แน่ใจว่าจุดสิ้นสุดการบริการของคุณคือ

    http://example.com/api/search/ {search-term}

  2. เนื้อหาการตอบสนองที่จะส่งในรูปแบบที่ถูกต้องคืออะไร

3. ส่วนหัวของเนื้อหาถูกตั้งค่าเป็น application / json และชื่อ Content-Type


0

สวัสดีสิ่งแรกที่คุณต้องทำคือ

ขั้นตอนที่ 1: สร้างโมดูลที่กำหนดเองและนำไปใช้ hook_services_resources()

ตัวอย่าง:

function mymodule_services_resources() {
  return array(
    'search' => array(
      'create' => array(
        'help' => 'Search for a content',
        'file' => array('file' => 'inc', 'module' => 'your module name'),
        'callback' => '_function_to_call_when_this_service_is_called',
        'access callback' => 'user_access',
        'access arguments' => array('access content'),
        'access arguments append' => FALSE,
        'args' => array(
         array(
           'name' => 'data',
           'type' => 'struct',
           'description' => 'The id of the data to get',
           'source' => 'data',
           'optional' => FALSE,
         ),
       ),
      ),
     ),
  );
}

ขั้นตอนที่ 2: ไปที่

โครงสร้าง -> บริการ

และเปิดใช้งานโมดูลของคุณ

ขั้นตอนที่ 3: การส่งข้อมูลไปยังลูกค้า $ data - ข้อมูลที่ส่งไปยังลูกค้าควรเป็นอาร์เรย์

  $url = $base_url.'/api/search';
            $response = drupal_http_request($url, array(
                'headers' => array('Content-Type' => 'application/json', 'Accept' => 'application/json'),
               'method' => 'POST',
               'data' => json_encode($data),
               'max_redirects' => 0,
               )
             );

พิมพ์การตอบสนองเพื่อตรวจสอบว่ามันทำงานได้ดี

รายการตรวจสอบ:

  1. ตรวจสอบการล็อกอินใด ๆ โดยการเปิดใช้งานโมดูลการบันทึก DB โทรหาบริการของคุณ
  2. ตรวจสอบข้อผิดพลาดทางไวยากรณ์เนื่องจากไฟล์นั้นถูกเรียกใช้เฉพาะเมื่อมีการเรียกใช้บริการจนกว่าคุณจะไม่เห็นข้อผิดพลาดหรือคำเตือนใด ๆ
  3. พิมพ์การตอบสนองและทดสอบว่าข้อมูลกำลังผ่านอย่างถูกต้องหรือไม่
  4. ตรวจสอบลูกค้าสิ้นสุดเพื่อตรวจสอบ

0

ฉันได้รับข้อผิดพลาดนี้ด้วยและจากนั้นฉันก็รู้ว่าฉันต้องรวมทั้งเส้นทางของจุดบริการของฉันและเส้นทางของมุมมองของฉันใน URL

เดิมฉันลองใช้http: //my.local/eventsแต่ฉันต้องใช้http: //my.local/events/events (ฉันตั้งชื่อเส้นทางจุดบริการปลายทางของฉันเหมือนกับมุมมองของฉัน)

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