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

Usando a API REST do Wordpress

Usando a API REST do Wordpress

Avatar for Erick Müller

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