কেন এই ড্রুপাল পরিষেবাগুলি RESTful API কাজ করছে না?


8

আমি ড্রুপাল on-এ পরিষেবাদি মডিউলটি ব্যবহার করছি I আমি এমন একটি পরিষেবা বাস্তবায়ন করতে চাই যা আমাকে এজেএক্সের মাধ্যমে একটি অনুসন্ধান শব্দ জমা দিতে এবং শীর্ষে পাঁচটি নোড (নোড idএবং title) শিরোনামের সাথে মেলে এমন একটি অ্যারে গ্রহণ করতে দেয় । Http://example.com/api/ এ সংযুক্ত হওয়ার সময় আমি এই বার্তাটি গ্রহণ করি

পরিষেবাদি এন্ডপয়েন্টে "অনুসন্ধান" সফলভাবে সেটআপ করা হয়েছে।

তবে http://example.com/api/search/Test এর মতো কিছুতে নেভিগেট করার চেষ্টা করার সময় আমি একটি 404 পাই।


1
আমি আরএসটিউসগুলি যাচাই করার পরামর্শ দিচ্ছি , যা ডি 8 কোর এর অংশ হবে।
kqw

ভবিষ্যতের পাঠকদের জন্য, এন্ডপয়েন্ট থেকে ডেটা পুনরুদ্ধার করতে HTTP পোষ্ট বনাম জিইটি অনুরোধগুলি বিবেচনা করুন। অনেক পরিষেবা শেষ পয়েন্টগুলিতে 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

আপনি যদি পরিষেবাগুলি মডিউল দিয়ে একটি বিশ্রামযোগ্য রিসোর্স তৈরি করেন তবে আমি বিশ্বাস করি এটি জেএসওএন ফর্ম্যাটে এইচটিটিপি অনুরোধগুলির প্রতিক্রিয়া প্রত্যাশা করবে, সুতরাং আপনি নেভিগেট করার চেষ্টা করতে পারেন 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. বিষয়বস্তু শিরোনাম অ্যাপ্লিকেশন / জসন এবং নাম বিষয়বস্তু সেট করা হয়


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: ক্লায়েন্টে ডেটা প্রেরণ $ ডেটা - ক্লায়েন্টকে প্রেরিত ডেটা এটি অ্যারে হওয়া উচিত

  $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. আপনার পরিষেবাটিতে কল করুন ডিবি লগিং মডিউল সক্ষম করে যে কোনও লগ ইন চেক করুন।
  2. যেকোন সিনট্যাক্স ত্রুটির জন্য পরীক্ষা করুন কারণ সেই ফাইলটি তখনই কল করা হয় যখন পরিষেবাগুলি কল করা হয় ততক্ষণ আপনি কোনও ত্রুটি বা সতর্কতা দেখতে পাবেন না।
  3. প্রতিক্রিয়াটি মুদ্রণ করুন এবং পরীক্ষা করুন যে ডেটাটি সঠিকভাবে পার হচ্ছে বা না।
  4. ক্লায়েন্ট শেষ চেক করতে পরীক্ষা করুন।

0

আমিও এই ত্রুটিটি পেয়েছিলাম এবং তখন আমি বুঝতে পেরেছিলাম যে আমার পরিষেবা শেষের পয়েন্ট এবং ইউআরএলটিতে আমার দেখার পথ উভয়ই অন্তর্ভুক্ত করা দরকার।

মূলত আমি http: //my.local/events চেষ্টা করছিলাম তবে আমার http: //my.local/events/events ব্যবহার করা দরকার (আমি আমার পরিষেবাটির শেষ পয়েন্টটির নাম আমার ভিউয়ের মতোই রেখেছি)।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.