Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Todo sobre mis APIs

En esta ocasión presentamos estrategias de desarrollo de APIs REST, así como los distintas herramientas y lenguajes de especificación que nos van a permitir generar código y documentación. También repasamos herramientas de testing para APIs.

Audiolibros relacionados

Gratis con una prueba de 30 días de Scribd

Ver todo
  • Sé el primero en comentar

Todo sobre mis APIs

  1. 1. Byteflair http://byteflair.com Daniel Cerecedo @dcerecedo Victor Hernandez @uvehachebe
  2. 2. AgendaAgenda Arquitectura ArquitecturaREST DeveloperUX RESTsobreHTTP HypermediaAPIs VistasAdaptativas Actualizaciones& Concurrencia I18n Lenguajesdeespecificación Herramientasdeprueba Byteflair
  3. 3. ArquitecturaArquitectura Byteflair
  4. 4. Separación de responsabilidades de presentación y procesamiento  Portabilidad de la interfaz de usuario  Simplicidad del servidor  Capacidad de modificar los componentes por separado ServidorCliente Byteflair Arquitectura RESTArquitectura REST Cliente/ServidorCliente/Servidor
  5. 5. Servidor Mensajes autodescriptivos: semántica, datos, metadatos y contexto Cliente2:Cliente Cliente1:Cliente  Visibilidad  Fiabilidad  Escalabilidad  Rendimiento de red  Control sobre el comportamiento del cliente Byteflair Arquitectura RESTArquitectura REST SinestadoSinestado
  6. 6. Cliente Elimina total o parcialmente algunas de las interacciones  Rendimiento de red  Rendimiento percibido por el usuario Cache Servidor Cache Byteflair Arquitectura RESTArquitectura REST CacheableCacheable
  7. 7. 1.Identificación por URIs 2.Mensajes autodescriptivos 3.Manipulación a través de representaciones 4.HATEOAS  Simplicidad Byteflair Arquitectura RESTArquitectura REST InterfazuniformeInterfazuniforme
  8. 8. Cliente Cada capa solo conoce a su vecina  Simplicidad  Latencia Cache Servidor Cache Proxy Cache Balanceador Byteflair Arquitectura RESTArquitectura REST PorcapasPorcapas
  9. 9. Developer UXDeveloper UX El desarrollador como destinatario del contenido, no los navegadores Byteflair
  10. 10. ¿Porqué REST sobre HTTP?¿Porqué REST sobre HTTP? Byteflair “Los límites de mi lenguaje son los límites de mi nundo” Todo el mundo habla HTTP LudwigWittgenstein
  11. 11. REST sobre HTTPREST sobre HTTP Separar la representación del recurso de los metadatos de la petición Representación Body→ Metadatos Headers→ Byteflair
  12. 12. REST sobre HTTPREST sobre HTTP Utiliza el HTTP Status Code para dar información acerca del resultado de la petición 2xx Ok→ 4xx Elclientehahechoalgomal→ 5xx Elservidorhafallado→ Byteflair
  13. 13. REST sobre HTTPREST sobre HTTP Utiliza los HTTP Status Codes existentes que mejor se adapten a la situación Añade información específica cuando se produzca un error Byteflair
  14. 14. REST sobre HTTPREST sobre HTTP Byteflair Error HTTP Error de negocio Error técnico
  15. 15. HypermediaHypermedia Byteflair
  16. 16. HypermediaHypermedia Byteflair
  17. 17. HypermediaHypermedia Byteflair
  18. 18. HypermediaHypermedia Modela el dominio del problema Identificalosrecursosdeldominio Identificalastransicionesdeestadodelsistema Distingueentreestructurainternayloqueexponescomorecurso Byteflair  ¡No expongas la base de datos!
  19. 19. HypermediaHypermedia Recursos del dominio Vehicles Drivers Users Owners Sessions Transiciones de estado Crearrecursos Filtrarrecursos Asignarconductoravehículo Activarsesión:conductor+vehículo Desactivarsesión Byteflair
  20. 20. HypermediaHypermedia Definir los formatos de representación Mime Types Definir roles para cada control hypermedia Rel Types Convenciones semánticas POST, PUT, GET, DELETE Byteflair
  21. 21. HypermediaHypermedia GET / Headers Link: <https://api.domain.com/vehicles>; rel=”vehicles”: <https://api.domain.com/users>; rel=”users”: <https://api.domain.com/sessions>; rel=”sessions” Body ... Byteflair
  22. 22. HypermediaHypermedia GET /vehicles Headers Link: <https://api.domain.com/vehicles?page=1&size=20>; rel=”next” Body [ {...}, {…}, ...] Control links Byteflair
  23. 23. HypermediaHypermedia GET /sessions/1374 Body { …. “vehicle”:”https://api.domain.com/vehicles/1”, “driver”:”https://api.domain.com/users/1” } También son control links. Aplica las convenciones para obtener el significado completo!! Byteflair
  24. 24. HypermediaHypermedia GET /vehicles/1 Body { …. “owner”:”https://api.domain.com/users/1” } Relation types specify the role of the link Byteflair
  25. 25. HypermediaHypermedia El cliente debe descubrir su nivel de acceso a cada recurso Options Byteflair
  26. 26. HypermediaHypermedia Convenciones RelTypes,MediaTypes,Methods,StatusCodes Byteflair ..o qué debe saber el desarrollador de antemano Las convenciones se convierten en acoplamiento
  27. 27. HypermediaHypermedia Byteflair HALHAL http://stateless.co/hal_specification.html
  28. 28. HypermediaHypermedia Como proveedor,minimiza el número de cosas que debes saber de antemano sobre un API Byteflair
  29. 29. HypermediaHypermedia No se consigue desacoplar un cliente de su servidor con magia Byteflair
  30. 30. Vistas adaptativasVistas adaptativas Byteflair
  31. 31. Vistas adaptativasVistas adaptativas Distintos contextos de seguridad requieren vistas diferentes sobre los mismos datos Byteflair
  32. 32. Unadministradordebepodervertodoslosdatosdeun usuario Unusuariopuedevertodossusdatos Unusuariosolopuedeverlosdatospúblicosdelos demásusuarios Scenario Byteflair Vistas adaptativasVistas adaptativas
  33. 33. /users/{id} /owner/users/{id} /admin/users/{id} UnaURIporcadaroldeseguridad Scenario Byteflair Vistas adaptativasVistas adaptativas
  34. 34. Descomponerelrecurso Dardiferentesnivelesdeaccesoacadarecurso Scenario /users/{id} /users/{id}/my-private-data /users/{id}/data-about-me-only-the-admin-knows Byteflair Vistas adaptativasVistas adaptativas
  35. 35. Unúnicorecurso Múltiplesvistassobreelmismorecurso Seleccionamoslavistaenruntime Scenario /users/{id} Byteflair Vistas adaptativasVistas adaptativas
  36. 36. Actualizaciones & Concurrencia Byteflair
  37. 37. Dosclientestratandeactualizarelmismorecursode formaconcurrente Larepresentacióneselestadodelaaplicación Debemosevitarquelasegundapeticiónactualiceel recursoapartirdeunarepresentaciónobsoleta Actualizaciones & ConcurrenciaActualizaciones & Concurrencia Scenario Byteflair
  38. 38. Compararlarepresentaciónquellegaconelrecurso existente... Actualizaciones & ConcurrenciaActualizaciones & Concurrencia Byteflair
  39. 39. Compararlarepresentaciónquellegaconelrecurso existente... Sinosoniguales,rechazar... Actualizaciones & ConcurrenciaActualizaciones & Concurrencia Byteflair Podemos usar el ETAG
  40. 40. Compararlarepresentaciónquellegaconelrecurso existente... Sinosoniguales,rechazar... Siesposible,informaralclientedelasviolaciones Actualizaciones & ConcurrenciaActualizaciones & Concurrencia Byteflair
  41. 41. Peticiones asíncronasPeticiones asíncronas Byteflair
  42. 42. Comoidentificamospeticionesintrínsecamente asíncronas? Existentransicionesdeestadofueradelcontroldel cliente Notienesentidodevolverunarepresentaciónporqueno conocemoselestadodelrecursotraslallamada Byteflair Peticiones asíncronasPeticiones asíncronas
  43. 43. Peticiones asíncronasPeticiones asíncronas Scenario Ok Needs Repair Repaired Awaiting Byteflair Loscamionesserevisanregularmenteyseseleccionan parareparación
  44. 44. Peticiones asíncronasPeticiones asíncronas Scenario Ok Needs Repair Repaired Bajo mi control Awaiting Byteflair Loscamionesserevisanregularmenteyseseleccionan parareparación
  45. 45. Peticiones asíncronasPeticiones asíncronas Scenario Ok Needs Repair Repaired Bajo mi control Awaiting PUT/trucks/6/repair 202Accepted Byteflair Loscamionesserevisanregularmenteyseseleccionan parareparación
  46. 46. Siexistenpeticionesqueconsumenmuchotiempo... Byteflair Peticiones asíncronasPeticiones asíncronas
  47. 47. Siexistenpeticionesqueconsumenmuchotiempo... lashacemosasíncronas! Byteflair Peticiones asíncronasPeticiones asíncronas
  48. 48. SpeakinginsilverSpeakinginsilver i18ni18n Byteflair
  49. 49. SpeakinginsilverSpeakinginsilver i18ni18n GET /i18n/es_ES Body { “country” : “ES”, “lang”: “es”, “data” : { “key”: “localized message”, ….} } Byteflair
  50. 50. Byteflair APIAPI SpecificationSpecification
  51. 51. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Apiary.io Primera versión: Abril 2013  Objetivos:  Simplicidad  Interacción y dialogo entre desarrolladores y consumidores
  52. 52. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Apiary editor: https://app.apiary.io Editor local: Atom + Snowcrash + Aglio + Atom plugin
  53. 53. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Ejemplo
  54. 54. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Gist : https://gist.github.com/victorhernandezbermejo/9d5a9448a487a71dd503 Blueprint: http://docs.bfphonebook.apiary.io/
  55. 55. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Enlaces:  Sitio web: https://apiblueprint.org/  En github: https://github.com/apiaryio/api-blueprint  Especificación del lenguaje: https://github.com/apiaryio/api-blueprint/blob/master/API%20Blueprint%20Specification.md
  56. 56. Byteflair APIAPI BlueprintBlueprint APIAPI SpecificationSpecification Algunas herramientas Apiary: http://apiary.io Dredd: https://github.com/apiaryio/dredd Drakov: https://www.npmjs.com/package/drakov Dredd: https://github.com/apiaryio/dredd Aglio: https://github.com/danielgtaylor/aglio
  57. 57. Byteflair SwaggerSwagger APIAPI SpecificationSpecification Reverb Primera versión: Julio 2011 Objetivos:  En un principio documentación de APIs ya existentes.  En su versión 2.0 cambiaron el enfoque hacia el diseño y la especificación.
  58. 58. Byteflair SwaggerSwagger APIAPI SpecificationSpecification Swagger editor: http://editor.swagger.io/ En local: https://github.com/Byteflair/docker-swagger-editor docker pull byteflair/swagger-editor docker run -d -p <port>:9000 byteflair/swagger-editor
  59. 59. Byteflair SwaggerSwagger APIAPI SpecificationSpecification Enlaces:  Sitio web: http://swagger.io/  En github: https://github.com/swagger-api  Especificación del lenguaje: https://github.com/swagger-api/swagger-spec
  60. 60. Byteflair SwaggerSwagger APIAPI SpecificationSpecification Ejemplo
  61. 61. Byteflair SwaggerSwagger APIAPI SpecificationSpecification Gist : https://gist.github.com/victorhernandezbermejo/efd8093ec45db46836cf
  62. 62. Byteflair RAMLRAML APIAPI SpecificationSpecification Mulesoft Primera versión: Septiembre 2013 Objetivos:  Dar un mayor peso a la especificación del API  Poder obtener información de todos los actores involucrados lo antes posible.
  63. 63. Byteflair RAMLRAML APIAPI SpecificationSpecification API Designer: http://api-portal.anypoint.mulesoft.com/raml/api-designer Imagen Docker: https://github.com/Byteflair/docker-raml-editor docker pull byteflair/raml-editor docker run -d -p <port>:9013 byteflair/raml-editor
  64. 64. Byteflair RAMLRAML APIAPI SpecificationSpecification Enlaces:  Sitio web: http://raml.org/  En github: https://github.com/raml-org  Especificación del lenguaje: https://github.com/raml-org/raml-spec
  65. 65. Byteflair RAMLRAML APIAPI SpecificationSpecification Ejemplo
  66. 66. Byteflair RAMLRAML APIAPI SpecificationSpecification Gist : https://gist.github.com/victorhernandezbermejo/f5db381cb4cf395f47d1
  67. 67. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Comunidad de usuarios  +  Watch  Star  Fork  Questions Apiary Blueprint 115 1,891 561 489 Swagger 221 2,482 822 1,541 RAML 96 1,080 77 120 Datos a fecha 16/03/2015
  68. 68. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Comunidad de usuarios  +  Watch  Star Fork Questions Apiary Blueprint 115 1,891 561 489      Swagger 221 2,482 822 1,541      RAML 96 1,080 77 120     
  69. 69. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +               
  70. 70. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje               
  71. 71. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server               
  72. 72. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código               
  73. 73. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad               
  74. 74. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión               
  75. 75. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas               
  76. 76. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas                Documentación               
  77. 77. Byteflair ComparativaComparativa APIAPI SpecificationSpecification Apiary Blueprint Swagger RAML  +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas                Documentación                Total 27  27  35 
  78. 78. Byteflair APIAPI SpecificationSpecification ConclusionesConclusiones
  79. 79. Byteflair ToolsTools DemoDemo
  80. 80. Byteflair ToolsTools LinksLinks Postman: http://www.getpostman.com/ Runscope: https://www.runscope.com/ Soap UI: http://www.soapui.org/
  81. 81. Byteflair ToolsTools GistsGists Gist : https://gist.github.com/victorhernandezbermejo/854271c55cba55749c1d
  82. 82. “Las armas deben adaptarse a tus cualidades personales y debes ser capaz de manejarlas” Miyamoto Mushashi Byteflair
  83. 83. ?ThanksThanks GraciasGracias http://byteflair.com Daniel Cerecedo @dcerecedo Victor Hernandez @uvehachebe

×