REST API: Маршрут, соответствующий URL и методу запроса, не найден

8 окт. 2019 г., 15:17:07
Просмотры: 28K
Голосов: 3

У меня возникли проблемы с добавлением пользовательского маршрута REST API в WordPress. Используя собственный плагин, я зарегистрировал маршрут следующим образом:

add_action( 'rest_api_init', function() {
  register_rest_route( $namespace, 'handler_mijnenergie', array(
    'methods'   => '\WP_REST_Server::CREATABLE ',
    'callback'  => [ $this, 'handle_energie_data' ]
  ), false );
} );

При вызове пространства имен "/wp-json/watz/v1" я получаю корректный ответ в Postman, показывающий, что маршрут отображается. Скриншот ответа Postman показывающий список доступных маршрутов

Однако когда я пытаюсь получить прямой доступ к маршруту, появляется ошибка 404. Я уже попробовал:

  • Перезаписать постоянные ссылки
  • Использовать стандартный WordPress .htaccess
  • Отключить плагины
  • Изменить метод/пространство имен и запрос
  • Протестировать маршруты других плагинов, таких как Yoast или Contact Form 7 (они работают)

Есть ли идеи, что может вызывать эту проблему и что нужно изменить, чтобы это заработало?

0
Все ответы на вопрос 1
1

Это происходит из-за того, как вы определили допустимые методы:

'methods'   => '\WP_REST_Server::CREATABLE ',

Не следует заключать это в кавычки. WP_REST_Server::CREATABLE — это строка, равная 'POST', но, заключая её в кавычки, вы буквально устанавливаете метод как '\WP_REST_Server::CREATABLE', что не является допустимым HTTP-методом. Это можно увидеть в ответе на эндпоинт namespace.

Установите его следующим образом:

'methods' => WP_REST_Server::CREATABLE

Или, если ваш файл использует пространство имен PHP, так:

'methods' => \WP_REST_Server::CREATABLE

Либо добавьте это в начало файла:

use WP_REST_Server;

Затем убедитесь, что при прямом обращении к маршруту вы используете правильный метод. Если вы используете WP_REST_Server::CREATABLE, то эндпоинт будет отвечать только на POST-запросы, поэтому GET-запросы вернут 404, включая случаи доступа через браузер.

8 окт. 2019 г. 16:32:05
Комментарии

Спасибо за обратную связь, это сработало отлично! Сегодня я снова чему-то научился :)

BroodjeBE BroodjeBE
9 окт. 2019 г. 11:19:45