Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Todo sobre mis APIs

Avatar for Víctor Hernández Víctor Hernández
March 17, 2015
44

Todo sobre mis APIs

Avatar for Víctor Hernández

Víctor Hernández

March 17, 2015

Transcript

  1. Agenda Agenda Arquitectura Arquitectura REST Developer UX REST sobre HTTP

    Hypermedia APIs Vistas Adaptativas Actualizaciones & Concurrencia I18n Lenguajes de especificación Herramientas de prueba Byteflair
  2. 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 Servidor Cliente Byteflair Arquitectura REST Arquitectura REST Cliente/Servidor Cliente/Servidor
  3. 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 REST Arquitectura REST Sin estado Sin estado
  4. Cliente Elimina total o parcialmente algunas de las interacciones 

    Rendimiento de red  Rendimiento percibido por el usuario Cache Servidor Cache Byteflair Arquitectura REST Arquitectura REST Cacheable Cacheable
  5. 1.Identificación por URIs 2.Mensajes autodescriptivos 3.Manipulación a través de representaciones

    4.HATEOAS  Simplicidad Byteflair Arquitectura REST Arquitectura REST Interfaz uniforme Interfaz uniforme
  6. Cliente Cada capa solo conoce a su vecina  Simplicidad

     Latencia Cache Servidor Cache Proxy Cache Balanceador Byteflair Arquitectura REST Arquitectura REST Por capas Por capas
  7. ¿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 Ludwig Wittgenstein
  8. REST sobre HTTP REST sobre HTTP Separar la representación del

    recurso de los metadatos de la petición Representación Body → Metadatos Headers → Byteflair
  9. REST sobre HTTP REST sobre HTTP Utiliza el HTTP Status

    Code para dar información acerca del resultado de la petición 2xx Ok → 4xx El cliente ha hecho algo mal → 5xx El servidor ha fallado → Byteflair
  10. REST sobre HTTP REST 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
  11. Hypermedia Hypermedia Modela el dominio del problema Identifica los recursos

    del dominio Identifica las transiciones de estado del sistema Distingue entre estructura interna y lo que expones como recurso Byteflair  ¡No expongas la base de datos!
  12. Hypermedia Hypermedia Recursos del dominio Vehicles Drivers Users Owners Sessions

    Transiciones de estado Crear recursos Filtrar recursos Asignar conductor a vehículo Activar sesión: conductor + vehículo Desactivar sesión Byteflair
  13. Hypermedia Hypermedia Definir los formatos de representación Mime Types Definir

    roles para cada control hypermedia Rel Types Convenciones semánticas POST, PUT, GET, DELETE Byteflair
  14. Hypermedia Hypermedia Convenciones Rel Types, Media Types, Methods, Status Codes

    Byteflair ..o qué debe saber el desarrollador de antemano Las convenciones se convierten en acoplamiento
  15. Hypermedia Hypermedia Como proveedor, minimiza el número de cosas que

    debes saber de antemano sobre un API Byteflair
  16. Un administrador debe poder ver todos los datos de un

    usuario Un usuario puede ver todos sus datos Un usuario solo puede ver los datos públicos de los demás usuarios Scenario Byteflair Vistas adaptativas Vistas adaptativas
  17. /users/{id} /owner/users/{id} /admin/users/{id} Una URI por cada rol de seguridad

    Scenario Byteflair Vistas adaptativas Vistas adaptativas
  18. Descomponer el recurso Dar diferentes niveles de acceso a cada

    recurso Scenario /users/{id} /users/{id}/my-private-data /users/{id}/data-about-me-only-the-admin-knows Byteflair Vistas adaptativas Vistas adaptativas
  19. Un único recurso Múltiples vistas sobre el mismo recurso Seleccionamos

    la vista en runtime Scenario /users/{id} Byteflair Vistas adaptativas Vistas adaptativas
  20. Dos clientes tratan de actualizar el mismo recurso de forma

    concurrente La representación es el estado de la aplicación Debemos evitar que la segunda petición actualice el recurso a partir de una representación obsoleta Actualizaciones & Concurrencia Actualizaciones & Concurrencia Scenario Byteflair
  21. Comparar la representación que llega con el recurso existente... Actualizaciones

    & Concurrencia Actualizaciones & Concurrencia Byteflair
  22. Comparar la representación que llega con el recurso existente... Si

    no son iguales, rechazar... Actualizaciones & Concurrencia Actualizaciones & Concurrencia Byteflair Podemos usar el ETAG
  23. Comparar la representación que llega con el recurso existente... Si

    no son iguales, rechazar... Si es posible, informar al cliente de las violaciones Actualizaciones & Concurrencia Actualizaciones & Concurrencia Byteflair
  24. Como identificamos peticiones intrínsecamente asíncronas? Existen transiciones de estado fuera

    del control del cliente No tiene sentido devolver una representación por que no conocemos el estado del recurso tras la llamada Byteflair Peticiones asíncronas Peticiones asíncronas
  25. Peticiones asíncronas Peticiones asíncronas Scenario Ok Needs Repair Repaired Awaiting

    Byteflair Los camiones se revisan regularmente y se seleccionan para reparación
  26. Peticiones asíncronas Peticiones asíncronas Scenario Ok Needs Repair Repaired Bajo

    mi control Awaiting Byteflair Los camiones se revisan regularmente y se seleccionan para reparación
  27. Peticiones asíncronas Peticiones asíncronas Scenario Ok Needs Repair Repaired Bajo

    mi control Awaiting PUT /trucks/6/repair 202 Accepted Byteflair Los camiones se revisan regularmente y se seleccionan para reparación
  28. Si existen peticiones que consumen mucho tiempo... las hacemos asíncronas!

    Byteflair Peticiones asíncronas Peticiones asíncronas
  29. Speaking in silver Speaking in silver i18n i18n GET /i18n/es_ES

    Body { “country” : “ES”, “lang”: “es”, “data” : { “key”: “localized message”, ….} } Byteflair
  30. Byteflair API API Blueprint Blueprint API API Specification Specification Apiary.io

    Primera versión: Abril 2013  Objetivos:  Simplicidad  Interacción y dialogo entre desarrolladores y consumidores
  31. Byteflair API API Blueprint Blueprint API API Specification Specification Apiary

    editor: https://app.apiary.io Editor local: Atom + Snowcrash + Aglio + Atom plugin
  32. Byteflair API API Blueprint Blueprint API API Specification Specification Gist

     : https://gist.github.com/victorhernandezbermejo/9d5a9448a487a71dd503 Blueprint: http://docs.bfphonebook.apiary.io/
  33. Byteflair API API Blueprint Blueprint API API Specification Specification 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
  34. Byteflair API API Blueprint Blueprint API API Specification Specification 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
  35. Byteflair Swagger Swagger API API Specification Specification 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.
  36. Byteflair Swagger Swagger API API Specification Specification 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
  37. Byteflair Swagger Swagger API API Specification Specification Enlaces:  Sitio

    web: http://swagger.io/  En github: https://github.com/swagger-api  Especificación del lenguaje: https://github.com/swagger-api/swagger-spec
  38. Byteflair Swagger Swagger API API Specification Specification Gist  :

    https://gist.github.com/victorhernandezbermejo/efd8093ec45db46836cf
  39. Byteflair RAML RAML API API Specification Specification 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.
  40. Byteflair RAML RAML API API Specification Specification 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
  41. Byteflair RAML RAML API API Specification Specification Enlaces:  Sitio

    web: http://raml.org/  En github: https://github.com/raml-org  Especificación del lenguaje: https://github.com/raml-org/raml-spec
  42. Byteflair RAML RAML API API Specification Specification Gist  :

    https://gist.github.com/victorhernandezbermejo/f5db381cb4cf395f47d1
  43. Byteflair Comparativa Comparativa API API Specification Specification 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
  44. Byteflair Comparativa Comparativa API API Specification Specification 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     
  45. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +               
  46. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje               
  47. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server               
  48. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código               
  49. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad               
  50. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión               
  51. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas               
  52. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas                Documentación               
  53. Byteflair Comparativa Comparativa API API Specification Specification Apiary Blueprint Swagger

    RAML   +                Curva de aprendizaje                Mock server                Reutilización de código                Expresividad                Concisión                Herramientas                Documentación                Total 27  27  35 
  54. “Las armas deben adaptarse a tus cualidades personales y debes

    ser capaz de manejarlas” Miyamoto Mushashi Byteflair