Posso usar a API REST no formato de link permanente normal?

9

Recentemente, todas as minhas solicitações de API REST se voltaram repentinamente para retornar um erro 404, Toda solicitação (não importa o ponto de extremidade personalizado ou interno).

Então eu achei que era por causa da estrutura do permalink. /wp-json/não está acessível sob link permanente, pois simplesmente não há regra de redirecionamento disponível no momento.

É possível usar os pontos de extremidade REST nesta situação? Personalizado e embutido.

Jack Johansson
fonte

Respostas:

16

Sim você pode. Basta adicionar o rest_routeparâmetro de consulta.

assim

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

se tornaria

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

Ou https://wordpress.org/wp-json/wp/v2/se tornaria https://wordpress.org/?rest_route=/wp/v2um exemplo mais completo.

Então, você está se perguntando como decidir qual usar? Não se preocupe mais, há uma função para isso:get_rest_url()

Outra opção é o fato de que, por padrão, existe um <link>no cabeçalho que fornece a raiz da API.

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

Portanto, no caso de você precisar descobrir isso, no lado do cliente, JS apenas use algo ao longo das linhas de

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

Portanto, basicamente, você não deve tomar a wp-jsonparte como determinada (e codificá-la com código fixo), mas sempre construí-la dinamicamente usando get_rest_url()a abordagem JS mencionada acima.

kraftner
fonte
Então, se eu quiser usá-lo claramente, seria algo como https://wordpress.org/?rest_route=SOMEPATH&value1=X&value2=Y? Isso significa que eu preciso ter um condicional para detectar a estrutura do permalink e alterar a rota REST com base nisso.
Jack Johansson
Bem, talvez não seja condicional, mas você precisa construí-lo dinamicamente. Veja as edições acima.
Kraftner
como você usaria essa rota com jsonp? Tentei, /?rest_route=/?_jsonp=callBackfnmas obtive o status 404.
Redshift #
@redshift Normalmente, abra uma pergunta separada para coisas como essas. No seu caso, você deve ler sobre delimitadores de string de consulta en.wikipedia.org/wiki/Query_string#Structure Você precisaria escrever assim/?rest_route=/&_jsonp=callBackfn
#
1

Você pode adicionar uma reescrita em seu servidor web.

Por exemplo, para nginx

location ~ ^/wp-json/ {
    rewrite ^/wp-json/(.*?)$ /?rest_route=/$1 last;
}
Northtree
fonte
0

O rest_routeparâmetro query é o estilo Ugly(escolha de palavras do Wordpress que não é minha) do Permalink. Você pode alterar o estilo do permilink para Post namecomo ilustrado na captura de tela abaixo e a wp-jsonrota deve estar acessível no URL. É possível que outros estilos de permilink funcionem, mas Post namefuncionou para mim e eu não explorei além disso

Imagem ilustrativa dos cliques nos botões necessários para alterar as configurações

Max Carroll
fonte