Могу ли я использовать REST-API в обычном постоянном формате?

9

Недавно все мои запросы к REST-API неожиданно превратились в ошибку 404 «Каждый запрос» (независимо от того, настроена ли конечная точка или встроена).

Тогда я решил, что это из-за структуры постоянной ссылки. /wp-json/недоступен по простой постоянной ссылке, так как в данный момент просто нет правила перенаправления.

Можно ли использовать конечные точки REST в этой ситуации? И кастомные и встроенные.

Джек Йоханссон
источник

Ответы:

16

Да, ты можешь. Просто добавьте rest_routeпараметр запроса.

Так

https://wordpress.org/wp-json/

станет

https://wordpress.org/?rest_route=/

Или https://wordpress.org/wp-json/wp/v2/стал https://wordpress.org/?rest_route=/wp/v2бы дать вам более полный пример.

Итак, вам интересно, как решить, какой из них использовать? Не беспокойтесь, для этого есть функция:get_rest_url()

Другим вариантом является тот факт, что по умолчанию <link>в заголовке есть ссылка, которая дает вам корень API.

<link rel='https://api.w.org/' href='https://wordpress.org/wp-json/' />

Так что в случае, если вам нужно выяснить это со стороны клиента, JS просто используйте что-то вроде

document.querySelectorAll('link[rel="https://api.w.org/"]')[0].getAttribute('href');

Таким образом, в основном вы не должны принимать wp-jsonзаданную часть (и жестко ее кодировать), а всегда создавать ее динамически, используя get_rest_url()упомянутый выше подход JS.

kraftner
источник
Так что, если я хочу использовать это в простом виде, это было бы что-то вроде https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Это означает, что мне нужно иметь условие для определения структуры постоянной ссылки и изменения маршрута REST на основании этого?
Джек Йоханссон
Ну, может быть, не условно, но вам нужно построить его динамически. Смотрите правки выше.
kraftner
Как бы вы использовали этот маршрут с JSONP? Я пытался, /?rest_route=/?_jsonp=callBackfnно получил статус 404.
красное смещение
@redshift Обычно, пожалуйста, откройте отдельный вопрос для подобных вещей. В вашем случае вы должны прочитать разделители строк запроса en.wikipedia.org/wiki/Query_string#Structure Вам нужно написать это следующим образом/?rest_route=/&_jsonp=callBackfn
kraftner
1

Вы можете добавить один переписать на вашем веб-сервере.

Например, для nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
northtree
источник
0

Параметр rest_routeзапроса - это Uglyстиль Постоянной ссылки (выбор слов Wordpress не мой). Вы можете изменить стиль постоянной ссылки, Post nameкак показано на снимке экрана ниже, и wp-jsonмаршрут должен быть доступен в URL. Вполне возможно, что другие из этих постоянных стилей будут работать, но Post nameсработали для меня, и я не изучал дальше

Изображение, иллюстрирующее нажатия кнопок, необходимые для изменения настроек

Макс Кэрролл
источник