SlideShare une entreprise Scribd logo
1  sur  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!

Contenu connexe

Tendances

Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring FrameworkNatanael Fonseca
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Toshiki Iga
 
Rest API Security
Rest API SecurityRest API Security
Rest API SecurityStormpath
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Helder da Rocha
 
Spring boot
Spring bootSpring boot
Spring bootsdeeg
 
Welcome to Blazor
Welcome to BlazorWelcome to Blazor
Welcome to Blazordark_wisdom
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개종빈 오
 
Authentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongAuthentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongDerek Perkins
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasRodrigo Branas
 
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid RahimianAPI Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid RahimianVahid Rahimian
 
Salesforce Integration using REST SOAP and HTTP callouts
Salesforce Integration using REST SOAP and HTTP calloutsSalesforce Integration using REST SOAP and HTTP callouts
Salesforce Integration using REST SOAP and HTTP calloutsRAMNARAYAN R
 

Tendances (20)

Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Spring Boot
Spring BootSpring Boot
Spring Boot
 
Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf Practical migration from JSP to Thymeleaf
Practical migration from JSP to Thymeleaf
 
Rest API Security
Rest API SecurityRest API Security
Rest API Security
 
Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)Curso de WebServlets (Java EE 7)
Curso de WebServlets (Java EE 7)
 
Content security policy
Content security policyContent security policy
Content security policy
 
AEM - Client Libraries
AEM - Client LibrariesAEM - Client Libraries
AEM - Client Libraries
 
Less presentation
Less presentationLess presentation
Less presentation
 
Spring boot
Spring bootSpring boot
Spring boot
 
Welcome to Blazor
Welcome to BlazorWelcome to Blazor
Welcome to Blazor
 
Le Wagon - 2h Landing
Le Wagon - 2h LandingLe Wagon - 2h Landing
Le Wagon - 2h Landing
 
CSS FLexBox
CSS FLexBoxCSS FLexBox
CSS FLexBox
 
LevelDB 간단한 소개
LevelDB 간단한 소개LevelDB 간단한 소개
LevelDB 간단한 소개
 
【第1.5回勉強会】後編 alfrescoの基本操作
【第1.5回勉強会】後編 alfrescoの基本操作【第1.5回勉強会】後編 alfrescoの基本操作
【第1.5回勉強会】後編 alfrescoの基本操作
 
Authentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrongAuthentication: Cookies vs JWTs and why you’re doing it wrong
Authentication: Cookies vs JWTs and why you’re doing it wrong
 
Node.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo BranasNode.js - #1 - Introdução - Rodrigo Branas
Node.js - #1 - Introdução - Rodrigo Branas
 
RESTful API Design
RESTful API DesignRESTful API Design
RESTful API Design
 
React - Introdução
React - IntroduçãoReact - Introdução
React - Introdução
 
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid RahimianAPI Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
API Design, A Quick Guide to REST, SOAP, gRPC, and GraphQL, By Vahid Rahimian
 
Salesforce Integration using REST SOAP and HTTP callouts
Salesforce Integration using REST SOAP and HTTP calloutsSalesforce Integration using REST SOAP and HTTP callouts
Salesforce Integration using REST SOAP and HTTP callouts
 

Similaire à 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
 

Similaire à 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
ASP.NET MVC CoreASP.NET MVC Core
ASP.NET MVC Core
 
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
 
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
 

Plus 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
 

Plus 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
 

Dernier

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxMiguelAtencio10
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxlosdiosesmanzaneros
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfvladimiroflores1
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanamcerpam
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxAlan779941
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilJuanGallardo438714
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estossgonzalezp1
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfAnnimoUno1
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Dernier (15)

Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
presentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptxpresentacion de PowerPoint de la fuente de poder.pptx
presentacion de PowerPoint de la fuente de poder.pptx
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Presentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmerilPresentación de elementos de afilado con esmeril
Presentación de elementos de afilado con esmeril
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

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)