Saltar al contenido
Apside

GoGolangAPI

API Rest con Golang y Echo

Eduardo Silva ·

⏳ Este artículo tiene 6 años. El contenido puede estar desactualizado.

En este articulo, veremos que es Golang y sus características, También se hará un tutorial de como crear una API Rest con el framework Echo revisando sus características que tiene disponibles.

imagen

Que es Golang

Go es un lenguaje de programación de código abierto creado Google en el 2009. Hizo su primer lanzamiento estable, 2011.

Inicio de primeras ideas en el 2007 Es un lenguaje concurrente y compilado. Tiene una sintaxis muy similar a C, compartiendo algunas características de Python

Tiene características dinámicas.

  • Es un lenguaje concurrente y compilado.
  • Lenguaje estrictamente tipado
  • Goroutines
  • No tiene excepciones, pero si tiene una forma de controlarlo
  • No tiene Clases pero sí se puede programar orientado a objetos.
  • Go no tiene herencia, pero si se puede hacer composición.
  • Las cadenas en Go están codificadas en UTF-8 por defecto.

Propósito

Robert Griesemer, Rob Pike y Ken Thompson crearon este lenguaje con el objetivo de ayudar al programador, habilitando herramientas, automatizar tareas mundanas como el formateo de códigos y eliminar obstáculos para trabajar en bases de código grandes con un manejo simple de concurrencia y con una gestión de código basada en Paquetes.

imagen

Lenguaje Orientado a Objetos

Muchos programadores y foros mencionan que GO es un lenguaje estructurado pero que aun así tiene características que le permiten hacer una programación orientada a objetos.

Por lo que dice desde Golang.org, Es “Si y No”, tiene estructuras, métodos y punteros que le permiten hacer estas funciones de POO

Si y no. Aunque Go tiene tipos y métodos y permite un estilo de programación orientado a objetos, no existe una jerarquía de tipos. El concepto de “interfaz” en Go proporciona un enfoque diferente que creemos que es fácil de usar y, en algunos aspectos, más general. También hay formas de incrustar tipos en otros tipos para proporcionar algo análogo, pero no idéntico, a las subclases. Además, los métodos en Go son más generales que en C ++ o Java: se pueden definir para cualquier tipo de datos, incluso los tipos integrados, como enteros simples, “sin caja”. No están restringidos a estructuras (clases).

Además, la falta de una jerarquía de tipos hace que los “objetos” en Go se sientan mucho más livianos que en lenguajes como C ++ o Java.

Veamos un ejemplo de lo recién mencionado, donde en la estructura “hombre” por medio de la función “respirar()” declarada en la interfaz “humano” se relacionan uno con el otro, lo mismo pasa con la estructura “perro”

package main
import "fmt"
type SerVivo interface {
	estaVivo() bool
}
type humano interface {
	respirar()
	pensar()
	comer()
	sexo() string
}
type animal interface {
	respirar()
	comer()
	EsCarnivoro() bool
}
type vegetal interface {
	Clasificacion() string
}
type hombre struct {
	edad       int
	altura     float32
	peso       float32
	respirando bool
	pensando   bool
	comiendo   bool
	esHombre   bool
	vivo       bool
}
type mujer struct {
	hombre
	// Con solo el nombre se esta heredando todo lo del objeto hombre
}
func (h *hombre) estaVivo() { h.vivo = true }
func (h *hombre) respirar() { h.respirando = true }
func (h *hombre) comer()    { h.comiendo = true }
func (h *hombre) pensar()   { h.pensando = true }
func (h *hombre) sexo() string {
	if h.esHombre == true {
		return "Hombre"
	} else {
		return "Mujer"
	}
}
func HumanosRespirando(hu humano) {
	hu.respirar()
	fmt.Printf("Soy un %s, y ya estoy respirando \n", hu.sexo())
}
/*------------*/
type perro struct {
	respirando bool
	comiendo   bool
	carnivoro  bool
	vivo       bool
}
func (p *perro) estaVivo()         { p.vivo = true }
func (p *perro) respirar()         { p.respirando = true }
func (p *perro) comer()            { p.comiendo = true }
func (p *perro) EsCarnivoro() bool { return p.carnivoro }
func AnimalesRespirar(an animal) {
	an.respirar()
	fmt.Println("Soy un animal y estoy respirando")
}
func AnimalesCarnivoro(an animal) int {
	if an.EsCarnivoro() == true {
		return 1
	}
	return 0
}
/*  */
func estoyVivo(v SerVivo) bool {
	return v.estaVivo()
}
func main() {
	totalCarnivoros := 0
Dogo := new(perro)
	Dogo.carnivoro = true
	Dogo.vivo = true
	AnimalesRespirar(Dogo)
	totalCarnivoros = +AnimalesCarnivoro(Dogo)
	fmt.Printf("Total de carnivoros %d \n", totalCarnivoros)
	//fmt.Printf("Estoy vivo  =%d \n", totalCarnivoros)
Pedro := new(hombre)
	Pedro.esHombre = true
	Pedro.vivo = true
	HumanosRespirando(Pedro)
Maria := new(mujer)
	Maria.vivo = true
	HumanosRespirando(Maria)
}

Luego al crear la función “HumanosRespirando” la cual recibe una interfaz de tipo “humano”, al ser usada en el “main” podrá recibir una estructura de tipo “perro” o “hombre” mostrando los valores de esta estructura.

ECHO API REST

Es un Framework para crear API Rest utilizando el lenguaje Go, este utilizada Middleware la cual por medio de una función encadenada en el ciclo de solicitud-respuesta de HTTP con acceso al Echo#Context que utiliza para realizar una acción específica, por ejemplo, registrar cada solicitud o limitar el número de solicitudes.

imagen

imagen

Para instalar echo se debe ejecutar la siguiente linea de comando una vez instalado Go.

imagen

Luego de esto para poder crear nuestra API REST con echo con un ejemplo.

package main
import (
	"github.com/labstack/echo"
	"net/http"
)
type Persona struct {
	FristName string `json:"first_name"`
	LastName  string `json:"last_name"`
	Age       int    `json:"age"`
}
func main() {
	e := echo.New()
	e.GET("/api", func(c echo.Context) error {
		return c.String(http.StatusOK, "hola Mundo")
	})
	e.GET("/json", func(c echo.Context) error {
		p := Persona{
			FristName: "Alexiys",
			LastName:  "Lazada",
			Age:       38,
		}
		return c.JSON(http.StatusOK, p)
	})
	e.Start(":8080")
}

En el ejemplo anterior, se define el nuevo objeto “echo.New()” luego se define un método GET con una ruta “/api” y una función que recibe un dato de tipo “echo.Context” y retorna un objeto de tipo String con un “hola mundo”

Este Framework también tiene la opción de devolver otros tipos de datos, como en el ejemplo anterior donde se devuelve un JSON mediante el método GET con la ruta “/json”.

Para lograr ejecutar esto solo debemos tener instalado Go y en nuestra consola de comando de nuestro sistema operativo solo debemos ejecutar lo siguiente:

$ go run main.go

luego en nuestra consola aparecerá lo siguiente.

imagen

luego en nuestro postman podremos consumir nuestra API

imagen

imagen

Para generar un archivo compilado de nuestra aplicación solo se debe ejecutar el siguiente comando.

$ go build main.go

Esto generar un archivo compilado dependiendo del sistema operativo en el que estemos, en este caso se utilizo windows 10, obteniendo un archivo ejecutable “.exe”.

imagen

Este archivo levantara nuestra API Rest.

Referencias.

Essential Go

Effective Go

Go Lang & DevOps - A Match Made In Heaven?

Serverless Golang API with AWS Lambda

Introduction to Go Programming Language (GoLang)

7 Frameworks To Build A REST API In Go | Nordic APIs |

Guide | Echo - High performance, minimalist Go web framework

Manejo de errores en Go (Golang) - Steemit

Go con Ejemplos

Frequently Asked Questions (FAQ)

Go Introductory Tutorials

Vincent Blanchon - Medium

Go: Concurrency & Scheduler Affinity

imagen

Gracias por darte el tiempo de leer este Articulo y llegar hasta aquí

Seguí leyendo