2. 2
<?php
Jaime Fernández
Desarrollador apps nativas en iOS con
Swift y en Android con Java / Kotlin.
Como freelance desde 2015.
@jaimefere en Twitter.
WordPress como back-end de nuestras apps jaimefere.es
6. Feria del Empleo
en la Era Digital
WordPress como back-end de nuestras apps jaimefere.es
6
App para acercar a candidatos y
empresas accediendo a los perfiles
registrados en un formulario del
WordPress.
8. Mejorando prácticas
functions.php
Las credenciales de la
base de datos no salen
del servidor pero los
cambios en el tema
afectan a las apps.
child-themes
Los cambios en el tema
no afectan a las apps
pero un cambio de tema
sí.
plugins
Trabaja de forma
independiente al tema y
se puede activar /
desactivar.
8
WordPress como back-end de nuestras apps jaimefere.es
9. WordPress
REST API
Entró en el core de WordPress en
enero de 2017.
9
WordPress como back-end de nuestras apps jaimefere.es
10. API: Interfaz de Programación
de Aplicaciones
WordPress como back-end de nuestras apps jaimefere.es
10
↔ ↔
Conjunto de subrutinas, funciones,
métodos y procedimientos que ofrece
cierta biblioteca para ser utilizado por otro
software como una capa de abstracción.
11. {"name":"Feria del Empleo FEED","description":"Empleo en la Era
Digital","url":"http://feriadelempleo.es","home":"https://feriad
elempleo.es","gmt_offset":"0","timezone_string":"","namespaces":["oe
mbed/1.0","2fa/v1","wordfence/v1","tests/v5","feed/v5","wp/v2"
],"authentication":[],"routes":{"/":{"namespace":"","methods":["GET
"],"endpoints":[{"methods":["GET"],"args":{"context":{"required":fal
se,"default":"view"}}}],"_links":{"self":"https://feriadelempleo.e
s/wp-json/"}},"/oembed/1.0":{"namespace":"oembed/1.0","methods"
:["GET"],"endpoints":[{"methods":["GET"],"args":{"namespace":{"requi
red":false,"default":"oembed/1.0"},"context":{"required":false,"def
ault":"view"}}}],"_links":{"self":"https://feriadelempleo.es/wp-j
son/oembed/1.0"}},"/oembed/1.0/embed":{"namespace":"oembed/1.0
","methods":["GET"],"endpoints":[{"methods":["GET"],"args":{"url":{"
required":true},"format":{"required":false,"default":"json"},"maxwid
th":{"required":false,"default":600}}}],"_links":{"self":"https://
feriadelempleo.es/wp-json/oembed/1.0/embed"}},"/oembed/1.0/pr
oxy":{"namespace":"oembed/1.0","methods":["GET"],"endpoints":[{"met
hods":["GET"],...
11
Ejemplo de
respuesta en
miweb.com/wp-json
(en bruto)
/wp-json
WordPress como back-end de nuestras apps jaimefere.es
12. {
"name": "Feria del Empleo FEED",
"description": "Empleo en la Era Digital",
"url": "http://feriadelempleo.es",
"namespaces": ["oembed/1.0","jwt-auth/v1","feed/v5","wp/v2"],
"authentication": [ "oauth1" : {...} ],
"routes": {
"/wp/v2/posts": {
"namespace": "wp/v2",
"methods": [ “GET”, ”POST” ],
"endpoints": [2],
"_links": {
"self": "https://feriadelempleo.es/wp-json/wp/v2/posts"
}
}
},
"_links": {...}
}
12
Ejemplo de
respuesta en
miweb.com/wp-json
(formateado)
/wp-json
WordPress como back-end de nuestras apps jaimefere.es
13. class WCMad_Rest_Server extends WP_REST_Controller {
public function register_routes() {
$namespace = "wcmad/v1";
register_rest_route($namespace, '/fecha', array(
array(
'methods' => 'GET', // 'POST' 'PUT' 'DELETE'
'args' => array( 'año' => array('required' => true) )
'callback' => array($this, 'get_fecha')
)
));
}
public function hook_rest_server(){
add_action('rest_api_init', array($this, 'register_routes'));
}
public function get_fecha(WP_REST_Request $request){
$año = $request->get_param('año');
return new WP_REST_Response("6 de abril de $año", 200);
}
}
$wcmad_rest_server = new WCMad_Rest_Server();
$wcmad_rest_server->hook_rest_server();
13
Custom
endpoint
WordPress como back-end de nuestras apps jaimefere.es
Código completo
14. class WCMad_Rest_Server extends WP_REST_Controller {
public function register_routes() {
$namespace = "wcmad/v1";
register_rest_route($namespace, '/fecha', array(
array(
'methods' => 'GET', // 'POST' 'PUT' 'DELETE'
'args' => array('año' => array('required' => true))
'callback' => array($this, 'get_fecha')
)
));
}
public function hook_rest_server(){
add_action('rest_api_init', array($this, 'register_routes'));
}
public function get_fecha(WP_REST_Request $request){
$año = $request->get_param('año');
return new WP_REST_Response("6 de abril de $año", 200);
}
}
$wcmad_rest_server = new WCMad_Rest_Server();
$wcmad_rest_server->hook_rest_server();
14
Namespace
WordPress como back-end de nuestras apps jaimefere.es
Path, método,
parámetros y función
para devolver
resultado
15. class WCMad_Rest_Server extends WP_REST_Controller {
public function register_routes() {
register_rest_route("wcmad/v19", '/fecha', array(
array(
'methods' => 'GET', // 'POST' 'PUT' 'DELETE'
'args' => array( 'año' => array('required' => true) )
'callback' => array($this, 'get_fecha')
)
));
}
public function hook_rest_server(){
add_action('rest_api_init',
array($this, 'register_routes'));
}
public function get_fecha(WP_REST_Request $request){
$año = $request->get_param('año');
return new WP_REST_Response("6 de abril de $año", 200);
}
}
$wcmad_rest_server = new WCMad_Rest_Server();
$wcmad_rest_server->hook_rest_server();
15
WordPress como back-end de nuestras apps jaimefere.es
Registro
Se publica para ser
usado por las apps
16. Seguridad
Cookie (plugin)
Basic Authorization.
Usuario y contraseña en base64
en la cabecera de la llamada
Application password
Basic Authorization.
La clave (password) puede ser
renovada.
16
WordPress como back-end de nuestras apps jaimefere.es
OAuth 1.0a
Intercambio de tokens.
Token temporal -> permiso
usuario -> token larga duración
JSON Web Tokens
Standard RFC 7519
Usuario y contraseña solo en la
llamada que pide el token.
17. public function register_routes() {
register_rest_route("wcmad/v1", '/privado', array(
array(
'methods' => 'GET',
'callback' => array($this, 'get_datos_privados'),
'permission_callback' => 'chequear_permisos'
)
));
}
public function chequear_permisos(){
if( ! current_user_can( ... )){
return new WP_Error('rest_error', __('Error'));
}
return true;
}
public function get_datos_privados(){
return new WP_REST_Response(..., 200);
}
17
permission_callback
controla los permisos
de quien hace la
llamada
Permisos
WordPress como back-end de nuestras apps jaimefere.es
19. Para ser un MBaaS
19
Estadísticas de usoAnalíticas
Librería para otras
plataformas
SDKWP REST APIAPI
MySQLBase de datos
/wp-content/uploadsAlmacenamiento
Usuarios y roles
Servicios de
autenticación
Trabajos CRON
Automatización de
tareas
WordPress como back-end de nuestras apps jaimefere.es
Panel de
administración
Dashboard
Desde PHP se puedeNotificaciones push
Informe de errores y
cierres
Crashes
21. Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
21
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
22. Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
22
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
23. Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
23
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
24. register_rest_route('twhilo/v1', '/hilo', array(
array(
'methods' => WP_REST_Server::READABLE,
'args' => array('id_tuit' =>
array('required' => true))
'callback' => array($this, 'get_hilo'),
'permission_callback' => 'llamada_desde_app'
)
));
public function llamada_desde_app(){ }
public function get_hilo(){
$id_tuit = $request->get_param(id_tuit);
if( mira en MySQL si $id_tuit es respuesta de un hilo ){
return $hilo;
} else {
// pregunta a Twitter si el tuit pertenece a un hilo
return $hilo o "no es hilo";
}
}
24
Código ejemplo
namespace y
endpoint propios
WP
REST API
WordPress como back-end de nuestras apps jaimefere.es
25. 25WordPress como back-end de nuestras apps jaimefere.es
Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
Twhilo
26. Recursos
Enlaces a elementos de interés:
● Mobile Backend as a Service (Wikipedia)
● Autenticación: OAuth, Application
passwords y JSON Web Tokens
● Envío de notificaciones push con PHP
● App Twhilo (Apple Store)
26
WordPress como back-end de nuestras apps jaimefere.es
27. ?>
¿Preguntas?
Por poco tiempo o mucha vergüenza en:
● @jaimefere
● info@jaimefere.es
● jaimefere.es/#contact
27
¡Muchas gracias!
WordPress como back-end de nuestras apps jaimefere.es