WordPress
como back-end
de nuestras
apps
@jaimefere jaimefere.es
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
Apartados
3
1
D
etonante
2
W
ordPress
com
o
servidor
3
¿M
obile
Backend
as
a
Service?
4
Ejem
plo
de
app,Tw
hilo
WordPress como back-end de nuestras apps jaimefere.es
1.
Detonante
WordPress como back-end de nuestras apps jaimefere.es
Servicios cloud
5
WordPress como back-end de nuestras apps jaimefere.es
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.
2.
WordPress
como servidor
WordPress como back-end de nuestras apps jaimefere.es
7
↔ ↔
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
WordPress
REST API
Entró en el core de WordPress en
enero de 2017.
9
WordPress como back-end de nuestras apps jaimefere.es
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.
{"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
{
"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
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
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
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
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.
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
3.
¿MBaaS:
Mobile Backend
as a Service?
WordPress como back-end de nuestras apps jaimefere.es
18
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
4.
Ejemplo de app,
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
20
Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
21
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
22
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
23
Twhilo
WordPress como back-end de nuestras apps jaimefere.es
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
25WordPress como back-end de nuestras apps jaimefere.es
Hilos de Twitter en
formato artículo.
Del microbloging al
blogging.
Twhilo
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
?>
¿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

WordPress como back-end de nuestras apps

  • 1.
  • 2.
    2 <?php Jaime Fernández Desarrollador appsnativas 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
  • 3.
  • 4.
    1. Detonante WordPress como back-endde nuestras apps jaimefere.es
  • 5.
    Servicios cloud 5 WordPress comoback-end de nuestras apps jaimefere.es
  • 6.
    Feria del Empleo enla 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.
  • 7.
    2. WordPress como servidor WordPress comoback-end de nuestras apps jaimefere.es 7 ↔ ↔
  • 8.
    Mejorando prácticas functions.php Las credencialesde 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ó enel core de WordPress en enero de 2017. 9 WordPress como back-end de nuestras apps jaimefere.es
  • 10.
    API: Interfaz deProgramació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 EmpleoFEED","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 delEmpleo 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 extendsWP_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 extendsWP_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 extendsWP_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. Usuarioy 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
  • 18.
    3. ¿MBaaS: Mobile Backend as aService? WordPress como back-end de nuestras apps jaimefere.es 18
  • 19.
    Para ser unMBaaS 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
  • 20.
    4. Ejemplo de app, Twhilo WordPresscomo back-end de nuestras apps jaimefere.es 20
  • 21.
    Hilos de Twitteren formato artículo. Del microbloging al blogging. 21 Twhilo WordPress como back-end de nuestras apps jaimefere.es
  • 22.
    Hilos de Twitteren formato artículo. Del microbloging al blogging. 22 Twhilo WordPress como back-end de nuestras apps jaimefere.es
  • 23.
    Hilos de Twitteren 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-endde nuestras apps jaimefere.es Hilos de Twitter en formato artículo. Del microbloging al blogging. Twhilo
  • 26.
    Recursos Enlaces a elementosde 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 tiempoo mucha vergüenza en: ● @jaimefere ● info@jaimefere.es ● jaimefere.es/#contact 27 ¡Muchas gracias! WordPress como back-end de nuestras apps jaimefere.es