2. 1) Introducción Teórica 2) Terminología REST 3) Estructura 4) Recursos Desarrollando un API en REST Desarrollando una API en REST PHP Barcelona 09
3. API - interfaz de programación de aplicaciones La Transferencia de Estado Representacional (Representational State Transfer) o REST es una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
4. API - interfaz de programación de aplicaciones La Transferencia de Estado Representacional (Representational State Transfer) o REST es una técnica de arquitectura software para sistemas hipermedia distribuidos como la World Wide Web Introducción Teórica Desarrollando una API en REST PHP Barcelona 09 WTF?
12. La arquitectura se simplifica (rendimiento) Peticiones se simplifican (velocidad) Curva de aprendizaje inexistente Resultados visualmente interpretables Fácil escalabilidad y evolución de sus componentes Las funcionalidades pueden ser extendidas mediante widgets o scripts Simplicidad Introducción Teórica Ventajas de REST Desarrollando una API en REST PHP Barcelona 09
13. Introducción Teórica Ventajas de REST De accesos a Bases de datos complejas select projects.name as projname, cufiles.name as cuname, basefiles.name as basename, definefiles.name as defname from definers inner join projects on definers.pid = projects.pid inner join files as cufiles on definers.cuid=cufiles.fid inner join files as basefiles on definers.basefileid=basefiles.fid inner join files as definefiles on definers.definerid = definefiles.fid; WHERE projects.pid=51 A peticiones Simples : http://api.example.com/project-51 PHP Conference 2009 Desarrollando una API en REST - Introducción teórica
14. Introducción Teórica Ejemplo PHP con CURL $user = 'YOUREMAILADDRESS'; $password = 'YOURPASSWORD'; $ch = curl_init("https://twitter.com/statuses/user_timeline.xml"); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch,CURLOPT_TIMEOUT, 30); curl_setopt($ch,CURLOPT_USERPWD,$user . ":" . $password); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0); $result=curl_exec ($ch); $data = strstr($result, '<?'); $xml = new SimpleXMLElement($data); return $xml; Desarrollando una API en REST PHP Barcelona 09
15. La información es transferida de forma no optimizada según la aplicación Hacen falta múltiples llamadas para conseguir información compleja XML JSON PHP … Introducción Teórica Desventajas de REST Desarrollando una API en REST PHP Barcelona 09
16. RPC : Llamada a procedimiento remoto, es un protocolo que permite a un programa ejecutar código residente en otra máquina Introducción Teórica Alternativas a REST : RPC <methodCall> <methodName> function </methodName> <params> <param> <value> <struct> <member> <name> name </name> <value><string> value </string></value> </member> </struct> </value> </param> </params> </methodCall> <?xml version="1.0" encoding="utf-8" ?> <methodResponse> <params> <param> <value><string>[result]</string></value> </param> </params> </methodResponse> Llamada Respuesta Desarrollando una API en REST PHP Barcelona 09
17. SOAP : Define cómo dos objetos en diferentes procesos pueden comunicarse por medio de intercambio de datos XML <s:Envelope xmlns:s= http://www.w3.org/2003/05/soap-envelope xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema" > <s:Body> <x:ApiRequest xmlns:x="urn:flickr"> <method>api.test.echo</method> < name > value </ name > </x:ApiRequest> </s:Body> </s:Envelope> Llamada Introducción Teórica Alternativas a REST : SOAP Desarrollando una API en REST PHP Barcelona 09
18. REST es Mucho más sencillo REST es el equivalente a DBMS RPC/SOAP vendrían a ser los Stored procedures REST trata con recursos, SOA (Service Oriented Architecture) con acciones y servicios (trasladar complejidad al cliente o al servidor) (1) No IDLs (Interface Description Language) o WSDLs (Web Services Description Language) o WADL (Web Application Description Language) No son incompatibles, se pueden ofrecer las dos opciones Introducción Teórica ROA vs SOA (1) Pero se puede hacer Desarrollando una API en REST PHP Barcelona 09
23. Códigos de respuesta Terminología REST Desarrollando una API en REST PHP Barcelona 09
24. Toda información a la que se pueda dar un nombre es un recurso Los recursos son elementos de información Terminología : Recursos Desarrollando una API en REST PHP Barcelona 09
27. REST no especifica las URIs a utilizar Terminología : Identificadores de recursos http://twitter.com/statuses/show/ id . format http://vimeo.com/api/v2/username/request.output Desarrollando una API en REST PHP Barcelona 09
28. - Para manipular estos recursos, los componentes de la red (clientes y servidores) se comunican a través de un interfaz estándar (HTTP) e intercambian representaciones de estos recursos (los ficheros que se descargan y se envían) - Un recurso particular puede tener múltiples representaciones - Representaciones más comunes : html, xml, json… - Idealmente la representación debería ser negociada en los datos de control de la cabecera HTTP Terminología : Representaciones Desarrollando una API en REST PHP Barcelona 09
29. XML, PHP, JSON and JSONP. Esper... ¿JsonP? Json con Padding para solucionar un problema : AJAX crossDomain ({ "propiedad1" : "valor1", "propiedad2" : "valor2" }) FuncionPuente ({ "propiedad1" : "valor1", "propiedad2" : "valor2" }) JSON JSONP Terminología : Representaciones window.document.write(' <script src=" http://api.yoursite.com/res1.jsonp?callback=funcionCallback "><!--mce:0--></script> "); var funcionCallback = function( json ) { alert(json.propiedad1); alert(json.propiedad2); } Desarrollando una API en REST PHP Barcelona 09
30. GET Pedir información sobre un recurso POST Create : Comando al servidor para crear subordinados del recurso Update : Modificar subordinados del recurso PUT Create : Crear un nuevo recurso Update : Modificar el recurso DELETE Eliminar un recurso Terminología : Operadores GET/POST/PUT/DELETE != CRUD Desarrollando una API en REST PHP Barcelona 09
50. Modelos para acceso a los datos Estructura Desarrollando una API en REST PHP Barcelona 09
51.
52.
53.
54.
55. Estructura MVC Diagrama de flujo Dispatcher Parsear URI Válida En caché Error Controlador Modelo Vista Guarda en caché Mostrar Sí Sí No No Vista Desarrollando una API en REST PHP Barcelona 09
56. Estructura MVC Esquema aplicación A index.php parser.php error.php controller.class.php libros.php autores.php model.class.php autores.php libros.php Unit Testing config.php Seguridad Autentificación + Vista Controladores Modelos Desarrollando una API en REST PHP Barcelona 09
57. Estructura MVC Esquema aplicación B error.php controller.class.php libros.php autores.php model.class.php autores.php libros.php Unit Testing Autentificación + Vista + seguridad Controladores Modelos Desarrollando una API en REST PHP Barcelona 09
58. Estructura Caché Tu URI puede servir como identificador para la caché Memcached : http://www.danga.com/memcached/ $cache_id = $info[‘URI']; $memcached = new Memcache; $memcached->connect('hostname', 11211); if ( ($row = $memcached->get( $cache_id)) === false ) { // Get resource frrom DB into $row. $memcached->set( $cache_id, $row, MEMCACHE_COMPRESSED, time() + 3600); } echo $row; Desarrollando una API en REST PHP Barcelona 09
63. JSONView 0.3 Permite abrir documentos JSON en el navegador. https://addons.mozilla.org/es-ES/firefox/addon/10869 Recursos Test Tools Desarrollando una API en REST PHP Barcelona 09
64. RESTClient 1.2.8 Permite visualizar y testear servicios RESTful/WebDav. https://addons.mozilla.org/es-ES/firefox/addon/9780 Recursos Test Tools Desarrollando una API en REST PHP Barcelona 09
67. [email_address] Labs Developer en Softonic Twitter : @alexpuig Blog : http://www.alexpuig.es Muchas Gracias! Desarrollando una API en REST PHP Barcelona 09