 mas depois vou disponibilizar os slides já estão no slide share. Essa apresentação é uma versão um pouquinho mais curta. Eu fiz essa apresentação no PHPRS, na conferência aqui. Ela é um pouquinho mais extensa e eu tive que tirar alguns slides ali que abordam alguns assuntos, principalmente da parte de segurança, mas ambos já estão no slide share ali e aí vocês podem pegar ou tirar outras dúvidas comigo. Bom, meu nome é Jackson Maffra, eu atuo como desenvolvedor há muito tempo já e pelo menos há 20 anos só com a partir de web. Há uns 10 anos com Wordpress. Já palestrei em outros WordCamps aqui, então saudades de voltar aqui para casa aqui. Bom, vamos lá. A ideia da apresentação e eu vou mostrar algumas coisas práticas. Não tem LiveCoding, já deixei tudo rodando ali para não ter erro. LiveCoding em 20 minutos ali é complicado. Mas a ideia é mostrar como eu posso disponibilizar, por exemplo, eu tenho um conteúdo, não só páginas, mas às vezes o pessoal usa o Wordpress como um container de outras informações e aí eu quero disponibilizar isso. Eu tenho um aplicativo, eu quero montar um aplicativo, ou então alguém está disposto a montar um aplicativo. Mas como muitos aqui, eu não sei programar, eu não tenho noções de programação. Então como é que eu posso disponibilizar isso ali? Eu tenho que contratar um cara para fazer uma API para mim, disponibilizar, exportar esses dados. Como é que eu faço para outros sistemas integrarem com o meu site, consumirem essas métricas? Que hoje a gente está acostumado a eu quero integrar com analíticas, eu quero trazer os dados do analíticas para dentro do meu site, tanto analíticas como diversas outras plataformas que vocês usam. Tem uma API, tem um carinha que vai lá e converte aqueles dados e te entrega ali dentro do seu Wordpress e tu não sabe nem como é que isso acontece. Para você não é importante saber isso. Ah, que banco de dados que ele está usando, se ele usou Node, se ele usou PHP, se ele usou Java, para mim não importa. Então essa ideia, a gente usar Wordpress, ele já tem essa API, está disponível, muita gente não usa ou nem sabia que existia. Então só antes de chegar nesse ponto, tem que explicar alguns conceitos rapidinho para daí a gente ir para essa abordagem, beleza? Primeira coisa, dois termos que o pessoal confunde bastante, que é WebService e API. Até tem uma piada sobre isso, que todos os tigres são gatos, mas nem todos os gatos são tigres. Justamente por causa disso. Explicando de uma forma mais simples para quem não é muito técnico. A API é uma camada que vai fazer uma comunicação, por exemplo, normalmente a gente associa uma base de dados. Então eu quero exportar os meus dados para um terceiro consumir essa informação, só que eu não quero entregar sem o meu banco de dados. Então eu tenho lá, por exemplo, falando na questão hardware, por exemplo, eu tenho um medidor de pressão, eu tenho o meu relógio ali, ele tem uma API, uma camada de comunicação ali com hardware, e ele pode expor aqueles dados ali e necessariamente não está utilizando internet. Ele pode estar se comunicando por Bluetooth, por wireless, qualquer outro protocolo. Então, uma API é só uma camada de comunicação. Um WebService tem, na teoria, ela é uma API só que é baseada no protocolo HTTP, roda sobre rede. Então, uma API, ela não precisa necessariamente de internet. E um WebService, ele é uma API que vai rodar sobre internet. Então, normalmente a transição desses dados é em formato de JSON, XML, ou texto, CSV, o que você quiser utilizar para comunicar. Então, é só um resumo rápido, o WordPress já trabalha com isso desde os princípios. Essa parte de externalizar esses dados, o REST, o XMLRPC, entre outras. A ideia da API é só comunicar com outros sistemas. E o WordPress, durante a sua evolução, começou a utilizar isso no sistema interno, no core interno. Então, o que acontece? Quando se fala a API do WordPress, qual? A gente tem diversas APIs dentro do WordPress. Então, vamos tirar aqui a dúvida do que é isso. Então, o WordPress tem várias APIs que são segmentadas. Então, a gente tem, cortou aqui, a gente tem APIs da parte de plugins, a gente tem APIs para a parte de temas, Edge Ones, funcionalidades administrativas, funcionalidades que é só para a parte do usuário ali, que nem todas precisam se comunicar entre si. Então, a lista das APIs está disponível no Codex, para quem não conhece, é a parte da documentação oficial do WordPress, muito bem documentado. E o que é que tem ali? Eu tenho diversas APIs da parte do database, temas, shortcode, settings, write, file system, options, plugins. E tem duas que chamam a atenção, que é a API HTTP e a API REST. Aqui, eu vou abordar elas aqui. Então, assim, primeiro, API HTTP, que você pode utilizar também junto, se você vai fazer um plugin, ou se você vai estender, ah, eu preciso disponibilizar os meus dados aqui, mas eu cruzo dados com outro site, ou com outra base de dados. Então, ah, eu tenho uma API, eu tenho uma base de dados, por exemplo, de filmes, mas eu quero exportar ou colocar dados que estão em um outro BI que eu tenho. Então, dá para você juntar tudo aquilo ali, fazer o org de prezes, externalizar essas outras informações junto. Por isso que a gente vai falar da API HTTP. Então, basicamente, desde os princípios do PHP ali, o pessoal, ah, eu preciso consumir um URL de terceiro. Ou o Zocl, o seu URL, ou o Fsoc Open, ou o FileGetContents. E no começo dos plugins e temas, era uma salada. Não tinha um padrão. Cada um usava de um jeito, implementava de um jeito, aí tinha a faleta de segurança, corrigia, não. Então, esse jeito aqui está errado, vamos fazer de outro jeito. Beleza. Hoje presta, o cortinho foi lá e modificou outros, não. Seguinte, desde a 2.7, isso há muito tempo, a gente vai utilizar, vai fazer uma API para padronizar isso aí e também manter a segurança. Beleza. Então, a gente tem uma API que faz toda essa padronização ali de todos os request que você precisa fazer. Em outros framework, tem uma biblioteca bem conhecida, que é o Guzzle, que ela é justamente para fazer esse tipo de requisição. Então, o Guzzle é um pacotinho que você instala em qualquer framework que você pode usar fora da framework e ele vai fazer lá um request para um determinado site, seja fazendo uma postagem, ou seja, consumindo os dados. Essa é a moral da API do HTTP. Então, ele vai trabalhar em cima dos verbos verbos ou métodos, como preferirem, do HTTP. Ah, eu quero fazer um get, eu quero consumir um dado, eu quero cadastrar uma informação, um put, um delete. Então, ele vai padronizar isso ali para você. Então, a gente tem ali WP Remote, o get, o post, o red e o request. O request, ele é um genérico. Por baixo dos panos, o get, o post e o red chamam as mesmas funcionalidades do request. Então, qual é a construção dele? Eu coloco a URL que eu preciso com os parâmetros que eu vou precisar mandar e aí ele vai me devolver um corpo de resposta. Esse corpo de resposta tem essas, quando ele vai me devolver a resposta, eu tenho essas funções internas aqui que vão me ajudar a pegar o corpo da resposta, que pode ser um HTML, pode ser um JSON, pode ser um TXT, pode ser uma imagem, um vídeo, o que você quiser. Então, você pode fazer o request livremente. Os cabeçalhos, as informações que vêm lá. Então, por exemplo, eu vou fazer uma transação com um servidor interno meu e eu tenho que mandar um cabeçalho, um token de segurança para comunicar, manter a segurança, só esses meus servidores se comunicam ou na hora de voltar ali, tá vindo desse cara mesmo, tem o token de segurança, tá validado, então eu recupero isso no headers. E eu tenho o response code lá para devolver os códigos de status 200, 404 e por aí vai. Então, essa parte do HTTP é justamente para isso. É simples quanto isso. Eu quero recuperar ou quero enviar dados, por exemplo, eu monto um plugin, eu quero pegar ali os dados. O cara fez um cadastro, mas eu preciso mandar isso aqui para API da RdStation, hotjar, entre outras ali, é só fazer o que por baixo dos panos, uns plugins que seguem a padronização ali, que seguem a documentação, tem que fazer. Usam a função interna do Wordpress. E o que que é a tal da API REST? É justamente eu disponibilizar os meus dados num formato de JSON. Dá para fazer ele externalizar isso em format.xml também. Mas o padrão dele