Header Ads Widget

Ticker

6/recent/ticker-posts

7 marcos para construir una API REST en Go


 Anteriormente hemos hablado de Go  : es un lenguaje muy potente, eficiente y ajustado que potencia las aplicaciones empresariales y de grupos pequeños. Si bien Go en sí es muy poderoso, como con cualquier idioma, a menudo se desea o se requiere una funcionalidad adicional.

Cuando surgen esas situaciones, tener un marco sólido del que depender es muy importante. Afortunadamente, Go ha madurado desde su lanzamiento y cuenta con una amplia gama de marcos increíbles.

Si bien el "marco" a menudo se confunde con dependencias o extensiones, en realidad, un buen marco es simplemente una biblioteca que brinda soporte para una variedad de actividades y servicios. Los marcos a menudo se enmarcan dentro de las restricciones de ligereza y todas las funciones , y al elegir su marco específico, debe considerar no solo lo que su API requiere actualmente, sino también lo que podría querer implementar en el futuro.

Hoy, comparamos siete marcos de Go populares que se pueden usar para construir una API REST; identificaremos qué los diferencia y, con suerte, descubriremos un marco que sea adecuado para su aplicación determinada.

Leer también: Escribir microservicios en Go

1 - Deleite

Un marco web de alta productividad para el lenguaje Go.

Pros

Revel tiene, ante todo, todas las funciones . A diferencia de algunos de los otros marcos de esta lista, Revel está diseñado para salir de la caja con gran parte de su conjunto de funciones preconfigurado e instalado para una funcionalidad óptima. Esto significa que puede comenzar prácticamente sin configuración, lo cual es muy atractivo para muchas empresas emergentes y grupos pequeños.

Del mismo modo, Revel no requiere muchas bibliotecas de terceros o implementaciones de middleware para realizar tareas complejas, lo que, a diferencia de algunas entradas de esta lista, significa que es relativamente autónomo . Al empaquetar todo junto fuera de la caja y garantizar que incluso las tareas complejas se puedan realizar con la instalación predeterminada, Revel parece posicionarse como una solución de “ventanilla única”.

Esto también viene con la notable calidad de tener una complejidad relativamente reducida para una alta funcionalidad. Si bien otros marcos pueden vincularse con distribuciones de terceros para permitir los mismos niveles de funcionalidad, esto significa mayor complejidad y requisitos para las dependencias de terceros.

Para llevar

  • Conjunto completo de funciones: Revel tiene todas las funciones listas para usar, con bibliotecas empaquetadas y conjuntos de funciones para todo, desde tareas pequeñas hasta complejas.
  • Autónomo : al evitar la dependencia de bibliotecas de terceros, Revel funciona "de fábrica", lo que reduce la complejidad entre las bibliotecas y las extensiones que interactúan.

Contras

El hecho de que Revel tenga todas las funciones podría, para algunos, ser negativo. Si bien es genial que Revel tenga todas las funciones listas para usar, esto también significa que la base del código es mucho más grande que otras soluciones y, por lo tanto, no es muy simple. Esta es una cualidad interesante cuando se mira a Go, que está destinado a ser delgado para soluciones desde pequeñas hasta enormes. Si bien tener todo preconfigurado y empaquetado es excelente en términos de configuración rápida, significa que pierde algo de agilidad.

Si bien esto no es un gran problema para muchos, la falta de soporte nativo para MongoDB sí lo es. Si bien este soporte se puede implementar utilizando soluciones de terceros, es algo que uno esperaría con una implementación de "fregadero de cocina" donde todo lo demás está empaquetado; la falta de una característica clave como esta hace que sea difícil de vender para algunos.

Para llevar

  • Base de código más grande : Revel es una implementación de "fregadero de cocina", que incluye todo lo que necesita para empezar. Esto significa mayor peso y tamaño de la estructura, por lo que no se inclina.
  • Sin MongoDB : la falta de MongoDB es un problema para muchas personas que utilizan el marco, y aunque este soporte se puede agregar usando implementaciones de terceros, agrega trabajo innecesario que no esperaría de un marco tan completo.

2 - Ginebra

El marco web con todas las funciones más rápido para Golang. Claro como el cristal.

Pros

Mientras que soluciones como Revel prometen una experiencia todo en uno, Gin ofrece un marco muy minimalista y recortado que lleva consigo solo las características, bibliotecas y funcionalidades más esenciales. Esto hace que Gin sea extremadamente delgado , y este es realmente el gran punto de venta para marcos como Gin.

Este espíritu de diseño simple y conciso se refleja en la documentación , que es directa y efectiva. Esto hace que Gin sea un excelente marco para comenzar y puede facilitar la depuración y el seguimiento de problemas.

Es de destacar que Gin fue diseñado con Martini , otro marco, en mente. Mediante el uso de httprouter para su manejo del tráfico, Gin logró aumentar la velocidad en más de 40 veces desde Martini. Esto lo convierte en una buena elección entre código espartano y velocidad.

Para llevar

  • Minimalista : Gin es muy minimalista e incluye solo características, bibliotecas y funcionalidades esenciales. Esto lo hace extremadamente delgado y apto para sistemas con baja potencia.
  • Utilizable : marco muy simple con documentación decente, por lo que es muy fácil de aprender y depurar.
  • Ágil : Extremadamente rápido, especialmente en comparación con el marco de génesis, Martini.

Contras

La ginebra es muy espartana y para muchos eso es algo bueno. Sin embargo, para las soluciones empresariales, Gin simplemente no es suficiente. Si bien, en teoría, puede vincular implementaciones de terceros y otras extensiones, el soporte para estas soluciones no es tan sólido como en otros marcos y sirve para negar gran parte de lo que hace que Gin sea algo positivo en primer lugar.

Del mismo modo, las limitaciones de Gin significan que, incluso si amplía el marco, está trasladando gran parte del procesamiento al cliente. Por lo tanto, cualquier limitación del lado del cliente se reflejará en la implementación del servidor y, por lo tanto, en la funcionalidad real de la API.

El servidor solo puede hacer mucho en Gin, y con eso, obtienes una funcionalidad limitada.

Para llevar

  • No para empresas : Gin es un marco muy espartano y, por lo tanto, no es adecuado para aplicaciones que requieren un gran backend o varias funciones de servidor complejas.
  • Gran cliente : el marco tiende a descargar mucho trabajo al cliente debido a las limitaciones del servidor, lo que limita las posibles implementaciones a lo que tiene.
También revisamos marcos PHP livianos para construir API REST

3 - Martini

Marco web elegante para Go

Pros

Martini es extremadamente delgado , pero a diferencia de Gin, cuenta con un soporte de terceros impresionante y fácil de integrar. Estas bibliotecas adicionales toman lo que es la base de código de Martini increíblemente simple y le permiten ampliar y aprovechar su funcionalidad para ser algo más que sus componentes. Este soporte adicional de terceros hace que Martini sea menos un marco como Gin y más un ecosistema , como Revel.

Sin embargo, esa es la última de las similitudes con Revel. Martini tiene un diseño muy delgado y está destinado a hacer mucho trabajo con una mínima cantidad de gastos generales. Esto significa que ocupa un espacio en algún lugar entre la programación empresarial y de equipos pequeños, ofreciendo una buena escalabilidad .

Martini también ofrece una amplia gama de soporte para metodologías y formatos de enrutamiento, y ofrece soporte para comodines, parámetros variables, restricción de expresiones regulares y más. Esto lo hace posiblemente más poderoso que Gin por no mucho más sobrecarga.

Finalmente, Martini ha estado en el juego por un tiempo; en consecuencia, hay una amplia documentación y una gran base de instalación. Si tiene una pregunta sobre Martini, es probable que haya sido respondida.

Para llevar

  • Lean : Martini es lean y tiene una gran base de soporte de terceros, lo que lo hace modular y escalable.
  • Buenos documentos : la documentación de Martini es excelente, y la experiencia y la antigüedad de la plataforma significa que la mayoría de las preguntas tienen respuestas documentadas.
  • Buen enrutamiento : el enrutamiento con Martini es un placer: se admiten parámetros complejos y varios formatos de datos.

Contras

Sin embargo, Martini no es solo diversión y juegos: hay una razón por la que Gin se desarrolló como un cuasi-reemplazo. Martini no maneja el enrutamiento de tráfico a través de httprouter como lo hace Gin, lo que significa que es 40 veces más lento , con una implementación posiblemente más compleja y pesada de básicamente las mismas bibliotecas y clases.

Si bien la antigüedad de la plataforma es en un caso un beneficio para la base de conocimientos y la documentación, también es una sentencia de muerte para el control de versiones : Martini no se ha mantenido (en su implementación principal) desde 2014. Si bien aún se mantienen permutaciones y bifurcaciones adicionales, estos cada uno tiene aspectos negativos y positivos que representan su esencia de Martini.

Finalmente, Martini hace algo que aleja a muchos desarrolladores del marco: la inyección de dependencia como metodología para el descubrimiento de controladores. Martini descubre los manejadores y la metodología de aprobación mediante un esquema de inyección de dependencia, que está bien para el propósito previsto, pero tiene el efecto secundario de eludir el sistema de escritura de Go. Teniendo en cuenta que el sistema de tipos es una gran razón para la adopción de Go, esto es definitivamente negativo.

Para llevar

  • Más lento : 40 veces más lento que Gin.
  • No mantenido activamente : Standard Martini (sin contar las bifurcaciones y mutaciones) no se ha mantenido desde 2014. Esta falta de evolución podría ser un riesgo.
  • Inyección de dependencia : Martini averigua cuáles son sus controladores y la metodología de solicitud de paso mediante la inyección de dependencia. Esto significa que, en muchos casos, elude el sistema de escritura inherente a Go.

4 - Web.go

La forma más sencilla de crear aplicaciones web con Go

Pros

Web.go es único en el sentido de que es un marco muy ligero que ofrece funcionalidad adicional sobre Go debido a un sistema de enrutamiento de árbol . Este es un sistema mucho más eficiente que el enrutamiento de lista simple, ya que permite el enrutamiento a través de relaciones en lugar de un propósito o uso. Lo que esto significa en última instancia es un marco mucho más liviano, eficiente y fácil de usar que también cuenta con ganancias impresionantes en la eficiencia de enrutamiento.

Cabe señalar que Web.go está diseñado desde cero para ser extremadamente básico. Web.go es espartano por elección, y es probable que cualquier característica adicional no cambie Web.go de manera significativa en términos del tamaño o los requisitos de la base de código subyacente.

Para llevar

  • Minimalista : Extremadamente minimalista tanto en forma como en función. Como otras implementaciones minimalistas, Web.go está destinado a ser básico sin mucho agregado al marco.
  • Enrutamiento de árboles : diseñado para enrutar utilizando árboles en lugar de listas, lo que brinda impresionantes ganancias de eficiencia en el enrutamiento del tráfico. Esto hace que el marco tenga un costo de recursos extremadamente bajo.

Contras

Web.go es minimalista por diseño, pero, al igual que otros marcos que intentan hacer una implementación liviana, esto en realidad funciona en su contra de muchas maneras. Esto es aún más pronunciado si se tiene en cuenta que Web.go está destinado a ser minimalista por su propia naturaleza: hay muy poco que Web.go haga que Go no pueda por sí solo.

En particular, lo que hace de manera diferente, en este caso, el enrutamiento es el mejor ejemplo, se puede hacer en Go con soluciones adicionales de terceros que, aunque aumentan la complejidad y la base de código, ofrecen más que una simple característica. La cuestión de si el enrutamiento de ruta vale la pena la complejidad adicional, por pequeña que sea, es una corriente subyacente cuando se considera Web.go.

Para llevar

  • Go no se extiende tanto :  hay muy poco de lo que hace Web.go que el marco estándar de Go no pueda hacer por sí solo. Si bien el sistema de enrutamiento del árbol de ruta definitivamente es poderoso, es cuestionable si vale la pena agregar complejidad a lo que de otro modo sería una implementación básica de Go.

5 - Gorila

Un kit de herramientas web para el lenguaje de programación Go | Repo

Pros

Gorilla es un gran ejemplo de escalabilidad a través de la modularidad . Gorilla está diseñado para poder soltar paquetes , vincular nuevas extensiones, habilitar módulos y más, todo sin sacrificar la funcionalidad principal del marco en sí. Por esta razón, Gorilla es amado tanto por las empresas como por los grupos de pequeña escala, ya que es el ejemplo perfecto de escalamiento de sistema modular , que representa tanto la facilidad como la eficacia de tal situación.

Además, su compatibilidad nativa con websockets significa que Gorilla está listo para funcionar, con metodologías y enfoques adicionales como enrutamiento HTTP, esquemas de URL y funciones arbitrarias que sirven como mecanismos de enrutamiento adicionales para aplicaciones web nuevas y establecidas.

Para llevar

  • Websockets : admite websockets listos para usar, lo cual es muy valioso.
  • Enrutamiento : el enrutamiento HTTP, los esquemas de URL e incluso las funciones arbitrarias también se admiten como mecanismo de enrutamiento.
  • Escalable : Gorilla se puede escalar en cualquier dirección. Puede soltar paquetes, agregar paquetes, vincularlos a nuevas extensiones, etc., sin sacrificar la funcionalidad principal de Gorilla.

Contras

Si bien la capacidad de ser modular significa que puede obtener lo que desee, el esfuerzo realizado en la  configuración  podría significar una gran cantidad de tiempo perdido para llevar la funcionalidad a donde debe estar. La eficiencia también se ve afectada en términos de configuración lista para usar en comparación con otros marcos. Si bien esto ciertamente se puede solucionar eliminando paquetes y adoptando métodos de enrutamiento más eficientes, otros marcos son mucho más eficientes desde el primer momento.

Para llevar

  • Esfuerzo de configuración : Gorilla requiere más tiempo y esfuerzo para configurar los componentes modulares.
  • Rendimiento : hay una marcada disminución en el rendimiento entre las soluciones Gorilla listas para usar y otras soluciones más "ajustadas" listas para usar. Por supuesto, esto se puede cambiar, pero muchos desarrolladores que crean una nueva API usarán primero Gorilla como base, por lo que es una consideración seria.

6 - Goji

Un multiplexor de solicitudes minimalista y flexible para Go | Repo

Pros

Como Web.go, Goji es esencialmente una capa sobre el idioma Go. Esto significa que es un  marco a través de la abstracción y es quizás la implementación más pequeña posible. Este procesamiento ligero y eficiente lo convierte en un buen punto de partida para las API ajustadas.

Es de destacar que Goji viene integrado con Einhorn , un administrador de sockets independiente del idioma que proporciona soporte websocket automático y listo para usar. Al igual que con Gorilla, esto es muy beneficioso y no es una característica que normalmente se asumiría en un marco tan pequeño y ligero.

Estos dos elementos hacen de Goji una excelente opción para API ligeras, rápidas, eficientes y de bajos recursos que necesitan hacer mucho con recursos relativamente bajos disponibles.

Para llevar

  • Muy delgado : Esencialmente una capa de abstracción, de tamaño muy mínimo y, por lo tanto, extremadamente liviana y eficiente.
  • Einhorn : se integra con Einhorn, un administrador de sockets independiente del idioma que proporciona soporte websocket listo para usar.

Contras

Al igual que con otras implementaciones lean, desafortunadamente, no hay mucho que Goji haga que Go no haga. Debido a esto, es una gran consideración entre el esfuerzo realizado para implementar y la recompensa en términos de conjunto de características. Puede obtener mucho más por menos esfuerzo con otras implementaciones listas para usar. Dicho esto, el atractivo principal aquí son los websockets , y eso podría ser suficiente para que esta estafa no sea un problema dados ciertos requisitos de implementación.

Para llevar

  • Limitado : Esencialmente una capa de abstracción; no hace nada que Go no haga ya.

7 - Beego

Pros

Para completar nuestras selecciones para esta pieza, Beego es un marco con todas las funciones que debe gran parte de su conceptualización de desarrollo y enfoque a Revel. Si bien Beego es relativamente delgado para lo que hace, es un marco de "baterías incluidas", que ofrece un conjunto de características bastante amplio para lo que en última instancia no es una gran base de código.

Parte de esta funcionalidad es la asombrosa " herramienta Bee ", una herramienta que busca cambios automatizados en la base de código y realiza funciones automatizadas que dependen de esos cambios. La herramienta Bee se puede configurar para crear automáticamente nuevas revisiones, archivar cambios en la función, etc.

La gran funcionalidad tampoco se detiene ahí. Beego cuenta con un excelente sistema ORM que permite modelar relaciones y recursos de una manera muy eficaz. En última instancia, esto significa un procesamiento más rápido y un mejor enrutamiento del tráfico , que siempre es una característica bienvenida.

Para llevar

  • Con todas las funciones : al igual que Revel, Beego tiene más funciones y se incluye mucho en un marco relativamente simple (para lo que hace).
  •  Herramienta de abeja : la "herramienta de abeja" comprueba los cambios automáticos en el código base y se puede configurar según lo que hace. Puede impulsar una compilación con cada cambio, tener ciertas funciones de archivo de compilación, etc.
    * ORM integrado sólido para la organización de bases de datos de aplicaciones.

Contras

Beego es relativamente delgado, lo cual es bueno: desde cero, el marco fue diseñado para tener una gran cantidad de funcionalidad sin demasiados gastos generales. Desafortunadamente, este concepto de diseño tiene algunas consecuencias no deseadas cuando se trata del almacenamiento en caché de páginas .

Beego almacena en caché el contenido y las páginas en un esfuerzo por mejorar la experiencia del usuario y disminuir la sobrecarga que de otro modo se generaría con la creación constante de nuevas representaciones y páginas. Si bien esto es excelente para la experiencia del usuario, conduce a fallas de compilación silenciosas . La herramienta Bee es excelente para el control de versiones, pero si se empuja una compilación fallida, esto a menudo es transparente tanto para el usuario como para el desarrollador al diseñar, lo que significa que, hasta que caduca un caché, su API puede estar rechazando una cantidad increíble de tráfico útil y válido, pero presentando datos desactualizados.

Beego también es bastante inmaduro. Debido a esto, su comunidad es muy pequeña, lo que significa que tanto los complementos y extensiones de terceros como la documentación y los artículos de la base de conocimientos son escasos.

Finalmente, Beego, especialmente en comparación con algunas implementaciones más lean, es increíblemente detallado y promueve una especie de "charla" a nivel de API. Esto puede ser perjudicial para la salud de los sistemas relacionados y para la eficacia de la entrega de datos; si bien se puede negar mediante el silenciamiento y el procesamiento por lotes, sigue siendo algo que requiere aún más gastos generales para resolver.

Para llevar

  • Almacenamiento en caché : Beego almacena en caché las versiones anteriores de las páginas, lo que está bien para la experiencia del usuario, pero puede provocar un error de compilación silencioso.
  • Hablador como una abeja ocupada : Extremadamente detallado, especialmente en comparación con marcos más ajustados.
  • Sin comunidad : muy inmaduro, carece del tipo de comunidad que disfruta Revel .

En resumen…

Date un capricho con un Gin  Gonic .

Como con todo, esto es en gran medida una consideración de lo que es mejor para sus necesidades declaradas. Cada uno de estos marcos presenta pros y contras específicos, y cada uno de esos pros y contras se basa en gran medida en las opiniones. Encontrará a muchos que ignoran el tema de la complejidad en favor de la abstracción, y aún más que ignoran la verbosidad como un problema y lo promocionan como una característica, pero independientemente de su posición sobre un tema determinado, es probable que encuentre alguna característica dentro de ese es beneficioso hasta el punto de adopción.

En resumen, para las soluciones empresariales, Revel es probablemente la sugerencia más fuerte aquí: su sólida base comunitaria y las implementaciones de terceros bien probadas hacen que sus deficiencias sean más fáciles de abordar, especialmente cuando se trata de hardware que niega muchas de las deficiencias generales de procesamiento.

Para soluciones más pequeñas, algo como Beego podría ser mejor, si la charla se reduce de alguna manera dentro de su sistema interno. Si desea un sistema más pequeño pero más maduro, Gin o Martini son buenas opciones. Web.go y Gorilla son buenos marcos para aquellos que quieran un poco más que Go, pero no un marco listo para usar con todas las funciones. Finalmente, Goji es excelente para implementar websockets a través de Einhorn, especialmente de una manera tan sencilla, aunque, obviamente, si desea más que solo websockets, hay mejores opciones que requieren un poco más de sobrecarga y esfuerzo.

Otros marcos

Intentamos ser completos en nuestras listas de tecnología, pero parece que nos hemos olvidado de algunas:

  • Negroni : marco Golang, alternativa a Martini
  • Echo : marco web Go minimalista, extensible y de alto rendimiento

Recursos

  • Comparación de Go Framework

Publicar un comentario

0 Comentarios