SlideShare una empresa de Scribd logo
1 de 30
www.sgcampus.com.mx @sgcampus
www.sgcampus.com.mx
@sgcampus
Verónica López
@maria_fibonacci
Cómo crear un RESTful API con Go
www.sgcampus.com.mx @sgcampus
Objetivo: Programar y poner en producción
servicios web rápidos, escalables y creación de
RESTful APIs de alto desempeño con Go.
www.sgcampus.com.mx @sgcampus
CONTENIDO
• Primer API en Go
• Introducción de conceptos relacionados al uso de Go
• Uso del paquete http
• Servicios RESTful en Go
• Principios de arquitecturas REST. Diseño de APIs en Go
• Acceso y Uso de web services en Go
• Maneras de integrar otros web services para autenticación de manera segura
• Producción
• Estrategias de deployment
• Utilización de procesos para mantener el servidor corriendo, altamente accesible y
conectado con otros servicios
• Desempeño
• Estrategias para mantener el API vivo,responsivo y rápido en producción.
• Mecanismos de caching
• Seguridad
• SQL-injection
• Cross-site scripting
www.sgcampus.com.mx @sgcampus
Prerequisitos
• Windows, Linux, MacOS X
• Go instalado (yum, apt-get)
• MySQL
www.sgcampus.com.mx @sgcampus
APIs
• APIs: parte fundamental para el desarrollo web, mobile hoy en día
• Más fácil de crear y consumir que servicios precursores
• Todo el mundo tiene un API: bibliotecas, servicios (SaaS), datasets
• Estandarizan la comunicación entre cualesquiera dos (o más) plataformas
• Malos APIs: no inclusivos, semanticamente confusos, falta de consistencia
www.sgcampus.com.mx @sgcampus
Go
Lenguaje pensado para servidores.
Servidor http incluído
Métodos simples para el encoding de datos en XML y JSON
Altamente disponible
Concurrente
www.sgcampus.com.mx @sgcampus
Go: net/http
• El paquete net/http provee implementaciones de cliente y servidor HTTP
• Para hacer peticiones HTTP y HTTPS usamos Get, Head, Post y PostForm :
• El cliente debe cerrar el cuerpo (respuesta) cuando termina de usarlo:
www.sgcampus.com.mx @sgcampus
Paquete HTTP
• El paquete HTTP nos va a facilitar la tarea para construir un servicio
REST
• Además de servir vía HTTP, el paquete incluye otras utilidades como
cookie jars, clientes de configuración, reverse proxies, entre otros.
• http.server struct provee la base de todas las acciones de nuestro
servidor y parámetros.
• Dentro del servidor podemos establecer nuestra dirección TCP, routing
de peticiones, timeouts e información de headers.
• Go provee varios shortcuts (atajos) para invocar un servidor sin iniciar
directamente el struct.
www.sgcampus.com.mx @sgcampus
• Por ejemplo, cuando tenemos muchos valores por default, podríamos
usar el siguiente código:
• Y para ejecutar lo anterior, basta con poner:
www.sgcampus.com.mx @sgcampus
Go structs
• Structs: colecciones (tipadas) de campos;sirven para agrupar datos para crear registros.
• Ejemplo:
www.sgcampus.com.mx @sgcampus
Lo anterior sirve para invocar un struct de servidor y establecer
las propiedades Addr y Handler.
Si se quiere tener control más granular de nuestro servidor, se
puede hacer de igual manera agregando las propiedades
pertinentes.
www.sgcampus.com.mx @sgcampus
Hello World!
• Objetivo: Desplegar un JSON en el Browser.
• Base:
• Este pedacito de código es lo mínimo que requerimos para desplegar
un string JSON por medio de HTTP.
www.sgcampus.com.mx @sgcampus
• Struct de respuesta, que contiene todos los datos que queremos
mandar al cliente (variable Message) después de tomarlo del API:
www.sgcampus.com.mx @sgcampus
Finalmente, tenemos que configurar nuestra función principal (main) para responder a
una ruta específica y entregar una respuesta JSON de la siguiente manera:
www.sgcampus.com.mx @sgcampus
• Al entrar a main(), establecemos una función de manejo de ruta
para responder a las peticiones a /api, misma que inicializa un
API struct con Hello,world!
• Cuando pasamos esto a un arreglo JSON (output) y después de
haber mandado el mensaje a nuestra clase iowriter (entrada/
salida), en este caso un valor del tipo http.ResponseWriter,
casteamos el valor a string.
• El último paso es una manera de mandar el arreglo por medio de
una función que espera recibir un string.
www.sgcampus.com.mx @sgcampus
Casting
• Go maneja el casting de tipos de manera muy simple, aplicando
el tipo como una función que delimita la variable objetivo.
• Por ejemplo, podemos casera un valor int64 a integer
simplemente delimitándolo con una función int(NuestroInt64)
• Aunque hay algunas excepciones: algunos tipos no pueden ser
convertidos directamente a otros y necesitan un paquete como
strconv para lograrlo.
www.sgcampus.com.mx @sgcampus
• Para verificar que todo está bien hecho, abrir el browser de su
preferencia y llamar al localhost:8080/api, que debe mostrar el
resultado de nuestro Hello World:
www.sgcampus.com.mx @sgcampus
Construyendo una Ruta
• Al hablar de routing en Go, hablamos de un multiplexer (o mux)
• En este caso, un multiplexer implica tomar URLs o patrones de URLs y
traducirlos a funciones internas.
• Visualícenlo como un mapeo simple de una petición a una función.
• Por ejemplo:
• Existen ciertas limitaciones con el ruteador de mux del paquete net/http,
pues, por ejemplo, no se puede generar un wildcard o una expresión
regular para una ruta.
• Otro problema es que no es bueno para responder a peticiones
dinámicas o aleatorias, lo que significa que no es capaz de aceptar/
identificar patrones.
www.sgcampus.com.mx @sgcampus
EJEMPLO
www.sgcampus.com.mx @sgcampus
Soluciones
• Soluciones 3rd-party. Framework.
• Gorilla: web framework. Tiene un paquete que hace este tipo de
routing.
• También cuenta con otros beneficios como JSON-RPC, cookies
seguras y sesiones globales de datos.
• El paquete mux de Gorilla permite el uso de expresiones regulares
• http://www.gorillatoolkit.org
• http://www.gorillatoolkit.org/pkg/mux
www.sgcampus.com.mx @sgcampus
Soluciones
• Routes, de drone.io (https://github.com/drone/routes)
• Paquete dedicado solamente a routear
• Importante, porque es más eficiente que Gorilla
• Routing de URLs puede representar un cuello de botella en
aplicaciones grandes y/o escalables por el número de peticiones
• Para aplicaciones pequeñas, la diferencia es despreciable
www.sgcampus.com.mx @sgcampus
REST en Go
• API al último o primero?
• Depende de los fines: app o sitio de una sola página vs sitio
completo.
• Estrategias para diseñar un API
• Principios básicos de REST
• Creación de endpoints con Gorilla
• Tips para versionar aplicaciones
www.sgcampus.com.mx @sgcampus
REST
• REST : Representational state transfer
• Definición de formato: JSON, RSS, XML, binarios
• Es importante que el formato sea compatible con los datos. E.g. Es
usual ver datos traducidos de codificación Base64 y enviados vía JSON
• Tamaño: payload o cantidad de datos por transmitir
• El modelo de un API tiene que satisfacer las necesidades del cliente de
actualizar quitar u obtener un recurso o entrada en particular.
• Self-description: engloba 2 componentes de REST. 1) Debe incluir todo
lo necesario para satisfacer las peticiones del cliente y 2) información
sobre cómo manejar dicha información.
• Se evita la idea tradicional de conservar cookies o variables de sesión,
pues todo se maneja a través del API/web service.
www.sgcampus.com.mx @sgcampus
URIs y URLs
• Las URL o URI, en este caso, deben ser informativas. No sólo
deben dar información sobre los endpoints de datos, pero
también qué tipo de datos se debe esperar.
• No deben romperse en el futuro, a pesar de las versiones. Deben
ser consistentes.No aplicarlo se traduce en mal UX.
• Adelantarse a cambios: reaccionar a estos utilizando códigos de
status HTTP para indicar nuevas instancias y errores, en lugar
de sólo actualizarlos y romper el flujo anterior.
www.sgcampus.com.mx @sgcampus
EJEMPLO
www.sgcampus.com.mx @sgcampus
JSON
Ejemplo de cómo Go puede mandar y recibir JSONs usando solamente los paquetes del core del lenguaje:
www.sgcampus.com.mx @sgcampus
Deployment/Producción
• Métodos tradicionales, servidores
• Amazon Web Services (interactuando directamente con la
interface/API. Paquete goamz.
• Docker. Contenedores
• Binarios en CDNs
www.sgcampus.com.mx @sgcampus
Adicional
• Seguridad. SQL injection, cross-site scripting
• Performance
• Autenticación
• Personalización
www.sgcampus.com.mx @sgcampus
Conclusión
• Cuestiones a considerar:
• API responsiva
• Regresar códigos de status apropiados
• Headers
• Buen UX
• Seguridad
• Performance
• Detalles particulares (stateless vs stateful, etc)
www.sgcampus.com.mx @sgcampus
¡PREGUNTAS!

Más contenido relacionado

La actualidad más candente

3.2 metas y objetivos de los servicios de TI
3.2 metas y objetivos de los servicios de TI3.2 metas y objetivos de los servicios de TI
3.2 metas y objetivos de los servicios de TIJuan Anaya
 
Diseño centrado en el usuario
Diseño centrado en el usuarioDiseño centrado en el usuario
Diseño centrado en el usuarioPercy Negrete
 
Présentation DEVOPS.pptx
Présentation DEVOPS.pptxPrésentation DEVOPS.pptx
Présentation DEVOPS.pptxboulonvert
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Saber LAJILI
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Faycel Chaoua
 
Requerimientos funcionales y no funcionales de la aplicación
Requerimientos funcionales y no funcionales de la aplicaciónRequerimientos funcionales y no funcionales de la aplicación
Requerimientos funcionales y no funcionales de la aplicaciónYare LoZada
 
Vistas en mySql
Vistas en mySqlVistas en mySql
Vistas en mySqlEduardo Ed
 
Patterns in Eclipse
Patterns in EclipsePatterns in Eclipse
Patterns in EclipseMadhu Samuel
 
Descubre JIRA Service Desk
Descubre JIRA Service DeskDescubre JIRA Service Desk
Descubre JIRA Service DeskatSistemas
 

La actualidad más candente (20)

Manual de fragmentación horizontal
Manual de fragmentación horizontalManual de fragmentación horizontal
Manual de fragmentación horizontal
 
3.2 metas y objetivos de los servicios de TI
3.2 metas y objetivos de los servicios de TI3.2 metas y objetivos de los servicios de TI
3.2 metas y objetivos de los servicios de TI
 
Manual de adobe animate cc
Manual de adobe animate ccManual de adobe animate cc
Manual de adobe animate cc
 
Java swing y awt
Java swing y awtJava swing y awt
Java swing y awt
 
Diseño centrado en el usuario
Diseño centrado en el usuarioDiseño centrado en el usuario
Diseño centrado en el usuario
 
Herramientas case
Herramientas caseHerramientas case
Herramientas case
 
HA2NV50 EQ8-StarUML
HA2NV50 EQ8-StarUMLHA2NV50 EQ8-StarUML
HA2NV50 EQ8-StarUML
 
Diferencias entre vectores y mapa de bits
Diferencias entre vectores y mapa de bitsDiferencias entre vectores y mapa de bits
Diferencias entre vectores y mapa de bits
 
Cliente servidor
Cliente servidorCliente servidor
Cliente servidor
 
Rapport Sockets en Java
Rapport Sockets en JavaRapport Sockets en Java
Rapport Sockets en Java
 
Requisitos funcionales y no funcionales
Requisitos funcionales y no funcionales Requisitos funcionales y no funcionales
Requisitos funcionales y no funcionales
 
Présentation DEVOPS.pptx
Présentation DEVOPS.pptxPrésentation DEVOPS.pptx
Présentation DEVOPS.pptx
 
Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3Mini projet android 2014 2015 iset nabeul sem3
Mini projet android 2014 2015 iset nabeul sem3
 
Historias de usuario
Historias de usuarioHistorias de usuario
Historias de usuario
 
Support du cours : Programmation Web 2
Support du cours : Programmation Web 2Support du cours : Programmation Web 2
Support du cours : Programmation Web 2
 
Requerimientos funcionales y no funcionales de la aplicación
Requerimientos funcionales y no funcionales de la aplicaciónRequerimientos funcionales y no funcionales de la aplicación
Requerimientos funcionales y no funcionales de la aplicación
 
Vistas en mySql
Vistas en mySqlVistas en mySql
Vistas en mySql
 
Patterns in Eclipse
Patterns in EclipsePatterns in Eclipse
Patterns in Eclipse
 
Entorno de visual studio
Entorno de visual studioEntorno de visual studio
Entorno de visual studio
 
Descubre JIRA Service Desk
Descubre JIRA Service DeskDescubre JIRA Service Desk
Descubre JIRA Service Desk
 

Similar a Cómo crear un RESTful API con Go

Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014Carlos Camacho
 
Seguridad y optimización en Magento
Seguridad y optimización en MagentoSeguridad y optimización en Magento
Seguridad y optimización en MagentoDevopensource
 
Introducción a la programación en internet
Introducción a la programación en internetIntroducción a la programación en internet
Introducción a la programación en internetcristinaig123
 
Derribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev DayDerribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev DayPlain Concepts
 
Evento de Partners SiteGround "Escalando WordPress"
Evento de Partners SiteGround "Escalando WordPress"Evento de Partners SiteGround "Escalando WordPress"
Evento de Partners SiteGround "Escalando WordPress"SiteGround España
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007guestd24c393
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007guest976d083
 
ASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsPlain Concepts
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corporacion de Industrias Tecnologicas S.A.
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePointAdrian Diaz Cervera
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Francisco Javier Toscano Lopez
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera apiCloudAppi
 

Similar a Cómo crear un RESTful API con Go (20)

Web framework ligeros y micros en java barcamp 2014
Web framework ligeros y micros en java   barcamp 2014Web framework ligeros y micros en java   barcamp 2014
Web framework ligeros y micros en java barcamp 2014
 
ASP.NET MVC
ASP.NET MVCASP.NET MVC
ASP.NET MVC
 
Seguridad y optimización en Magento
Seguridad y optimización en MagentoSeguridad y optimización en Magento
Seguridad y optimización en Magento
 
S7-DAW-2022S1.pptx
S7-DAW-2022S1.pptxS7-DAW-2022S1.pptx
S7-DAW-2022S1.pptx
 
Escalando WordPress
Escalando WordPressEscalando WordPress
Escalando WordPress
 
Introducción a la programación en internet
Introducción a la programación en internetIntroducción a la programación en internet
Introducción a la programación en internet
 
Derribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev DayDerribando la torre de marfil - Plain Concepts Dev Day
Derribando la torre de marfil - Plain Concepts Dev Day
 
Evento de Partners SiteGround "Escalando WordPress"
Evento de Partners SiteGround "Escalando WordPress"Evento de Partners SiteGround "Escalando WordPress"
Evento de Partners SiteGround "Escalando WordPress"
 
Comenzando con GWT
Comenzando con GWTComenzando con GWT
Comenzando con GWT
 
Integrando AngularJS y drupal
Integrando AngularJS y drupalIntegrando AngularJS y drupal
Integrando AngularJS y drupal
 
ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3ASP.NET MVC Workshop Día 3
ASP.NET MVC Workshop Día 3
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007
 
Todomir
TodomirTodomir
Todomir
 
Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007Jc Web20 Open Source Why Floss2007
Jc Web20 Open Source Why Floss2007
 
ASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard TomàsASP.NET MVC Core by Eduard Tomàs
ASP.NET MVC Core by Eduard Tomàs
 
ASP.NET MVC Core
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
Corp. In. Tec. S.A. - Capacitaciones en Informática - Programación con CodeIg...
 
Java script para desarrolladores SharePoint
Java script para desarrolladores SharePointJava script para desarrolladores SharePoint
Java script para desarrolladores SharePoint
 
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
Como sacar el máximo partido a los Cores de MuleSoft - optimización y buenas ...
 
Define y desarrolla tu primera api
Define y desarrolla tu primera apiDefine y desarrolla tu primera api
Define y desarrolla tu primera api
 

Más de Software Guru

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasSoftware Guru
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesSoftware Guru
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environmentsSoftware Guru
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorSoftware Guru
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealSoftware Guru
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowSoftware Guru
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:Software Guru
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learningSoftware Guru
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDiSoftware Guru
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Software Guru
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSSoftware Guru
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...Software Guru
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?Software Guru
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Software Guru
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsSoftware Guru
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosSoftware Guru
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressSoftware Guru
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsSoftware Guru
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Software Guru
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoSoftware Guru
 

Más de Software Guru (20)

Hola Mundo del Internet de las Cosas
Hola Mundo del Internet de las CosasHola Mundo del Internet de las Cosas
Hola Mundo del Internet de las Cosas
 
Estructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso realesEstructuras de datos avanzadas: Casos de uso reales
Estructuras de datos avanzadas: Casos de uso reales
 
Building bias-aware environments
Building bias-aware environmentsBuilding bias-aware environments
Building bias-aware environments
 
El secreto para ser un desarrollador Senior
El secreto para ser un desarrollador SeniorEl secreto para ser un desarrollador Senior
El secreto para ser un desarrollador Senior
 
Cómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto idealCómo encontrar el trabajo remoto ideal
Cómo encontrar el trabajo remoto ideal
 
Automatizando ideas con Apache Airflow
Automatizando ideas con Apache AirflowAutomatizando ideas con Apache Airflow
Automatizando ideas con Apache Airflow
 
How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:How thick data can improve big data analysis for business:
How thick data can improve big data analysis for business:
 
Introducción al machine learning
Introducción al machine learningIntroducción al machine learning
Introducción al machine learning
 
Democratizando el uso de CoDi
Democratizando el uso de CoDiDemocratizando el uso de CoDi
Democratizando el uso de CoDi
 
Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0Gestionando la felicidad de los equipos con Management 3.0
Gestionando la felicidad de los equipos con Management 3.0
 
Taller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJSTaller: Creación de Componentes Web re-usables con StencilJS
Taller: Creación de Componentes Web re-usables con StencilJS
 
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...El camino del full stack developer (o como hacemos en SERTI para que no solo ...
El camino del full stack developer (o como hacemos en SERTI para que no solo ...
 
¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?¿Qué significa ser un programador en Bitso?
¿Qué significa ser un programador en Bitso?
 
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.Colaboración efectiva entre desarrolladores del cliente y tu equipo.
Colaboración efectiva entre desarrolladores del cliente y tu equipo.
 
Pruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOpsPruebas de integración con Docker en Azure DevOps
Pruebas de integración con Docker en Azure DevOps
 
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivosElixir + Elm: Usando lenguajes funcionales en servicios productivos
Elixir + Elm: Usando lenguajes funcionales en servicios productivos
 
Así publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stressAsí publicamos las apps de Spotify sin stress
Así publicamos las apps de Spotify sin stress
 
Achieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goalsAchieving Your Goals: 5 Tips to successfully achieve your goals
Achieving Your Goals: 5 Tips to successfully achieve your goals
 
Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19Acciones de comunidades tech en tiempos del Covid19
Acciones de comunidades tech en tiempos del Covid19
 
De lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseñoDe lo operativo a lo estratégico: un modelo de management de diseño
De lo operativo a lo estratégico: un modelo de management de diseño
 

Último

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificialcynserafini89
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
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
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzzAlexandergo5
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptJavierHerrera662252
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúCEFERINO DELGADO FLORES
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesEdomar AR
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
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
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxtjcesar1
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOnarvaezisabella21
 

Último (20)

Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Presentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia ArtificialPresentación sobre la Inteligencia Artificial
Presentación sobre la Inteligencia Artificial
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
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
 
tarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzztarea de exposicion de senati zzzzzzzzzz
tarea de exposicion de senati zzzzzzzzzz
 
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.pptTEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
TEMA 2 PROTOCOLO DE EXTRACCION VEHICULAR.ppt
 
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del PerúRed Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
Red Dorsal Nacional de Fibra Óptica y Redes Regionales del Perú
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
Los Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, AplicacionesLos Microcontroladores PIC, Aplicaciones
Los Microcontroladores PIC, Aplicaciones
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
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
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptxModelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
Modelo de Presentacion Feria Robotica Educativa 2024 - Versión3.pptx
 
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPOAREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
AREA TECNOLOGIA E INFORMATICA TRABAJO EN EQUIPO
 

Cómo crear un RESTful API con Go

  • 2. www.sgcampus.com.mx @sgcampus Objetivo: Programar y poner en producción servicios web rápidos, escalables y creación de RESTful APIs de alto desempeño con Go.
  • 3. www.sgcampus.com.mx @sgcampus CONTENIDO • Primer API en Go • Introducción de conceptos relacionados al uso de Go • Uso del paquete http • Servicios RESTful en Go • Principios de arquitecturas REST. Diseño de APIs en Go • Acceso y Uso de web services en Go • Maneras de integrar otros web services para autenticación de manera segura • Producción • Estrategias de deployment • Utilización de procesos para mantener el servidor corriendo, altamente accesible y conectado con otros servicios • Desempeño • Estrategias para mantener el API vivo,responsivo y rápido en producción. • Mecanismos de caching • Seguridad • SQL-injection • Cross-site scripting
  • 4. www.sgcampus.com.mx @sgcampus Prerequisitos • Windows, Linux, MacOS X • Go instalado (yum, apt-get) • MySQL
  • 5. www.sgcampus.com.mx @sgcampus APIs • APIs: parte fundamental para el desarrollo web, mobile hoy en día • Más fácil de crear y consumir que servicios precursores • Todo el mundo tiene un API: bibliotecas, servicios (SaaS), datasets • Estandarizan la comunicación entre cualesquiera dos (o más) plataformas • Malos APIs: no inclusivos, semanticamente confusos, falta de consistencia
  • 6. www.sgcampus.com.mx @sgcampus Go Lenguaje pensado para servidores. Servidor http incluído Métodos simples para el encoding de datos en XML y JSON Altamente disponible Concurrente
  • 7. www.sgcampus.com.mx @sgcampus Go: net/http • El paquete net/http provee implementaciones de cliente y servidor HTTP • Para hacer peticiones HTTP y HTTPS usamos Get, Head, Post y PostForm : • El cliente debe cerrar el cuerpo (respuesta) cuando termina de usarlo:
  • 8. www.sgcampus.com.mx @sgcampus Paquete HTTP • El paquete HTTP nos va a facilitar la tarea para construir un servicio REST • Además de servir vía HTTP, el paquete incluye otras utilidades como cookie jars, clientes de configuración, reverse proxies, entre otros. • http.server struct provee la base de todas las acciones de nuestro servidor y parámetros. • Dentro del servidor podemos establecer nuestra dirección TCP, routing de peticiones, timeouts e información de headers. • Go provee varios shortcuts (atajos) para invocar un servidor sin iniciar directamente el struct.
  • 9. www.sgcampus.com.mx @sgcampus • Por ejemplo, cuando tenemos muchos valores por default, podríamos usar el siguiente código: • Y para ejecutar lo anterior, basta con poner:
  • 10. www.sgcampus.com.mx @sgcampus Go structs • Structs: colecciones (tipadas) de campos;sirven para agrupar datos para crear registros. • Ejemplo:
  • 11. www.sgcampus.com.mx @sgcampus Lo anterior sirve para invocar un struct de servidor y establecer las propiedades Addr y Handler. Si se quiere tener control más granular de nuestro servidor, se puede hacer de igual manera agregando las propiedades pertinentes.
  • 12. www.sgcampus.com.mx @sgcampus Hello World! • Objetivo: Desplegar un JSON en el Browser. • Base: • Este pedacito de código es lo mínimo que requerimos para desplegar un string JSON por medio de HTTP.
  • 13. www.sgcampus.com.mx @sgcampus • Struct de respuesta, que contiene todos los datos que queremos mandar al cliente (variable Message) después de tomarlo del API:
  • 14. www.sgcampus.com.mx @sgcampus Finalmente, tenemos que configurar nuestra función principal (main) para responder a una ruta específica y entregar una respuesta JSON de la siguiente manera:
  • 15. www.sgcampus.com.mx @sgcampus • Al entrar a main(), establecemos una función de manejo de ruta para responder a las peticiones a /api, misma que inicializa un API struct con Hello,world! • Cuando pasamos esto a un arreglo JSON (output) y después de haber mandado el mensaje a nuestra clase iowriter (entrada/ salida), en este caso un valor del tipo http.ResponseWriter, casteamos el valor a string. • El último paso es una manera de mandar el arreglo por medio de una función que espera recibir un string.
  • 16. www.sgcampus.com.mx @sgcampus Casting • Go maneja el casting de tipos de manera muy simple, aplicando el tipo como una función que delimita la variable objetivo. • Por ejemplo, podemos casera un valor int64 a integer simplemente delimitándolo con una función int(NuestroInt64) • Aunque hay algunas excepciones: algunos tipos no pueden ser convertidos directamente a otros y necesitan un paquete como strconv para lograrlo.
  • 17. www.sgcampus.com.mx @sgcampus • Para verificar que todo está bien hecho, abrir el browser de su preferencia y llamar al localhost:8080/api, que debe mostrar el resultado de nuestro Hello World:
  • 18. www.sgcampus.com.mx @sgcampus Construyendo una Ruta • Al hablar de routing en Go, hablamos de un multiplexer (o mux) • En este caso, un multiplexer implica tomar URLs o patrones de URLs y traducirlos a funciones internas. • Visualícenlo como un mapeo simple de una petición a una función. • Por ejemplo: • Existen ciertas limitaciones con el ruteador de mux del paquete net/http, pues, por ejemplo, no se puede generar un wildcard o una expresión regular para una ruta. • Otro problema es que no es bueno para responder a peticiones dinámicas o aleatorias, lo que significa que no es capaz de aceptar/ identificar patrones.
  • 20. www.sgcampus.com.mx @sgcampus Soluciones • Soluciones 3rd-party. Framework. • Gorilla: web framework. Tiene un paquete que hace este tipo de routing. • También cuenta con otros beneficios como JSON-RPC, cookies seguras y sesiones globales de datos. • El paquete mux de Gorilla permite el uso de expresiones regulares • http://www.gorillatoolkit.org • http://www.gorillatoolkit.org/pkg/mux
  • 21. www.sgcampus.com.mx @sgcampus Soluciones • Routes, de drone.io (https://github.com/drone/routes) • Paquete dedicado solamente a routear • Importante, porque es más eficiente que Gorilla • Routing de URLs puede representar un cuello de botella en aplicaciones grandes y/o escalables por el número de peticiones • Para aplicaciones pequeñas, la diferencia es despreciable
  • 22. www.sgcampus.com.mx @sgcampus REST en Go • API al último o primero? • Depende de los fines: app o sitio de una sola página vs sitio completo. • Estrategias para diseñar un API • Principios básicos de REST • Creación de endpoints con Gorilla • Tips para versionar aplicaciones
  • 23. www.sgcampus.com.mx @sgcampus REST • REST : Representational state transfer • Definición de formato: JSON, RSS, XML, binarios • Es importante que el formato sea compatible con los datos. E.g. Es usual ver datos traducidos de codificación Base64 y enviados vía JSON • Tamaño: payload o cantidad de datos por transmitir • El modelo de un API tiene que satisfacer las necesidades del cliente de actualizar quitar u obtener un recurso o entrada en particular. • Self-description: engloba 2 componentes de REST. 1) Debe incluir todo lo necesario para satisfacer las peticiones del cliente y 2) información sobre cómo manejar dicha información. • Se evita la idea tradicional de conservar cookies o variables de sesión, pues todo se maneja a través del API/web service.
  • 24. www.sgcampus.com.mx @sgcampus URIs y URLs • Las URL o URI, en este caso, deben ser informativas. No sólo deben dar información sobre los endpoints de datos, pero también qué tipo de datos se debe esperar. • No deben romperse en el futuro, a pesar de las versiones. Deben ser consistentes.No aplicarlo se traduce en mal UX. • Adelantarse a cambios: reaccionar a estos utilizando códigos de status HTTP para indicar nuevas instancias y errores, en lugar de sólo actualizarlos y romper el flujo anterior.
  • 26. www.sgcampus.com.mx @sgcampus JSON Ejemplo de cómo Go puede mandar y recibir JSONs usando solamente los paquetes del core del lenguaje:
  • 27. www.sgcampus.com.mx @sgcampus Deployment/Producción • Métodos tradicionales, servidores • Amazon Web Services (interactuando directamente con la interface/API. Paquete goamz. • Docker. Contenedores • Binarios en CDNs
  • 28. www.sgcampus.com.mx @sgcampus Adicional • Seguridad. SQL injection, cross-site scripting • Performance • Autenticación • Personalización
  • 29. www.sgcampus.com.mx @sgcampus Conclusión • Cuestiones a considerar: • API responsiva • Regresar códigos de status apropiados • Headers • Buen UX • Seguridad • Performance • Detalles particulares (stateless vs stateful, etc)