Transparencias que tratan cómo acceder a los datos de las peticiones bajo los distintos métodos HTTP y cómo servir distintos formatos de datos, además del consumo de servicios web.
Usado en el Curso de Extensión Universitaria "Desarrollo de aplicaciones web mediante servicios web y APIs abiertas" de la Universidad de Oviedo: http://directo.uniovi.es/postgrado/cabecera_ep.asp?Curso=2008&IdPrograma=5187
GUIA DE TEXTOS EDUCATIVOS SANTILLANA PARA SECUNDARIA
Servicio y Consumo de Servicios REST en PHP
1. REST en PHP
David J.
Brenes
Martínez
Desarrollador
Servicios Web REST con PHP en Grupo
Índigo
Servir REST
Lo Básico
David J. Brenes Martínez Métodos HTTP
Formatos de datos
Desarrollador en Grupo Índigo Consumir
Servicios
REST
Curso de Extensión Universitaria PHP y HTTP
Desarrollo de aplicaciones web mediante servicios web y APIs abiertas Rest con CouchDB
Rest con Twitter
Universidad de Oviedo
Extras
OAuth
2009/07/20 Frameworks REST
Conclusiones
Créditos y
Licencia
2. ¿Qué es PHP?
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Lenguaje interpretado en el Servidor Web Servir REST
Lo Básico
Su salida estándar es la Respuesta HTTP Métodos HTTP
Formatos de datos
‘print’ o ‘echo’ escriben directamente en la respuesta Consumir
Servicios
De este modo se sirven páginas web REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
3. Devolviendo datos
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Mostrando datos por la respuesta HTTP Lo Básico
Métodos HTTP
echo "Hello World!!"; Formatos de datos
print "Hello World!!"; Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
4. Devolviendo datos
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Mostrando estructuras en la respuesta HTTP
Servir REST
$hello = array("hello", "world"); Lo Básico
Métodos HTTP
print_r($hello); Formatos de datos
Consumir
$hello = array("hello" => "world"); Servicios
REST
var_dump($hello); PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
5. Extensión Poster
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Extensión para Firefox que realiza peticiones HTTP Servir REST
Lo Básico
Ideal para depurar servicios REST Métodos HTTP
Formatos de datos
https://addons.mozilla.org/en-US/ Consumir
Servicios
firefox/addon/2691 REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
6. Extensión Poster
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
URL del servicio web con sus parámetros Servir REST
Lo Básico
Content-type para post: Métodos HTTP
Formatos de datos
application/x-www-form-urlencoded Consumir
Servicios
‘Content to Send’: Mismo formato que en la URL REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
7. Petición GET
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Es el método más habitual de trabajo Lo Básico
Métodos HTTP
Los parámetros se mandan en la URL Formatos de datos
Consumir
Los parámetros se recogen en la variable $_GET. Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
8. Petición GET
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
http://url?param1=value1¶m2=value2 Índigo
Servir REST
Lo Básico
Accediendo a los parámetros GET Métodos HTTP
Formatos de datos
echo $_GET["param1"]; // => value1 Consumir
Servicios
// ... REST
PHP y HTTP
echo var_dump($_GET); // => array(2) { ["param1"]=> Rest con CouchDB
Rest con Twitter
string(6) "value1" ["param2"]=> string(6) "value2" } Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
9. Petición POST
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Es otro método habitual de trabajo Servir REST
Lo Básico
Usado en formularios web Métodos HTTP
Formatos de datos
Los parámetros se mandan en el cuerpo de la petición Consumir
Servicios
Los parámetros se recogen en la variable $_POST. REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
10. Petición POST
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Accediendo a los parámetros POST
Servir REST
echo $_POST["param1"]; // => value1 Lo Básico
Métodos HTTP
// ... Formatos de datos
Consumir
echo var_dump($_POST); // => array(2) { ["param1"]=> Servicios
REST
string(6) "value1" ["param2"]=> string(6) "value2" } PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
11. Petición PUT
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Método menos habitual de trabajo Índigo
Los parámetros se mandan en el cuerpo de la petición Servir REST
Lo Básico
No hay variable $_PUT Métodos HTTP
Formatos de datos
Los parámetros se recogen de la entrada estandar Consumir
Servicios
(php://input) REST
PHP y HTTP
Tendremos que leer la entrada estandar y procesar los Rest con CouchDB
Rest con Twitter
datos Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
12. Petición PUT
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Accediendo a la petición PUT Índigo
$putdata = fopen("php://input", "r"); Servir REST
$put_data = ""; Lo Básico
Métodos HTTP
while ($data = fread($putdata, 1024)) $put_data .= $data; Formatos de datos
Consumir
fclose($putdata); Servicios
REST
PHP y HTTP
Rest con CouchDB
Tenemos en $putdata los datos enviados Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
13. Petición PUT
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Procesando los datos de la petición PUT Servir REST
Lo Básico
parse_str($put_data); Métodos HTTP
Formatos de datos
Consumir
Servicios
parse_str convierte los datos del string en variables REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
14. Petición DELETE
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Método menos habitual de trabajo Lo Básico
Métodos HTTP
Los parámetros normalmente se mandan en la URL Formatos de datos
Consumir
No hay variable $_DELETE, se usa $_GET Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
15. Formatos soportados
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
REST no impone un formato Lo Básico
Métodos HTTP
Con PHP podemos mandar lo que queramos Formatos de datos
Consumir
Hay funciones especiales para XML y JSON Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
16. HTML
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Habitualmente se escribe con echo y print. Servir REST
Lo Básico
No suele ser necesaria ayuda extra para servir HTML Métodos HTTP
Formatos de datos
Bibliotecas: Tidy (http: Consumir
Servicios
//es.php.net/manual/en/book.tidy.php) REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
17. XML
REST en PHP
David J.
Brenes
Al igual que HTML, con echo y print. Martínez
Desarrollador
Existen bibliotecas de tratamiento de XML en Grupo
Índigo
Suelen ser más útiles para procesar XML que para
generarlo. Servir REST
Lo Básico
Permiten generar un arbol XML y volcarlo Métodos HTTP
Formatos de datos
Bibliotecas: Consumir
Servicios
DOM: REST
http://es.php.net/manual/en/book.dom.php PHP y HTTP
Rest con CouchDB
SimpleXML: http: Rest con Twitter
//es.php.net/manual/en/book.simplexml.php Extras
XSL: OAuth
Frameworks REST
http://es.php.net/manual/en/book.xsl.php Conclusiones
Créditos y
Licencia
18. JSON
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
PHP5 ofrece soporte directo para JSON
Servir REST
json_encode: Codifica una variable en formato JSON Lo Básico
json_decode: Genera una variable a partir de una Métodos HTTP
Formatos de datos
cadena JSON
Consumir
Servicios
Referencia: http: REST
//es.php.net/manual/en/book.json.php PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
19. Biblioteca cURL
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Biblioteca para realizar peticiones HTTP
Servir REST
En PHP5 activa por defecto Lo Básico
Métodos HTTP
Permite indicar proxy, método HTTP. . . Formatos de datos
Consumir
http: Servicios
REST
//es.php.net/manual/en/book.curl.php PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
20. Realizando la conexión
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Conexión GET mediante cURL Índigo
$conexion = curl_init();
Servir REST
curl_setopt($conexion, CURLOPT_RETURNTRANSFER, Lo Básico
Métodos HTTP
TRUE); Formatos de datos
curl_setopt($conexion, CURLOPT_HEADER, 0); Consumir
Servicios
curl_setopt($conexion, CURLOPT_URL, $url); REST
PHP y HTTP
$resultado = curl_exec($conexion); Rest con CouchDB
Rest con Twitter
curl_close($conexion); Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
21. Realizando la conexión
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Especificando proxy HTTP Lo Básico
Métodos HTTP
curl_setopt($conexion, CURLOPT_PROXY, Formatos de datos
’http://proxy.uniovi.es:8888’); Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
22. Realizando la conexión
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Eligiendo método HTTP Lo Básico
Métodos HTTP
curl_setopt($conexion, CURLOPT_CUSTOMREQUEST, Formatos de datos
$method); Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
23. Realizando la conexión
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Indicando los datos del cuerpo de la petición Lo Básico
Métodos HTTP
Formatos de datos
curl_setopt($conexion, CURLOPT_POSTFIELDS, $data);
Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
24. Sobre CouchDB
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Base de Datos Orientada a Documentos Lo Básico
Métodos HTTP
Formatos de datos
Implementa una API RESTful Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
25. Sobre la API de CouchDB
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
API basada en REST Lo Básico
Métodos HTTP
Soporta formato JSON para el intercambio de datos en Formatos de datos
las peticiones Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
26. Sobre Twitter
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Famoso servicio de microblogging Servir REST
API muy utilizada. Lo Básico
Métodos HTTP
Formatos de datos
Más peticiones por API que en la Web
Consumir
Decenas de clientes para muchas plataformas Servicios
(Nintendo DS) REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
27. Sobre la API de Twitter
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
API basada en REST
Soporta formatos XML y JSON para las peticiones Servir REST
Lo Básico
Exige autenticación para algunos métodos. Métodos HTTP
Formatos de datos
Tiene limitación de peticiones a realizar Consumir
Servicios
REST
PHP y HTTP
http://apiwiki.twitter.com/ Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
28. Problemática
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Algunas APIs requieren autenticación Índigo
Las aplicaciones deben conocer los detalles de Servir REST
autenticación Lo Básico
Métodos HTTP
Formatos de datos
¿A quién confias tus claves? Consumir
Servicios
REST
http://www.codinghorror.com/blog/archives/ PHP y HTTP
Rest con CouchDB
001072.html Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
29. Problemática
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Se requiere un método más seguro para las APIs
Las aplicaciones NO deben conocer los detalles de Servir REST
Lo Básico
autenticación Métodos HTTP
Formatos de datos
¿Cómo se autentican? Consumir
Servicios
REST
OAuth: http://oauth.net/ PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
30. Vocabulario
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servicio: La aplicación que provee el servicio
Servir REST
Consumidor: La aplicación que desea acceder a los Lo Básico
Métodos HTTP
recursos protegidos. Formatos de datos
Recursos protegidos: Aquella información en el Consumir
Servicios
servicio que requiere autenticación por parte del REST
PHP y HTTP
usuario. Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
31. Paso 1: Dar de alta el consumidor
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
El consumidor se registra en el servicio. Ejemplo: Servir REST
Lo Básico
https://twitter.com/oauth_clients Métodos HTTP
Formatos de datos
El consumidor obtiene una clave y una palabra secreta Consumir
Servicios
para identificarse REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
32. Paso 2: El consumidor solicita acceso a un
recurso
REST en PHP
David J.
Brenes
Martínez
Desarrollador
El consumidor solicita un token de acceso en Grupo
Índigo
Este token identifica el acceso de una aplicación a los
Servir REST
recursos protegidos de un usuario Lo Básico
Métodos HTTP
Se dirige al usuario a la página del servicio para que Formatos de datos
confirme que da acceso al consumidor Consumir
Servicios
REST
La página del servicio solicitará al usuario que se PHP y HTTP
autentique y que verifique el acceso Rest con CouchDB
Rest con Twitter
Si el usuario lo verifica, el token será aprobado Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
33. Paso 3: El consumidor recibe acceso a un
recurso
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
El usuario es enviado a la página del consumidor de Servir REST
Lo Básico
nuevo Métodos HTTP
Formatos de datos
El consumidor dispone ahora de un token válido para Consumir
Servicios
obtener los recursos protegidos REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
34. Conclusión
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
El usuario no ha tenido que dar sus credenciales de Servir REST
Lo Básico
acceso en sitios de terceros (consumidores) Métodos HTTP
Formatos de datos
El usuario sabe para qué ha dado permiso al Consumir
Servicios
consumidor REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
35. Implementaciones en PHP
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
OAuth-PHP: Lo Básico
Métodos HTTP
http://code.google.com/p/oauth-php/ Formatos de datos
Biblioteca para implementar consumidores y servicios Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
36. Pero... ¿Hay frameworks?
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
REST no detalla protocolos Lo Básico
Métodos HTTP
REST no describe formatos de intercambio de datos Formatos de datos
Consumir
¿Cómo puede haber frameworks? Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
37. Con más razón
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Las tareas REST son siempre las mismas
Servir REST
No son necesarias descripciones de servicios, ya que Lo Básico
Métodos HTTP
se permiten tan solo 4 operaciones Formatos de datos
Consumir
Las descripciones son necesarias para los recursos Servicios
REST
soportados PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
38. Tonic
REST en PHP
David J.
Brenes
Martínez
Desarrollador
http://tonic.sourceforge.net/ en Grupo
Índigo
Proceso de la Request e invocación de código para Servir REST
Lo Básico
cada método en cada recurso Métodos HTTP
Formatos de datos
Permite usar distintos adaptadores para enlazar el Consumir
framework con distintas fuentes de datos Servicios
REST
Ficheros locales PHP y HTTP
Rest con CouchDB
Bases de Datos Rest con Twitter
Otros servicios Web Extras
OAuth
Uso de Smarty para la representación de recursos Frameworks REST
Conclusiones
Créditos y
Licencia
39. Tonic
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Framework sencillo Lo Básico
Métodos HTTP
Formatos de datos
Buena documentación y ejemplos Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
40. PHPRestSQL
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
http://phprestsql.sourceforge.net/
Servir REST
Lo Básico
Métodos HTTP
Conector entre Base de Datos y Servicios Web Formatos de datos
Consumir
Necesita configurar la base de datos a la que se debe Servicios
REST
acceder PHP y HTTP
Rest con CouchDB
Realiza todo el CRUD para la Base de Datos Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
41. PHPRestSQL
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Permite intercambiar datos en XML, HTML y texto Lo Básico
Métodos HTTP
plano Formatos de datos
Facilmente ampliable a otros formatos (JSON) Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
42. Servir Servicios REST
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
No más complicado que realizar una página web Servir REST
Lo Básico
Complicación por falta de soporte para algunos Métodos HTTP
Formatos de datos
métodos (PUT) Consumir
Servicios
Soporte para diversos formatos REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
43. Consumir Servicios REST
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Consumo sencillo (peticiones HTTP) Lo Básico
Métodos HTTP
Procesado de datos no automático Formatos de datos
Consumir
Falta de descripción => Sobrecarga de documentación Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
44. ¿Otros?
REST en PHP
David J.
Brenes
Martínez
Desarrollador
en Grupo
Índigo
Servir REST
Problemas de seguridad en la autorización Lo Básico
Métodos HTTP
Formatos de datos
Automatización de operaciones Consumir
Servicios
REST
PHP y HTTP
Rest con CouchDB
Rest con Twitter
Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia
45. Licencia
REST en PHP
David J.
Brenes
Martínez
Desarrollador
Estas transparencias se publican bajo licencia Creative en Grupo
Índigo
Commons y se pueden redistribuir o modificar bajo las
siguientes condiciones: Servir REST
Lo Básico
Se dé reconocimiento al autor de estas transparencias. Métodos HTTP
Formatos de datos
No se use con propósitos comerciales. Consumir
Servicios
REST
Se distribuya con la misma licencia. PHP y HTTP
Rest con CouchDB
Texto de la licencia: http: Rest con Twitter
//creativecommons.org/licenses/by-nc-sa/3.0/ Extras
OAuth
Frameworks REST
Conclusiones
Créditos y
Licencia