यह Drupal सेवाएँ RESTful API काम क्यों नहीं कर रही है?


8

मैं Drupal 7 पर सेवा मॉड्यूल का उपयोग कर रहा हूं। मैं एक ऐसी सेवा को लागू करना चाहता हूं जो मुझे AJAX के माध्यम से एक खोज शब्द प्रस्तुत करने और शीर्ष 5 नोड्स (नोड ) idऔर एक सरणी प्राप्त करने की अनुमति देता है titleजो शिथिल रूप से शीर्षक से मेल खाता है। Http://example.com/api/ से कनेक्ट होने पर मुझे यह संदेश प्राप्त होता है

सेवा समापन बिंदु "खोज" को सफलतापूर्वक सेटअप किया गया है।

लेकिन जब http://example.com/api/search/Test जैसी किसी चीज़ पर नेविगेट करने का प्रयास किया जाता है , तो मुझे 404 मिलता है।


1
मैं RESTws को देखने का सुझाव देता हूं , जो D8 कोर का हिस्सा होगा।
kqw

भविष्य के पाठकों के लिए, समापन बिंदु से डेटा पुनर्प्राप्त करने के लिए HTTP POST बनाम GET अनुरोधों का उपयोग करने पर विचार करें। कई सेवाओं के समापन बिंदुओं के लिए POST अनुरोधों की आवश्यकता होती है।
डेविड थॉमस

जवाबों:


1

बाद में कोशिश और कोशिश करें, जब अन्य ट्यूटोरियल से पढ़ा जाता है, तो मैं आराम के साथ एक संसाधन बनाता हूं, मेरे लिए साबुन ड्रुपल में अभेद्य है, मैं कोशिश करता हूं लेकिन सफलता के बिना, आप इस कोड को कॉपी कर सकते हैं और केवल कस्टम मॉड्यूल नाम और हुक को संशोधित कर सकते हैं।

/**
 * 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

यदि आपने सेवा मॉड्यूल के साथ एक प्रतिष्ठित संसाधन बनाया है, तो मुझे विश्वास है कि यह JSON प्रारूप में HTTP अनुरोधों का जवाब देने की उम्मीद करेगा, इसलिए आप नेविगेट करने की कोशिश कर सकते हैं http://example.com/api/search/Test.json


0

इस मॉड्यूल का उपयोग करने का प्रयास करें https://www.drupal.org/project/services_views । इसकी वर्तमान में दो विशेषताएं हैं: - दृश्य में संसाधन आधारित संसाधन बनाना, एक दृश्य में सेवाएं प्रदर्शित करना - दृश्य संसाधन कॉल के माध्यम से सिस्टम के किसी भी दृश्य को निष्पादित करें


0

मूल रूप से 404 त्रुटि नहीं मिली है

  1. सुनिश्चित करें कि आपकी सेवा समाप्ति बिंदु है

    http://example.com/api/search/ {खोज-अवधि}

  2. भेजने के लिए प्रतिक्रिया निकाय क्या सही प्रारूप में है

3. सामग्री हेडर आवेदन / json और नाम सामग्री-प्रकार पर सेट है


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: पर जाएं

संरचना -> सेवाएं

और अपने मॉड्यूल को सक्षम करें

STEP 3: क्लाइंट को डेटा भेजना $ डाटा - क्लाइंट को भेजा गया डेटा एरे होना चाहिए

  $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 का उपयोग करने की आवश्यकता थी (मैंने अपनी सेवा समापन बिंदु पथ को अपने दृश्य के समान नाम दिया था)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.