Successfully reported this slideshow.
Byteflair
http://byteflair.com
Daniel Cerecedo
@dcerecedo
Victor Hernandez
@uvehachebe
AgendaAgenda
Arquitectura
ArquitecturaREST
DeveloperUX
RESTsobreHTTP
HypermediaAPIs
VistasAdaptativas
Actualizaciones&
Con...
ArquitecturaArquitectura
Byteflair
Separación de responsabilidades de presentación y procesamiento
 Portabilidad de la interfaz de usuario
 Simplicidad del...
Servidor
Mensajes autodescriptivos: semántica, datos, metadatos y contexto
Cliente2:Cliente
Cliente1:Cliente
 Visibilidad...
Cliente
Elimina total o parcialmente algunas de las interacciones
 Rendimiento de red
 Rendimiento percibido por el usua...
1.Identificación por URIs
2.Mensajes autodescriptivos
3.Manipulación a través de representaciones
4.HATEOAS
 Simplicidad
...
Cliente
Cada capa solo conoce a su vecina
 Simplicidad
 Latencia
Cache
Servidor
Cache
Proxy
Cache
Balanceador
Byteflair
...
Developer UXDeveloper UX
El desarrollador como destinatario del
contenido, no los navegadores
Byteflair
¿Porqué REST sobre HTTP?¿Porqué REST sobre HTTP?
Byteflair
“Los límites de mi lenguaje son los límites de
mi nundo”
Todo e...
REST sobre HTTPREST sobre HTTP
Separar la representación del recurso de los
metadatos de la petición
Representación Body→
...
REST sobre HTTPREST sobre HTTP
Utiliza el HTTP Status Code para dar
información acerca del resultado de la petición
2xx Ok...
REST sobre HTTPREST sobre HTTP
Utiliza los HTTP Status Codes existentes que
mejor se adapten a la situación
Añade informac...
REST sobre HTTPREST sobre HTTP
Byteflair
Error HTTP
Error de negocio
Error técnico
HypermediaHypermedia
Byteflair
HypermediaHypermedia
Byteflair
HypermediaHypermedia
Byteflair
HypermediaHypermedia
Modela el dominio del problema
Identificalosrecursosdeldominio
Identificalastransicionesdeestadodelsi...
HypermediaHypermedia
Recursos del dominio
Vehicles Drivers
Users Owners
Sessions
Transiciones de estado
Crearrecursos
Filt...
HypermediaHypermedia
Definir los formatos de representación
Mime Types
Definir roles para cada control hypermedia
Rel Type...
HypermediaHypermedia
GET /
Headers
Link:
<https://api.domain.com/vehicles>; rel=”vehicles”:
<https://api.domain.com/users>...
HypermediaHypermedia
GET /vehicles
Headers
Link:
<https://api.domain.com/vehicles?page=1&size=20>;
rel=”next”
Body
[ {...}...
HypermediaHypermedia
GET /sessions/1374
Body
{ ….
“vehicle”:”https://api.domain.com/vehicles/1”,
“driver”:”https://api.dom...
HypermediaHypermedia
GET /vehicles/1
Body
{ ….
“owner”:”https://api.domain.com/users/1”
}
Relation types specify the role ...
HypermediaHypermedia
El cliente debe descubrir su nivel de acceso a
cada recurso
Options
Byteflair
HypermediaHypermedia
Convenciones
RelTypes,MediaTypes,Methods,StatusCodes
Byteflair
..o qué debe saber
el desarrollador
de...
HypermediaHypermedia
Byteflair
HALHAL
http://stateless.co/hal_specification.html
HypermediaHypermedia
Como proveedor,minimiza el número
de cosas que debes saber de antemano
sobre un API
Byteflair
HypermediaHypermedia
No se consigue
desacoplar un
cliente de
su servidor
con magia
Byteflair
Vistas adaptativasVistas adaptativas
Byteflair
Vistas adaptativasVistas adaptativas
Distintos contextos de seguridad
requieren vistas diferentes sobre los
mismos datos
B...
Unadministradordebepodervertodoslosdatosdeun
usuario
Unusuariopuedevertodossusdatos
Unusuariosolopuedeverlosdatospúblicosd...
/users/{id}
/owner/users/{id}
/admin/users/{id}
UnaURIporcadaroldeseguridad
Scenario
Byteflair
Vistas adaptativasVistas ad...
Descomponerelrecurso
Dardiferentesnivelesdeaccesoacadarecurso
Scenario
/users/{id}
/users/{id}/my-private-data
/users/{id}...
Unúnicorecurso
Múltiplesvistassobreelmismorecurso
Seleccionamoslavistaenruntime
Scenario
/users/{id}
Byteflair
Vistas adap...
Actualizaciones & Concurrencia
Byteflair
Dosclientestratandeactualizarelmismorecursode
formaconcurrente
Larepresentacióneselestadodelaaplicación
Debemosevitarquela...
Compararlarepresentaciónquellegaconelrecurso
existente...
Actualizaciones & ConcurrenciaActualizaciones & Concurrencia
Byt...
Compararlarepresentaciónquellegaconelrecurso
existente...
Sinosoniguales,rechazar...
Actualizaciones & ConcurrenciaActuali...
Compararlarepresentaciónquellegaconelrecurso
existente...
Sinosoniguales,rechazar...
Siesposible,informaralclientedelasvio...
Peticiones asíncronasPeticiones asíncronas
Byteflair
Comoidentificamospeticionesintrínsecamente
asíncronas?
Existentransicionesdeestadofueradelcontroldel
cliente
Notienesentid...
Peticiones asíncronasPeticiones asíncronas
Scenario
Ok
Needs
Repair
Repaired
Awaiting
Byteflair
Loscamionesserevisanregula...
Peticiones asíncronasPeticiones asíncronas
Scenario
Ok
Needs
Repair
Repaired
Bajo mi control
Awaiting
Byteflair
Loscamione...
Peticiones asíncronasPeticiones asíncronas
Scenario
Ok
Needs
Repair
Repaired
Bajo mi control
Awaiting
PUT/trucks/6/repair
...
Siexistenpeticionesqueconsumenmuchotiempo...
Byteflair
Peticiones asíncronasPeticiones asíncronas
Siexistenpeticionesqueconsumenmuchotiempo...
lashacemosasíncronas!
Byteflair
Peticiones asíncronasPeticiones asíncronas
SpeakinginsilverSpeakinginsilver
i18ni18n
Byteflair
SpeakinginsilverSpeakinginsilver
i18ni18n
GET /i18n/es_ES
Body
{
“country” : “ES”,
“lang”: “es”,
“data” : { “key”: “locali...
Byteflair
APIAPI SpecificationSpecification
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Apiary.io
Primera versión: Abril 2013

Objetivos:
...
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Apiary editor:
https://app.apiary.io
Editor local:
A...
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Ejemplo
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Gist : https://gist.github.com/victorhernandezberme...
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Enlaces:

Sitio web:
https://apiblueprint.org/

En...
Byteflair
APIAPI BlueprintBlueprint
APIAPI SpecificationSpecification
Algunas herramientas
Apiary: http://apiary.io
Dredd:...
Byteflair
SwaggerSwagger
APIAPI SpecificationSpecification
Reverb
Primera versión: Julio 2011
Objetivos:

En un principio...
Byteflair
SwaggerSwagger
APIAPI SpecificationSpecification
Swagger editor:
http://editor.swagger.io/
En local:
https://git...
Byteflair
SwaggerSwagger
APIAPI SpecificationSpecification
Enlaces:

Sitio web:
http://swagger.io/

En github:
https://g...
Byteflair
SwaggerSwagger
APIAPI SpecificationSpecification
Ejemplo
Byteflair
SwaggerSwagger
APIAPI SpecificationSpecification
Gist : https://gist.github.com/victorhernandezbermejo/efd8093e...
Byteflair
RAMLRAML
APIAPI SpecificationSpecification
Mulesoft
Primera versión: Septiembre 2013
Objetivos:

Dar un mayor p...
Byteflair
RAMLRAML
APIAPI SpecificationSpecification
API Designer:
http://api-portal.anypoint.mulesoft.com/raml/api-design...
Byteflair
RAMLRAML
APIAPI SpecificationSpecification
Enlaces:

Sitio web:
http://raml.org/

En github:
https://github.co...
Byteflair
RAMLRAML
APIAPI SpecificationSpecification
Ejemplo
Byteflair
RAMLRAML
APIAPI SpecificationSpecification
Gist : https://gist.github.com/victorhernandezbermejo/f5db381cb4cf39...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Comunidad de usuarios  +
 Watch  Star  Fork  Ques...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Comunidad de usuarios  +
 Watch  Star Fork Questi...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
ComparativaComparativa
APIAPI SpecificationSpecification
Apiary Blueprint Swagger RAML
 +           ...
Byteflair
APIAPI SpecificationSpecification
ConclusionesConclusiones
Byteflair
ToolsTools
DemoDemo
Byteflair
ToolsTools
LinksLinks
Postman: http://www.getpostman.com/
Runscope: https://www.runscope.com/
Soap UI: http://ww...
Byteflair
ToolsTools
GistsGists
Gist : https://gist.github.com/victorhernandezbermejo/854271c55cba55749c1d
“Las armas deben adaptarse a
tus cualidades personales y
debes ser capaz de
manejarlas” Miyamoto Mushashi
Byteflair
?ThanksThanks GraciasGracias
http://byteflair.com
Daniel Cerecedo
@dcerecedo
Victor Hernandez
@uvehachebe
Todo sobre mis APIs
Próxima SlideShare
Cargando en…5
×

Todo sobre mis APIs

1.814 visualizaciones

Publicado el

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.

Publicado en: Software
  • 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

×