Finalidade da API REST?


17

Primeiro de tudo, eu entendo que este é um plugin no momento atual, mas certamente é quase parte do WordPress de qualquer maneira. Então, espero que isso não seja sinalizado como fora de tópico.

Eu li seus documentos oficiais, muitos outros artigos e assisti a vídeos tutoriais, mas ainda não estou conseguindo alguns pontos. Esse é certamente o futuro do WordPress, é muito útil para o desenvolvimento de aplicativos móveis e o uso / compartilhamento de dados entre sites diferentes, mas: o que ele faz apenas no meu site?


Considere isto:

Atualmente, estou trabalhando nos comentários. Quero que a seção de comentários seja carregada apenas quando o usuário rolar para a seção de comentários (com deslocamento de -200px, para que não haja atraso) .

  • Vou acionar uma chamada ajax quando o usuário rola para esse ponto
  • Chamada Ajax envia alguns dados com ele, como post_id etc
  • Executar WP_Comment_Query()no servidor
  • Enviar JSONdados de volta ao cliente com relações de comentários, nomes, conteúdo, etc.
  • Use JavaScript document.createElement(), innerHTML etc para criar e comentários de saída

Agora .. Por que eu usaria a API REST? Qual é a utilidade para mim? Apenas à prova de futuro?

Eu ainda precisaria usar JavaScript para a saída de todos os dados que recebo .. Eu não encontrou qualquer bons artigos por isso ou por aquilo que eu deveria usar API REST (exceto a transferência de dados entre sites e developement aplicativo móvel) ..


Usar a API REST em favor da maneira que você descreveu lhe daria o benefício de uma maneira estruturada e unificada . Você não precisa lidar com os coletores de conteúdo (consulta de comentários) ou o formato de resposta (json). Também pode haver algumas melhorias no cache. A desvantagem que vejo em geral é que a modelagem se move completamente para o navegador que, na minha opinião de "desenvolvedor de back-end", levanta problemas de desempenho.
David

Como você planeja enviar os dados JSON de volta ao cliente? Como você está construindo o código do lado do servidor?
Czerspalace #


@ David basicamente API REST faz todas as consultas em si e eu só preciso alimentá-lo como parâmetros? Sobre modelos .. Entendo o que você está dizendo, felizmente o hardware fica mais poderoso a cada ano. Infelizmente sempre haverá pessoas que se recusam a se envolver nesse assunto (usuários antigos do IE, estou olhando para você) .
N00b

@czerspalace 1. WP_Comment_Query() 2. Construa uma matriz de comentários, cada uma com uma matriz de parâmetros no whileloop 3. json_encode() 4. echo dados codificados de volta. Tudo isso em wp_ajaxe / ou wp_ajax_noprivfunção.
N00b

Respostas:


8

No seu estado atual, é um recurso mal projetado que não tem nenhuma vantagem real para um desenvolvedor competente.

A idéia básica, no momento em que esta resposta é escrita, é expor a funcionalidade principal do WordPress como API JSON REST. Isso permitirá dissociar a lógica de "negócios" do WordPress da interface do usuário e criar diferentes interfaces de usuário completas ou parciais para gerenciar e extrair informações do wordpress. Isso por si só não é uma revolução, mas uma evolução. apenas uma substituição da API XML-RPC que, por si só, simplifica o HTTP com base na API de envio.

Como em qualquer evolução, a cada passo que você se pergunta, que vantagem você obtém do estado anterior, e a resposta provavelmente é "não muito", mas espero que os passos se acumulem com uma grande diferença.

Então, por que o prefácio negativo para esta resposta? Porque minha experiência como desenvolvedor de software é que raramente é possível criar uma API genérica que seja realmente útil sem ter casos de uso concretos para responder. Um caso de uso concreto aqui pode substituir a API XML-RPC para gerenciamento automatizado de wordpress, mas qualquer front end relacionado deve ser específico do site e, uma vez que há uma enorme penalidade de desempenho para cada solicitação enviada do cliente para o servidor, você não pode apenas uso agregado de API diferente para obter o resultado desejado de uma maneira que os usuários continuem satisfeitos. Isso significa que, para o front end, para uso não trivial, ainda haverá muito pouca diferença no esforço de desenvolvimento entre o uso da rota AJAX e da rota REST-API.


Obrigado, isso piora as coisas! Sinceramente, não consigo decidir qual caminho seguir. O que sei é que provavelmente precisarei criar um aplicativo móvel no futuro. Seu conselho é que a API REST no estado atual seja uma porcaria ?
N00b 03/03

Não, apenas que ele não mostra nenhuma vantagem real. Quanto a usá-lo ou não, como sempre, você deve usar a ferramenta que conhece melhor, especialmente levando em consideração que o restante da API ainda está na versão beta. Eu ainda consideraria registrar rotas com a parte da API que já está no núcleo, pois fornecerá URLs mais limpos, que você poderá armazenar em cache se necessário, algo que não pode ser feito com o ponto final do ajax.
Mark Kaplun

3

As duas vantagens gerais são:

  1. Você pode (eventualmente) executar todas as tarefas administrativas sem a interface administrativa.
  2. Você pode obter todos os dados para exibição e eliminar o front end (e escrever PHP) completamente.

Em relação ao seu exemplo especificamente,

Substitua as etapas 3 e 4 pela API REST e substitua as etapas 1, 2 e 5 pelo Backbone.js. BOOM, aplicativo dinâmico da web. Ou talvez você esteja mais à vontade executando o roteamento complexo necessário para o seu site com Python.


Estou muito irritado com o fato de todos on-line dizerem que o significado de aplicativos da web dinâmicos é muito subjetivo (e é por isso que eles não dizem exatamente o que é), o que significa que eu não sei 100% o que é comparado a sites não dinâmicos .. Qual é a sua versão? Isto é como uma coisa que eu preciso saber se a utilização da API REST ou não ..
N00b

2
Aplicativo significa algo além da renderização de páginas de blog estáticas vinculadas a outras páginas de blog estáticas, uma experiência mais "app like". Role para baixo até os exemplos no site de backbone .
Milo

3

Bem, algumas coisas, na verdade.

  1. Permite executar funções específicas conforme necessário, em vez de exigir todo o cálculo de um carregamento de página inteiro. Portanto, você pode atualizar os comentários periodicamente com sobrecarga razoavelmente baixa sem precisar de uma atualização da página, apenas chamando o terminal da API e atualizando os dados em sua página. Esse conceito acabará sendo extrapolado para SPAs (aplicativos de página única) que carregam o site "cliente" rapidamente uma vez e emula todas as "alterações" da página sem a necessidade de puxar novamente o HTML da página. Isso já é muito popular com o advento de estruturas como Angular, Ember e React. Os sites podem responder com uma velocidade incrível, ao mesmo tempo em que descarregam uma parte da energia computacional para o usuário final (ciclo de renderização, lógica não comercial) e reduzem significativamente o número geral de chamadas para o servidor (apenas extraem os dados necessários,

  2. Ele separa a lógica de negócios e o renderizador. Sim, você pode usar a API com outro site PHP divulgando os resultados ou manipulá-la com Javascript como você mencionou, mas também pode consumi-la com um aplicativo móvel nativo, um aplicativo de desktop, etc. Não apenas isso, mas você pode ter todos conversando com a mesma API, que executa consistentemente a mesma lógica de negócios, o que, por sua vez, cria consistência e confiabilidade nos vários clientes que consomem a API.

As APIs são boas porque separam as preocupações da lógica e da exibição.


Sobre o primeiro ponto. Por que é melhor que o ajax JavaScript comum, verificando atualizações em intervalos e atualizando dinamicamente?
N00b

2
Bem, chamadas ajax "regulares" SÃO apenas chamadas para uma API! Não há realmente diferença. O objetivo da API REST é fornecer essa API para a funcionalidade principal do Wordpress. Dessa forma, você pode realizar mais operações usando AJAX, aplicativos nativos, aplicativos de desktop etc. A parte "REST" é apenas um sistema de regras / padrões que definem como a API deve ser construída para facilitar o desenvolvimento e manter.
Colt McCormack

2

A API REST do WordPress é a nova novidade. Com aplicativos orientados a js de página única, e o WordPress deseja tornar-se uma plataforma de aplicativos, isso faz muito sentido. O plano é substituir o XML-RPC pela API REST (que é uma coisa boa apenas por razões de segurança!)

https://make.wordpress.org/core/2015/09/21/wp-rest-api-merge-proposal/

  • O site New York Times é construído sobre ele, aparentemente .
  • Permite que aplicativos móveis e outros serviços externos acessem conteúdo wp (como wp-cli )
  • Ele permite que os desenvolvedores construam um front end de aplicativo de página única com sua estrutura consumidora JSON favorita da semana e tenham todas as interações interessantes ao seu alcance.
  • Permite a separação de preocupações (como mencionado acima) e maior independência entre as equipes de back-end e front-end.

É outro conjunto de ferramentas para levar o WordPress adiante. E, embora tenha sido uma jornada sinuosa para chegar aonde estamos, acho que vale a pena dedicar um tempo para explorar e entender.


1

Primeiras coisas primeiro - o REST é leve

Em uma linha - Quando usamos APIs REST, fazemos toda a renderização de dados no lado do cliente (loops, condições e chamadas do servidor etc.) economizando largura de banda e, ao mesmo tempo, nosso aplicativo fica pronto para qualquer plataforma móvel, integrações de terceiros e modularizado ( preocupação entre o frontend e o servidor).

Você não quer isso?


0

Além dos 2 grandes pontos mencionados pelo @Milo, eu uso especificamente a API REST para expor meus dados a aplicativos que não são do WordPress. Temos uma extensão do Chrome que extrai informações de nosso banco de dados do WordPress, e isso é alcançado atingindo os pontos de extremidade da API REST com solicitações POST.


0

Infraestrutura CONSISTENTE

A API REST é consistente e legível por humanos. É auto-documentado.

GET wp-json/wp/v2/postsé bem claro o que faz. São GETalgumas postagens.

Você tem um espaço para nome:, wpuma versão: v2e uma coleção de objetosposts

Você consegue adivinhar o que: GET wp-json/wp/v2/posts/5faz? Que tal: GET wp-json/wp/v2/posts/5/comments Que tal:GET wp-json/shop/v2/orders/345/lines/11/price

Um desenvolvedor pode adivinhar facilmente, olhando para isso, ele receberá o preço da linha 11, 345mesmo sem ler a documentação. O desenvolvedor pode facilmente dizer que é proveniente do shopplug-in, pois está no namespace.

Que tal POST /wp-json/v2/posts title=New Blog Post Que talPUT /wp-json/v2/posts title=New Title

Isso é bem claro também. Faz um novo post. A propósito, ele retorna o ID da nova postagem. Não se trata de AJAX OU da API REST. AJAX é simplesmente uma tecnologia que acessa a API REST. Considerando que, antes, você teria que vir para cima com um monte de nomes de função ajax abstratos como: get_price_for_lineitem( $order, $line ). Isso retornará apenas um número ou um objeto JSON? Não tenho certeza, onde está a documentação. Oh ... foi a chamada do ajax get_order_line_priceou get_lineitem_price.

O desenvolvedor não precisa tomar essas decisões, porque a wp-jsonAPI existente fornece um bom modelo básico a ser seguido ao criar seus próprios pontos de extremidade. Certamente, um desenvolvedor de plug-in ou API pode violar essas regras, mas, em geral, é mais fácil seguir um padrão já definido e a maioria dos desenvolvedores prefere seguir um padrão já definido (veja como os padrões difusos do jQuery são agora).

ABSTRACÇÃO sem distração

Eu me preocupo com como POST /wp-json/mysite/v1/widgets title=Foobarfunciona? Não. Eu só quero criar um novo Widgete quero o ID em troca. Quero fazê-lo a partir de um formulário no meu front end sem atualizar a página. Se eu fizer uma solicitação para um URL, não me importo se é PHP, C #, ASP.NET ou qualquer outra tecnologia. Eu só quero criar um novo widget.

A API REST desacopla o back-end da frente. Tecnicamente, se sua API for boa o suficiente, você poderá alterar toda a pilha de back-end. Enquanto você mantivesse a mesma estrutura da API REST, qualquer coisa que dependesse da API não seria afetada.

Se a sua API REST é simples e consistente o suficiente, usando um substantivo como Widgetsuma coleção de objetos e um substantivo / identificador Widget/2para indicar uma única entidade, é muito simples escrever essa API em uma tecnologia muito diferente, pois é um encanamento de banco de dados mais ou menos básico código.

Usa verbos de solicitação HTTP padrão.

As APIs REST aproveitam o núcleo de como a Web funciona e os VERBs (leia-se: ação) que você usa para mapear as funções CRUD de dados padrão.

CREATE : POST
READ   : GET
UPDATE : PUT/PATCH
DELETE : DELETE

Existem mais verbos HTTP, mas esses são os básicos. Cada solicitação pela Internet usa esses verbos. Uma API REST fica bem no topo do modelo em que a Web é criada mediante solicitações. Não há necessidade de qualquer camada de comunicação ou modelo de abstração no meio. É apenas uma solicitação HTTP padrão para um URL e retorna uma resposta. Você não pode ficar muito mais simples que isso.

Essencialmente, ele torna o desenvolvedor mais ciente dos detalhes de como a Web realmente funciona e, quando você se aproxima do entendimento de como os protocolos subjacentes funcionam, acaba criando um produto melhor, mais eficiente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.