Slide 1

Slide 1 text

Wordpress API REST Erick Müller - @ehriq Grupy-SP Junho 2016

Slide 2

Slide 2 text

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.

Slide 3

Slide 3 text

tem uma base instalada significativa. é simples para o usuário. agora dá pra usar com python! Wordpress numa apresentação de Python?

Slide 4

Slide 4 text

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.

Slide 5

Slide 5 text

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?

Slide 6

Slide 6 text

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).

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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'

Bem-vindo ao WordPress. Esse \xe9 o seu primeiro post. Edite-o ou exclua-o, e ent\xe3o comece a escrever!

\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'

Bem-vindo ao WordPress. Esse \xe9 o seu primeiro post. Edite-o ou exclua-o, e ent\xe3o comece a escrever!

\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

Slide 9

Slide 9 text

[ { "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": "

Bem-vindo ao WordPress. Esse é o seu primeiro post. Edite-o ou exclua-o, e então comece a escrever!

\n" }, (...) API REST - Exemplos json

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

Autenticação API REST - Exemplos http://v2.wp-api.org/guide/authentication/ Métodos - Cookie - OAuth - Application Passwords (por plugin) - Basic Authentication

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

Exemplo ao vivo! API REST - Exemplos

Slide 18

Slide 18 text

http://v2.wp-api.org Referências http://tableless.com.br/rest-json- wp-api-e-o-futuro-do-wordpress/

Slide 19

Slide 19 text

Obrigado! [email protected] http://www.tekniq.com.br twitter: @ehriq