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

Construyendo APIs

Construyendo APIs

Talk presented at RubyConf Colombia 2016

Video at https://www.youtube.com/watch?v=gX-EIC3izAg

Avatar for Nicolás Hock Isaza

Nicolás Hock Isaza

July 28, 2016
Tweet

More Decks by Nicolás Hock Isaza

Other Decks in Programming

Transcript

  1. CONOCIMIENTO COMPARTIDO 1 Mi programa expone una interfaz 2 Un

    humano documenta esa interfaz 3 Ernestico lee la documentación
  2. CONOCIMIENTO COMPARTIDO 1 Mi programa expone una interfaz 2 Un

    humano documenta esa interfaz 3 Ernestico lee la documentación 4 Ernestico crea un programa que usa la interfaz
  3. CONOCIMIENTO COMPARTIDO 1 Exponer interfaz 2 D ocum entación 3

    Leer docum entación 4 Program ar cliente
  4. DISEÑO Y PROTOTIPO (RFC) ▸ Identificamos recursos ▸ Estados de

    un recurso ▸ Borradores de contratos ▸ Revisión & Comentarios
  5. MSON ## Invitation Full (object) - id: `100` (string, required)

    - code: `cheeky-monkey352` (string, required) - links (object, required) - ride: `100` (string, required) - inviter (UserLink) - origin (AddressLink, nullable, optional) - Inviter origin. - destination (AddressLink, nullable, optional) - Inviter destination. MSON: Markdown Syntax Object Notation
  6. MSON MSON: Markdown Syntax Object Notation ## Invitation Full (object)

    - id: `100` (string, required) - code: `cheeky-monkey352` (string, required) - links (object, required) - ride: `100` (string, required) - inviter (UserLink) - origin (AddressLink, nullable, optional) - Inviter origin. - destination (AddressLink, nullable, optional) - Inviter destination.
  7. MSON MSON: Markdown Syntax Object Notation ## Invitation Full (object)

    - id: `100` (string, required) - code: `cheeky-monkey352` (string, required) - links (object, required) - ride: `100` (string, required) - inviter (UserLink) - origin (AddressLink, nullable, optional) - Inviter origin. - destination (AddressLink, nullable, optional) - Inviter destination.
  8. MSON MSON: Markdown Syntax Object Notation ## Invitation Full (object)

    - id: `100` (string, required) - code: `cheeky-monkey352` (string, required) - links (object, required) - ride: `100` (string, required) - inviter (UserLink) - origin (AddressLink, nullable, optional) - Inviter origin. - destination (AddressLink, nullable, optional) - Inviter destination.
  9. MSON ## Invitation Full (object) - id: `100` (string, required)

    - code: `cheeky-monkey352` (string, required) - links (object, required) - ride: `100` (string, required) - inviter (UserLink) - origin (AddressLink, nullable, optional) - Inviter origin. - destination (AddressLink, nullable, optional) - Inviter destination. MSON: Markdown Syntax Object Notation
  10. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  11. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  12. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  13. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  14. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  15. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  16. # ./bin/run_dredd #!/bin/sh set -e # Setup # Crear una

    base de datos nueva (con todas las migraciones) RAILS_ENV=test bundle exec rake db:reset # Agregar los datos específicos para Dredd RAILS_ENV=test bundle exec rake db:seed:dredd # Iniciar un servidor en background RAILS_ENV=test bundle exec rails server -b 0.0.0.0 -p 3001 & PID=$! # Guardo el número del proceso del servidor sleep 5 # Espero a que el servidor termine # Corro dredd contra el servidor y comparo contra la documentación dredd apiary.apib http://0.0.0.0:3001/ --sorted # Cleanup RESULT=$? # guardo el resultado de Dredd kill -9 $PID # mato el servidor exit $RESULT # Retorno el resultado de Dredd
  17. FLUJO DE PROTOTIPO ▸ Borradores de contratos (discusión) ▸ Escribir

    documentación (API Blueprint) ▸ Escribir un mock en el código
  18. FLUJO DE PROTOTIPO ▸ Borradores de contratos (discusión) ▸ Escribir

    documentación (API Blueprint) ▸ Escribir un mock en el código ▸ Clientes empiezan a consumir API
  19. FLUJO DE PROTOTIPO ▸ Borradores de contratos (discusión) ▸ Escribir

    documentación (API Blueprint) ▸ Escribir un mock en el código ▸ Clientes empiezan a consumir API ▸ Dredd
  20. FLUJO DE PROTOTIPO ▸ Borradores de contratos (discusión) ▸ Escribir

    documentación (API Blueprint) ▸ Escribir un mock en el código ▸ Clientes empiezan a consumir API ▸ Dredd ▸ Hacer la implementación real
  21. REFERENCIAS (Y GRACIAS!) • How to build an API https://apiary.io/how-to-build-api

    • API Flow https://speakerdeck.com/zdne/api-flow • Future of Programming https://vimeo.com/71278954 • Quickly Prototype APIs with Apiary https://sendgrid.com/blog/ quickly-prototype-apis-apiary/