API Rest con Golang y Echo

Eduardo Silva

Eduardo Silva

Compartir

API Rest con Golang y Echo

En este artículo, 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.

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.


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.

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

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.

luego en nuestro postman podremos consumir nuestra API

API Rest ruta "/api"
API Rest ruta "/json"

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".

Este archivo levantara nuestra API Rest.

Referencias.

The Go Programming Language Blog
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Essential Go
Essential Go
Effective Go - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Go Lang & DevOps - A Match Made In Heaven?
Of late we have seen many Biggies moving their existing enterprise applications from a more conventional programming language to Golang. Biggies like Facebook, Twitter, YouTube, Apple, Dropbox…
Serverless Golang API with AWS Lambda
AWS announced few days ago that Go is now a supported language for AWS Lambda. This seemed like a great opportunity to get my hands dirty by creating a Go serverless application — and deploying it to…
Introduction to Go Programming Language (GoLang)
Go or Golang is a programming language created at Google, by Google developers and other programmers. This programming language is free and open-source and currently being maintained by Google. One…
Guide | Echo - High performance, minimalist Go web framework
Echo guide | Echo is a high performance, extensible, minimalist web framework for Go (Golang).
Manejo de errores en Go (Golang) — Steemit
Manejo de errores en Go Hasta ahora hemos visto algunos ejemplos que involucraban errores , sin embargo, aún no… by orlmicron
Frequently Asked Questions (FAQ) - The Go Programming Language
Go is an open source programming language that makes it easy to build simple, reliable, and efficient software.
Go Introductory Tutorials
A list of tutorials to understand Go Programming Language with deep dive into language spec with basic examples. “Go Introductory Tutorials” is published by Uday Hiwarale in RunGo.
Vincent Blanchon – Medium
Read writing from Vincent Blanchon on Medium. French Gopher in Dubai. Every day, Vincent Blanchon and thousands of other voices read, write, and share important stories on Medium.
Go: Concurrency & Scheduler Affinity
Switching a goroutine from an OS thread to another one has a cost and can slow down the application if it occurs too often. However, through time, the Go scheduler has addressed this issue. It now…

http://goconejemplos.com/

https://nordicapis.com/7-frameworks-to-build-a-rest-api-in-go/

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