SlideShare a Scribd company logo
1 of 37
Desarrollando un API en REST 10/2009 http://twitter.com/alexpuig #phpbcn2009
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
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
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?
[object Object],[object Object],Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
Qué no es REST ,[object Object]
Una tecnología concreta
Una especificación REST   ,[object Object]
Actualmente se utiliza para definir una Interfaz web simple (no basada en patrones de intercambio de mensajes) ,[object Object]
Permite la portabilidad entre plataformas y lenguajes Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
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
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
Introducción Teórica  Ejemplo PHP con CURL $user = 'YOUREMAILADDRESS';            $password = 'YOURPASSWORD';               $ch = curl_init(&quot;https://twitter.com/statuses/user_timeline.xml&quot;);            curl_setopt($ch, CURLOPT_HEADER, 1);            curl_setopt($ch,CURLOPT_TIMEOUT, 30);            curl_setopt($ch,CURLOPT_USERPWD,$user . &quot;:&quot; . $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
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
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=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <methodResponse> <params> <param> <value><string>[result]</string></value> </param> </params> </methodResponse>   Llamada Respuesta Desarrollando una API en REST PHP Barcelona 09
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=&quot;http://www.w3.org/1999/XMLSchema-instance&quot;  xmlns:xsd=&quot;http://www.w3.org/1999/XMLSchema&quot; >  <s:Body> <x:ApiRequest xmlns:x=&quot;urn:flickr&quot;> <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
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
[object Object]
Identificadores de recursos
Representaciones
Operadores
Códigos de respuesta Terminología REST Desarrollando una API en REST PHP Barcelona 09
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
[object Object]
Los identificadores no cambian (o no deberían)
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
- 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
XML, PHP, JSON and JSONP. Esper... ¿JsonP? Json con Padding para solucionar un problema : AJAX crossDomain ({ &quot;propiedad1&quot; : &quot;valor1&quot;, &quot;propiedad2&quot; : &quot;valor2&quot; }) FuncionPuente ({ &quot;propiedad1&quot; : &quot;valor1&quot;, &quot;propiedad2&quot; : &quot;valor2&quot; }) JSON JSONP Terminología :  Representaciones window.document.write(' <script src=&quot; http://api.yoursite.com/res1.jsonp?callback=funcionCallback &quot;><!--mce:0--></script> &quot;); var funcionCallback = function( json ) { alert(json.propiedad1); alert(json.propiedad2); } Desarrollando una API en REST PHP Barcelona 09
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
[object Object]
201 Created
202 Accepted
301 Moved Permanently
400 Bad Request
401 Unauthorised
402 Payment Required

More Related Content

What's hot

Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP TutorialLorna Mitchell
 
Spring Security
Spring SecuritySpring Security
Spring SecuritySumit Gole
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootJosué Neis
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practicesAnkita Mahajan
 
Deploying WSO2 API Manager in Production-Grade Kubernetes
Deploying WSO2 API Manager in Production-Grade KubernetesDeploying WSO2 API Manager in Production-Grade Kubernetes
Deploying WSO2 API Manager in Production-Grade KubernetesWSO2
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)Ian Choi
 
Learn REST in 18 Slides
Learn REST in 18 SlidesLearn REST in 18 Slides
Learn REST in 18 SlidesSuraj Gupta
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to AnsibleCoreStack
 
Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3Paradigma Digital
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with SpringJoshua Long
 
Observability in Java: Getting Started with OpenTelemetry
Observability in Java: Getting Started with OpenTelemetryObservability in Java: Getting Started with OpenTelemetry
Observability in Java: Getting Started with OpenTelemetryDevOps.com
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentGabriel Walt
 

What's hot (20)

Web Services PHP Tutorial
Web Services PHP TutorialWeb Services PHP Tutorial
Web Services PHP Tutorial
 
9.laravel
9.laravel9.laravel
9.laravel
 
Spring Security
Spring SecuritySpring Security
Spring Security
 
RESTful Web Services
RESTful Web ServicesRESTful Web Services
RESTful Web Services
 
CQRS + Event Sourcing in PHP
CQRS + Event Sourcing in PHPCQRS + Event Sourcing in PHP
CQRS + Event Sourcing in PHP
 
PUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBootPUC SE Day 2019 - SpringBoot
PUC SE Day 2019 - SpringBoot
 
JSON
JSONJSON
JSON
 
Rest api standards and best practices
Rest api standards and best practicesRest api standards and best practices
Rest api standards and best practices
 
Deploying WSO2 API Manager in Production-Grade Kubernetes
Deploying WSO2 API Manager in Production-Grade KubernetesDeploying WSO2 API Manager in Production-Grade Kubernetes
Deploying WSO2 API Manager in Production-Grade Kubernetes
 
OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)OpenStack DevStack Install - 2부 (Multi-nodes)
OpenStack DevStack Install - 2부 (Multi-nodes)
 
Learn REST in 18 Slides
Learn REST in 18 SlidesLearn REST in 18 Slides
Learn REST in 18 Slides
 
Introduction to Ansible
Introduction to AnsibleIntroduction to Ansible
Introduction to Ansible
 
Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3Introducción a HTML5 y CSS3
Introducción a HTML5 y CSS3
 
REST APIs with Spring
REST APIs with SpringREST APIs with Spring
REST APIs with Spring
 
Observability in Java: Getting Started with OpenTelemetry
Observability in Java: Getting Started with OpenTelemetryObservability in Java: Getting Started with OpenTelemetry
Observability in Java: Getting Started with OpenTelemetry
 
CSS - CSS3
CSS - CSS3CSS - CSS3
CSS - CSS3
 
Java J2EE
Java J2EEJava J2EE
Java J2EE
 
REST in Peace
REST in PeaceREST in Peace
REST in Peace
 
HTML5
HTML5HTML5
HTML5
 
AEM Best Practices for Component Development
AEM Best Practices for Component DevelopmentAEM Best Practices for Component Development
AEM Best Practices for Component Development
 

Similar to Desarrollando un API con REST

Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Joaquín Salvachúa
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Phputs
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)Daryl Moreno
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTBEEVA_es
 
Desarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootDesarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootCloudAppi
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxLuisTenorio42
 
Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Juan Pablo
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web ServicesLuis Fernando Aguas Bucheli
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARMarcos Martinez
 
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptxArquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptxXavierNavia
 
Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013Juan Carlos Gonzalez
 

Similar to Desarrollando un API con REST (20)

Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios Ruby y las arquitecturas orientadas a servicios
Ruby y las arquitecturas orientadas a servicios
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Introduccion A Php
Introduccion A PhpIntroduccion A Php
Introduccion A Php
 
Semana 7 Servicios Web REST con MongoDB final
Semana 7   Servicios Web REST con MongoDB finalSemana 7   Servicios Web REST con MongoDB final
Semana 7 Servicios Web REST con MongoDB final
 
API REST conceptos (Rails-api)
API REST conceptos (Rails-api)API REST conceptos (Rails-api)
API REST conceptos (Rails-api)
 
WORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API RESTWORKSHOP I: Introducción a API REST
WORKSHOP I: Introducción a API REST
 
OpenAPI 3.0.2
OpenAPI 3.0.2OpenAPI 3.0.2
OpenAPI 3.0.2
 
Introducción a ASP.NET Web API
Introducción a ASP.NET Web APIIntroducción a ASP.NET Web API
Introducción a ASP.NET Web API
 
Servicios web Extendido_error perl
Servicios web Extendido_error perlServicios web Extendido_error perl
Servicios web Extendido_error perl
 
Desarrolla tu primera api con spring boot
Desarrolla tu primera api con spring bootDesarrolla tu primera api con spring boot
Desarrolla tu primera api con spring boot
 
Servicios web java, php, perl, google
Servicios web java, php, perl, googleServicios web java, php, perl, google
Servicios web java, php, perl, google
 
Integración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptxIntegración de Tecnologías y Plataformas.pptx
Integración de Tecnologías y Plataformas.pptx
 
Introducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLCIntroducción a REST - SymfonyVLC
Introducción a REST - SymfonyVLC
 
Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010Exprimiendo SharePoint 2010
Exprimiendo SharePoint 2010
 
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
10-Unidad 3: Diseños de Vista-3.2 Usos Web Services
 
Construcción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEARConstrucción de Frameworks a partir de Smarty y PEAR
Construcción de Frameworks a partir de Smarty y PEAR
 
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptxArquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
Arquitectura-orientada-a-Servicios.-v-2017.01-Prof.-L.-Straccia.pptx
 
Desarrollo web
Desarrollo webDesarrollo web
Desarrollo web
 
Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013Novedades en Desarrollo en SharePoint 2013
Novedades en Desarrollo en SharePoint 2013
 

More from Alex Puig

Inventando métricas en Social Media
Inventando métricas en Social MediaInventando métricas en Social Media
Inventando métricas en Social MediaAlex Puig
 
Optimizando tu perfil de Linkedin
Optimizando tu perfil de LinkedinOptimizando tu perfil de Linkedin
Optimizando tu perfil de LinkedinAlex Puig
 
¿Por qué los trabajadores de Google son más productivos?
¿Por qué los trabajadores de Google son más productivos?¿Por qué los trabajadores de Google son más productivos?
¿Por qué los trabajadores de Google son más productivos?Alex Puig
 
Introducció de Twitter per a empreses
Introducció de Twitter per a empresesIntroducció de Twitter per a empreses
Introducció de Twitter per a empresesAlex Puig
 
Promociona tu marca en Internet
Promociona tu marca en InternetPromociona tu marca en Internet
Promociona tu marca en InternetAlex Puig
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web EscalableAlex Puig
 

More from Alex Puig (6)

Inventando métricas en Social Media
Inventando métricas en Social MediaInventando métricas en Social Media
Inventando métricas en Social Media
 
Optimizando tu perfil de Linkedin
Optimizando tu perfil de LinkedinOptimizando tu perfil de Linkedin
Optimizando tu perfil de Linkedin
 
¿Por qué los trabajadores de Google son más productivos?
¿Por qué los trabajadores de Google son más productivos?¿Por qué los trabajadores de Google son más productivos?
¿Por qué los trabajadores de Google son más productivos?
 
Introducció de Twitter per a empreses
Introducció de Twitter per a empresesIntroducció de Twitter per a empreses
Introducció de Twitter per a empreses
 
Promociona tu marca en Internet
Promociona tu marca en InternetPromociona tu marca en Internet
Promociona tu marca en Internet
 
Softonic Labs - Web Escalable
Softonic Labs - Web EscalableSoftonic Labs - Web Escalable
Softonic Labs - Web Escalable
 

Recently uploaded

David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDAVIDROBERTOGALLEGOS
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024u20211198540
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdfBetianaJuarez1
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar24roberto21
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerenciacubillannoly
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfFernandoOblitasVivan
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docxobandopaula444
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxhasbleidit
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdfsharitcalderon04
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointValerioIvanDePazLoja
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersIván López Martín
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfcristianrb0324
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxkimontey
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)JuanStevenTrujilloCh
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadEduardoSantiagoSegov
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfKarinaCambero3
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armadob7fwtwtfxf
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfedepmariaperez
 

Recently uploaded (20)

David_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptxDavid_Gallegos - tarea de la sesión 11.pptx
David_Gallegos - tarea de la sesión 11.pptx
 
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
Inteligencia Artificial. Matheo Hernandez Serrano USCO 2024
 
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
_Planificacion Anual NTICX 2024.SEC.21.4.1.docx.pdf
 
Actividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolarActividades de computación para alumnos de preescolar
Actividades de computación para alumnos de preescolar
 
Slideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan GerenciaSlideshare y Scribd - Noli Cubillan Gerencia
Slideshare y Scribd - Noli Cubillan Gerencia
 
certificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdfcertificado de oracle academy cetrificado.pdf
certificado de oracle academy cetrificado.pdf
 
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docxTALLER DE ANALISIS SOLUCION  PART 2 (1)-1.docx
TALLER DE ANALISIS SOLUCION PART 2 (1)-1.docx
 
El camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVPEl camino a convertirse en Microsoft MVP
El camino a convertirse en Microsoft MVP
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docxPLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
PLANEACION DE CLASES TEMA TIPOS DE FAMILIA.docx
 
Análisis de Artefactos Tecnologicos (3) (1).pdf
Análisis de Artefactos Tecnologicos  (3) (1).pdfAnálisis de Artefactos Tecnologicos  (3) (1).pdf
Análisis de Artefactos Tecnologicos (3) (1).pdf
 
Trabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power PointTrabajando con Formasy Smart art en power Point
Trabajando con Formasy Smart art en power Point
 
CommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 TestcontainersCommitConf 2024 - Spring Boot <3 Testcontainers
CommitConf 2024 - Spring Boot <3 Testcontainers
 
La electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdfLa electricidad y la electronica.10-7.pdf
La electricidad y la electronica.10-7.pdf
 
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptxLINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
LINEA DE TIEMPO LITERATURA DIFERENCIADO LITERATURA.pptx
 
Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)Análisis de los artefactos (nintendo NES)
Análisis de los artefactos (nintendo NES)
 
La tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedadLa tecnología y su impacto en la sociedad
La tecnología y su impacto en la sociedad
 
Herramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdfHerramientas que posibilitan la información y la investigación.pdf
Herramientas que posibilitan la información y la investigación.pdf
 
Viguetas Pretensadas en concreto armado
Viguetas Pretensadas  en concreto armadoViguetas Pretensadas  en concreto armado
Viguetas Pretensadas en concreto armado
 
Trabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdfTrabajo de tecnología excel avanzado.pdf
Trabajo de tecnología excel avanzado.pdf
 

Desarrollando un API con REST

  • 1. Desarrollando un API en REST 10/2009 http://twitter.com/alexpuig #phpbcn2009
  • 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?
  • 5.
  • 6.
  • 8.
  • 9.
  • 10. Permite la portabilidad entre plataformas y lenguajes Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
  • 11. Introducción Teórica Desarrollando una API en REST PHP Barcelona 09
  • 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(&quot;https://twitter.com/statuses/user_timeline.xml&quot;);            curl_setopt($ch, CURLOPT_HEADER, 1);            curl_setopt($ch,CURLOPT_TIMEOUT, 30);            curl_setopt($ch,CURLOPT_USERPWD,$user . &quot;:&quot; . $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=&quot;1.0&quot; encoding=&quot;utf-8&quot; ?> <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=&quot;http://www.w3.org/1999/XMLSchema-instance&quot; xmlns:xsd=&quot;http://www.w3.org/1999/XMLSchema&quot; > <s:Body> <x:ApiRequest xmlns:x=&quot;urn:flickr&quot;> <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
  • 19.
  • 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
  • 25.
  • 26. Los identificadores no cambian (o no deberían)
  • 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 ({ &quot;propiedad1&quot; : &quot;valor1&quot;, &quot;propiedad2&quot; : &quot;valor2&quot; }) FuncionPuente ({ &quot;propiedad1&quot; : &quot;valor1&quot;, &quot;propiedad2&quot; : &quot;valor2&quot; }) JSON JSONP Terminología : Representaciones window.document.write(' <script src=&quot; http://api.yoursite.com/res1.jsonp?callback=funcionCallback &quot;><!--mce:0--></script> &quot;); 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
  • 31.
  • 40. 405 Method Not Allowed
  • 42. 501 Not Implemented Terminología : Operadores (HTTP Response Codes) Desarrollando una API en REST PHP Barcelona 09
  • 43. Sí, Bueno, vale, de acuerdo…. Pero cómo lo desarrollo? Estructura Desarrollando una API en REST PHP Barcelona 09
  • 44.
  • 45. TDD : Test Driven Development
  • 47.
  • 48. Controlador principal para generar el formato deseado
  • 49. Controladores que agrupen funcionalidades comunes
  • 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
  • 59.
  • 62. http://www.3scale.com 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
  • 65. Herramientas existentes http://www.recessframework.org/ http://tonic.sourceforge.net/ http://wso2.org/projects/wsf/ http://framework.zend.com Recursos Frameworks Desarrollando una API en REST PHP Barcelona 09
  • 66.
  • 67. [email_address] Labs Developer en Softonic Twitter : @alexpuig Blog : http://www.alexpuig.es Muchas Gracias! Desarrollando una API en REST PHP Barcelona 09