2016-10-11 5 views
1

Я пытаюсь создать конечную точку отдыха. То, как я это делаю, - это сначала создать модуль с drupal generate:module, а затем добавить остальную зависимость, а затем создать ресурс restore с drupal generate:plugin:rest:resource. Все это прекрасно работает, созданная конечная точка даже появляется в модуле restui со следующим путем: /api/v1/articles. Проблема заключается в том, когда я иду к конечной точке я создал я получаю следующее сообщение об ошибке:Drupal 8 restresource: не найден маршрут

{ 
    "message": "No route found for \"GET /api/v1/articles\"" 
} 

Cache Перестройка не решить эту проблему для меня, и когда я смотрю в таблицу маршрутизации есть на самом деле не было добавлено нет маршрутизации /api/v1/articles. Есть ли что-то, что я забыл сделать?

Это генерируемое остальное ресурс:

namespace Drupal\api_articles\Plugin\rest\resource; 

use Drupal\Core\Session\AccountProxyInterface; 
use Drupal\rest\Plugin\ResourceBase; 
use Drupal\rest\ResourceResponse; 
use Symfony\Component\DependencyInjection\ContainerInterface; 
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; 
use Psr\Log\LoggerInterface; 

/** 
* Provides a resource to get view modes by entity and bundle. 
* 
* @RestResource(
* id = "article_rest_resource", 
* label = @Translation("Article rest resource"), 
* uri_paths = { 
*  "canonical" = "/api/v1/articles", 
*  "https://www.drupal.org/link-relations/create" = "/api/v1/articles" 
* } 
*) 
*/ 
class ArticleRestResource extends ResourceBase { 

    /** 
    * A current user instance. 
    * 
    * @var \Drupal\Core\Session\AccountProxyInterface 
    */ 
    protected $currentUser; 

    /** 
    * Constructs a Drupal\rest\Plugin\ResourceBase object. 
    * 
    * @param array $configuration 
    * A configuration array containing information about the plugin instance. 
    * @param string $plugin_id 
    * The plugin_id for the plugin instance. 
    * @param mixed $plugin_definition 
    * The plugin implementation definition. 
    * @param array $serializer_formats 
    * The available serialization formats. 
    * @param \Psr\Log\LoggerInterface $logger 
    * A logger instance. 
    * @param \Drupal\Core\Session\AccountProxyInterface $current_user 
    * A current user instance. 
    */ 
    public function __construct(
    array $configuration, 
    $plugin_id, 
    $plugin_definition, 
    array $serializer_formats, 
    LoggerInterface $logger, 
    AccountProxyInterface $current_user) { 
    parent::__construct($configuration, $plugin_id, $plugin_definition, $serializer_formats, $logger); 

    $this->currentUser = $current_user; 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) { 
    return new static(
     $configuration, 
     $plugin_id, 
     $plugin_definition, 
     $container->getParameter('serializer.formats'), 
     $container->get('logger.factory')->get('api_articles'), 
     $container->get('current_user') 
    ); 
    } 

    /** 
    * Responds to GET requests. 
    * 
    * Returns a list of bundles for specified entity. 
    * 
    * @throws \Symfony\Component\HttpKernel\Exception\HttpException 
    * Throws exception expected. 
    */ 
    public function get() { 

    // You must to implement the logic of your REST Resource here. 
    // Use current user after pass authentication to validate access. 
    if (!$this->currentUser->hasPermission('access content')) { 
     throw new AccessDeniedHttpException(); 
    } 

    return new ResourceResponse("Implement REST State GET!"); 
    } 

} 

ответ

0

Так что проблемы не были с обновлением от 8.1.9 до 8.2.0. Это сломало модуль RestUI, который я использовал для назначения конечных точек.

+0

так, как вы это исправить? понижаем? –

+0

У restui нет патча, который исправляет проблему на данный момент. Скоро они выпустят его, я думаю. – Nylsoo

0

Проблема заключается в том, что restui не создает файл конфигурации для вашего ресурса, вы можете создать его самостоятельно, если хотите работать только с стабильными версиями (8.x-1.12). Dev-версия restui уже исправляет это.

Ссылка: https://www.drupal.org/node/2816433

1

По REST and Application Integration:

The content type for the data you send, or the accept type for the data you are receiving, must be set to 'application/hal+json'.

Итак следующие шаги необходимы:

  1. Включить модуль HAL.
  2. В конфигурации ресурсов под Форматы принятых запросов enable hal_json.
  3. [I]nform Drupal about the serialization format you are using. Поэтому отправьте заголовок Content-Type с помощью hal + json (например, POST) или добавьте ?_format=hal+json в URL-адрес (например, GET).

Это также может быть вызвано отсутствием этой линии, но у вас уже есть:

"https://www.drupal.org/link-relations/create" = "/api/v1/articles" 
Смежные вопросы