이 Drupal 서비스 RESTful API가 작동하지 않는 이유는 무엇입니까?


8

Drupal 7에서 서비스 모듈을 사용하고 있습니다. AJAX를 통해 검색어를 제출 하고 제목과 일치하지 않는 상위 5 개 노드 (노드 id및 노드 title)를 포함하는 배열을받을 수있는 서비스를 구현하고 싶습니다 . http://example.com/api/에 연결할 때이 메시지가 나타납니다

서비스 엔드 포인트 "검색"이 성공적으로 설정되었습니다.

그러나 http://example.com/api/search/Test 와 같은 것을 탐색하려고 하면 404가 나타납니다.


1
D8 코어의 일부가 될 RESTws 를 확인하는 것이 좋습니다 .
kqw

향후 독자를 위해 HTTP POST vs GET 요청을 사용하여 엔드 포인트에서 데이터를 검색하십시오. 많은 서비스 엔드 포인트에는 POST 요청이 필요합니다.
David Thomas

답변:


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

서비스 모듈로 RESTful 리소스를 만든 경우 JSON 형식으로 HTTP 요청에 응답 할 것으로 예상되므로 http://example.com/api/search/Test.json



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. 클라이언트 끝을 확인하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.