Header Ads Widget

Ticker

6/recent/ticker-posts

Escribir microservicios en Go

 

escribiendo-microservicios-en-go-01

En A Farewell to Arms de Hemingway , el arquetipo heroico que Frederick Henry afirmaba de los martinis, “Nunca había probado algo tan fresco y limpio. Me hicieron sentir civilizado ". Los días de Hemingway podrían haber estado ausente de las API y lenguajes de codificación, pero ¿había existido en la era moderna, probablemente habría dicho lo mismo de Go , la única , refrescante , el lenguaje-futuro amigable tomando el mundo API por la tormenta.

Hoy echamos un vistazo a este lenguaje de moda y único. Al final de esta pieza, habremos discutido la mecánica básica de este favorito de los desarrolladores; incluso produciremos una API rudimentaria para mostrar lo fácil que es ponerlo en funcionamiento.

¿Vamos? ¿Ir a donde?

El lenguaje Go, también conocido como "golang", comenzó su vida en 2007, como un proyecto apasionante de Robert Griesemer, Rob Pike y Kem Thompson , entonces empleados de Google. Si bien el lenguaje comenzó como un experimento más que como un proyecto para reemplazar a otros idiomas, las primeras versiones mostraban tanta promesa que el proyecto rápidamente tomó vida propia.

Debido a que el lenguaje derivó libremente su sintaxis de C , un lenguaje popular en las comunidades de desarrollo, y agregó funcionalidad a través de seguridad de tipos, recolección de basura y una gran biblioteca de paquetes, el lenguaje rápidamente adquirió la reputación de ser fácil de usar . Esta naturaleza muy elogiada y altamente efectiva y fácil de usar rápidamente convirtió a Go en el idioma elegido por los desarrolladores aficionados, y en 2009, el idioma entró en la conciencia pública.

A medida que el desarrollo ha continuado, la adopción de Go como estándar para marcos se ha disparado . Este desarrollo e innovación constantes posicionaron a Go como el lenguaje de la experimentación, lo que lo convierte en el mejor para enfoques a prueba de futuro y de "desarrollo para más tarde" del ciclo de vida del desarrollo .

¿Por qué ir?

En pocas palabras, Go es un lenguaje maravilloso que incorpora lo mejor de dos mundos. Debido a que se desarrolló principalmente con el lenguaje de programación C en mente, muchos desarrolladores experimentados estarán íntimamente familiarizados con las metodologías y terminologías inherentes al sistema. Sin embargo, estas similitudes son de estilo más que sustancia, lo que significa que las limitaciones que tienen los comandos y sintaxis derivados de C en sus idiomas nativos están prácticamente eliminadas de Go.

Si bien sus similitudes con otros lenguajes son un mundo de mención positiva, Go se ha convertido en una bestia por derecho propio, proporcionando muchos conjuntos de características extensibles y experimentales para un mayor desarrollo. Go proporciona un sistema perfecto para el desarrollo que elimina muchos de los cálculos que requieren más tiempo de otros lenguajes. Con los paquetes básicos de golang se incluyen primitivas de moneda, desarrollo de lenguaje dinámico y un paquete Net / HTTP básico para manejar implementaciones HTTP cliente / servidor de una manera eficiente en cuanto a recursos y tiempo . Go se compila sorprendentemente rápido y utiliza bibliotecas y paquetes estándar básicos para hacer cosas increíbles.

Ciclo de vida de la API de publicación de blog

API rudimentaria: el servidor

Ahora que hemos escuchado lo fácil que es implementar Go, construyamos fragmentos básicos de código para una demostración. Hoy, crearemos un diseño de API muy rudimentario para responder a una consulta de una manera específica, utilizando el estilo RESTful rápido y ligero de desarrollo de API .

En Go (como en la mayoría de los lenguajes), el primer paso para crear una API web o un microservicio es crear un servidor básico. Primero, necesitamos establecer qué paquetes y servicios se cargarán automáticamente al inicio.

package main

import (
  "fmt"
  "net/http"
)

En el fragmento anterior, hemos definido algunas cosas muy importantes. Al indicar la primera línea, "paquete principal", establecemos que lo que estamos ejecutando es un comando ejecutable (los comandos ejecutables en Go siempre usan "paquete principal"). En segundo lugar, declaramos algunos paquetes adicionales que queremos utilizar, específicamente "fmt", "net / http", "log", "html" y "io / ioutil". Tenga en cuenta que si bien no vamos a utilizar todos estos en este fragmento de código, es una práctica aceptable alternarlos todos para necesidades de desarrollo futuras.

Ahora necesitamos agregar algunas líneas de código para definir qué es lo que queremos que haga nuestro código.

package main

import (
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome, %s!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.ListenAndServe(":8080", nil)
}

Hemos agregado dos secciones principales a este código, cada una con roles muy importantes que desempeñar en la ejecución. Este fragmento de código completo, cuando se ejecute, activará un servidor en el puerto 8080 de todas las interfaces (para conectarse, utilizaremos http: // localhost: 8080). Para hacer esto, necesitábamos definir dos funciones.http : // localhost 8080 ). Para hacer esto, necesitábamos definir dos funciones.

La primera función, "func handler", utiliza las llamadas http.ResponseWriter y http.Request para devolver la conexión al servidor con una cadena de texto. Este texto, “¡Bienvenido,%!”, Luego utiliza la cadena r.URL.Path [1:] para agregar la URL de conexión al texto devuelto. Por lo tanto, cuando el usuario "John_Smith" se conecta a su portal personal ubicado en "http: // localhost: 8080 / John_Smith", recibirá "Hello, John_Smith!" como respuesta indicando el éxito de su conexión.http : // localhost 8080 John Smith " , recibirá" Hello, John_Smith! " como respuesta indicando el éxito de su conexión.

Una segunda función, "func main", utiliza http.ListenAndServe para dirigir todo el tráfico al puerto 8080 utilizando el controlador predeterminado. Este controlador luego administra el tráfico que fluye hacia el puerto 8080 a través de las funciones o rutas definidas por las API. Esto permite que nuestro código funcione en conjunto con el servidor, dirigiendo el tráfico y gestionando el flujo de datos.

Más tutoriales: Creación de un servicio virtual con ReadAPI

Ampliando la utilidad

Lo que tenemos ahora es un servidor web básico. Es un servidor web muy bueno, pero en términos de API, es completamente inútil. Una API, por su propia definición, es una interfaz entre usuarios y aplicaciones; esta comunicación es necesariamente una vía de doble sentido, donde las solicitudes se manejan y responden con reglas específicas.

Ahora que tenemos un servidor, conviértalo en una API real y hagamos que haga algo por nosotros. Hasta ahora, hemos desarrollado un servidor básico que puede alojar archivos y datos para que los clientes accedan a ellos. Permitamos que un cliente solicite el nombre de la compilación, el número y la fecha cuando se le solicite con la invocación "acerca de".

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Welcome, %!", r.URL.Path[1:])
}

func main() {
    http.HandleFunc("/", handler)
    http.HandleFunc("/about/", about)
    http.ListenAndServe(":8080", nil)
}

type Message struct {
    Text string
}

func about (w http.ResponseWriter, r *http.Request) {

    m := Message{"Welcome to the SandovalEffect API, build v0.0.001.992, 6/22/2015 0340 UTC."}
    b, err := json.Marshal(m)

    if err != nil {
        panic(err)
    }

     w.Write(b)
}

Se han agregado tres partes al final de nuestro código. El primero, "tipo estructura de mensaje", es un elemento que define la estructura. Todos los datos deben tener una estructura a través de variables definidas, de lo contrario, se considera que los datos están en formato sin procesar. Hemos definido nuestra estructura como "Cadena de texto", lo que significa que cualquier dato que venga se entregará como una cadena de texto sin formato en lugar de formatearla en moneda, fechas u otros formatos.

En segundo lugar, hemos agregado una sección bastante larga que responderá a su invocación con un mensaje de cadena de texto que dice "Bienvenido a la API SandovalEffect, compilación v0.0.001.992, 22/6/2015 0340 UTC". La tercera adición está relacionada con la segunda y es un estado de pánico, es decir, es la respuesta definida cuando se realiza una invocación defectuosa. Este fragmento de código permitirá que http: // localhost: 8080 / about / devuelva la cadena anterior y devuelva un código de error con el registro cuando se realice una conexión o solicitud de falla.http : // localhost 8080 about / para devolver la cadena anterior y devolver un código de error con el registro cuando se realiza una conexión o una solicitud de error.

Tutorial de integración: cree un mejor correo electrónico con la API de Twilio

Conclusión: de la simplicidad a la complejidad

The golang gopher: el nuevo lenguaje de programación genial en el bloque

The Golang gopher: el nuevo y genial lenguaje de programación en el bloque

Lo que se ha mostrado hasta ahora es increíblemente simple, pero en realidad es uno de los códigos más importantes que jamás haya visto en golang. Go es un lenguaje que es fundamentalmente extensible , y si aprende una función única y simple, como invocar una llamada que proporciona datos simples, estos datos se pueden formatear, almacenar, manipular, eliminar, etc. Algo tan simple como llamar a la función "acerca de" podría usarse para hacer referencia a números de existencias o precios de tiendas, por ejemplo.

Se pueden encontrar más funciones en la biblioteca estándar para casi cualquier cosa que desee hacer. Por ejemplo, utilizando la función "filepath.Walk", puede escanear un sistema de archivos y generar los archivos en la raíz de una carpeta y mostrar la estructura del directorio en forma de texto. La función "gzip" permite la compresión y descompresión del formato gzip especificado en RFC 1952.

La función "regexp" permite la búsqueda de expresiones regulares sobre el contenido de un sistema o archivo. Para una complejidad masiva, el paquete de "tiempo de ejecución" permite coordinar las operaciones entre el usuario y el sistema de tiempo de ejecución de Go para controlar subrutinas e interfaces.

Afortunadamente, el sistema de extensibilidad Go es bastante intuitivo . Al utilizar un sistema de paquetes similar a Linux , golang supera en gran medida la necesidad de construir marcos pesados ​​y que consumen mucho tiempo, lo que permite un aprendizaje, producción e implementación más rápidos. Esta relativa simplicidad y la consiguiente reducción de los gastos generales han facilitado a las empresas y las personas la creación de microservicios y API, una práctica que se está volviendo cada vez más importante en la era empresarial moderna .

Publicar un comentario

0 Comentarios