Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Usando a API REST do Wordpress

Usando a API REST do Wordpress

Erick Müller

June 03, 2016
Tweet

More Decks by Erick Müller

Other Decks in Technology

Transcript

  1. Erick Müller Quem? Programador Python, Go e PHP. Experiente em

    infraestrutura em nuvem AWS. Arquitetura de sistemas e serviços. Usando soluções Open Source há muitos anos.
  2. tem uma base instalada significativa. é simples para o usuário.

    agora dá pra usar com python! Wordpress numa apresentação de Python?
  3. API Application Programming Interface (ou, como interagir com a aplicação

    sem precisar usar diretamente) REST Representional State Transfer (ou, usar padrões de nomenclatura e verbos HTTP para interagir com a aplicação) API REST padrões de mercado, reconhecidos, maduros e disseminados.
  4. Exemplo 1: Implementar “fora do wordpress”. Usando includes ou php

    puro acessando o banco de dados, e retornando json Exemplo 2: Usar plugins existentes. Mas que eram incompatíveis entre si, ou que não forneciam soluções simples. Como era antes?
  5. Instalação: WP API Rest Três plugins, oficiais: - WordPress REST

    API (Version 2) /rest-api/ - ACF to REST API /acf-to-rest-api/ (opcional) - Basic-Auth https://github.com/WP-API/Basic-Auth (opcional) Configuração: Habilitar permalinks (“links permanentes”, em pt-BR).
  6. GET http://www.wordpressapi.local/wp-json/wp/v2/posts Busca de posts API REST - Exemplos Busca

    de posts com paginação GET http://www.wordpressapi.local/wp-json/wp/v2/posts?page=1&per_page=6
  7. API REST - Endpoints Personalizados >>> import requests >>> r

    = requests.get(“http://www.meusite.com.br/wp-json/wp/v2/posts?page=1&per_page=6”) >>> r.json() [{u'date_gmt': u'2016-06-03T14:47:51', u'excerpt': {u'rendered': u'<p>Bem-vindo ao WordPress. Esse \xe9 o seu primeiro post. Edite-o ou exclua-o, e ent\xe3o comece a escrever!</p>\n'}, u'sticky': False, u'guid': {u'rendered': u'http://www.wordpressapi.local/?p=1'}, u'id': 1, u'modified_gmt': u'2016-06-03T14:47:51', u'title': {u'rendered': u'Ol\xe1, mundo!'}, u'tags': [], u'content': {u'rendered': u'<p>Bem-vindo ao WordPress. Esse \xe9 o seu primeiro post. Edite-o ou exclua-o, e ent\xe3o comece a escrever!</p>\n'}, u'_links': {u'version-history': [{u'href': u'http://www.wordpressapi.local/wp- json/wp/v2/posts/1/revisions'}], u'wp:term': [{u'taxonomy': u'category', u'href': (...) Saída / testes python
  8. [ { "id": 1, "date": "2016-05-31T22:43:26", "date_gmt": "2016-06-01T01:43:26", "guid": {

    "rendered": "http://www.wordpressapi.local/?p=1" }, "modified": "2016-05-31T22:43:26", "modified_gmt": "2016-06-01T01:43:26", "slug": "ola-mundo", "type": "post", "link": "http://www.wordpressapi.local/ola-mundo/", "title": { "rendered": "Olá, mundo!" }, "content": { "rendered": "<p>Bem-vindo ao WordPress. Esse é o seu primeiro post. Edite-o ou exclua-o, e então comece a escrever!</p>\n" }, (...) API REST - Exemplos json
  9. POST http://www.wordpressapi.local/wp-json/wp/v2/posts Criação de post API REST - Exemplos POST

    http://www.wordpressapi.local/wp-json/wp/v2/posts/132 Alteração de post
  10. Autenticação API REST - Exemplos http://v2.wp-api.org/guide/authentication/ Métodos - Cookie -

    OAuth - Application Passwords (por plugin) - Basic Authentication
  11. Saída / testes: API REST - Exemplos >>> import requests,

    json >>> from base64 import b64encode >>> auth = b64encode("admin" + ":" + "admin") >>> post_data = {'title': 'meu novo post, publicado!', 'status': 'publish', 'comment_status': 'closed'} >>> post_headers = {'Authorization': ("Basic " + auth), 'Content-Type': 'application/json'} >>> requests.post("http://www.wordpressapi.local/wp-json/wp/v2/posts", data=json.dumps(post_data), headers=post_headers) python
  12. Como personalizar a saída? 1. adicionar uma nova ação na

    trigger ‘rest_api_init’ 2. implementar a chamada que atende essa trigger, retornando um array. API REST - Endpoints Personalizados
  13. API REST - Endpoints Personalizados add_action("rest_api_init", function() { register_rest_route('minha_api/v1', '/posts/',

    [ 'methods' => 'GET', 'callback' => 'get_meus_dados', 'args' => [ 'timestamp', 'titulo' ] ]); }); Adicionar uma nova ação na trigger ‘rest_api_init’ php
  14. API REST - Endpoints Personalizados function get_meus_dados(WP_REST_Request $request) { return

    [ 'horario' => $request['timestamp'], 'titulo' => $request['titulo'] ]; } Implementar a chamada e retornar um array. php
  15. API REST - Endpoints Personalizados >>> import requests >>> r

    = requests.get("http://www.wordpressapi.local/wp-json/minha_api/v1/posts/?timestamp=1234") >>> r.json() {u'horario': u'1234', u'titulo': None} >>> r = requests.get("http://www.wordpressapi.local/wp-json/minha_api/v1/posts/? timestamp=1234&titulo=grupysp") >>> r.json() {u'horario': u'1234', u'titulo': u'grupysp'} Saída / testes: python