All Projects → luraproject → lura

luraproject / lura

Licence: other
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation

Programming Languages

go
31211 projects - #10 most used programming language
Makefile
30231 projects

Projects that are alternatives of or similar to lura

Krakend
Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation
Stars: ✭ 4,752 (-7.89%)
Mutual labels:  router, api-gateway, proxies, load-balancer, backend-services, gateway-api, krakend
Altair
Lightweight and Robust API Gateway written in Go
Stars: ✭ 34 (-99.34%)
Mutual labels:  router, api-gateway, proxies
Sample Camel Spring Boot
three samples in different branches that illustrates usage of apache camel as microservice framework providing integration with consul, hystrix, ribbon and other tools
Stars: ✭ 24 (-99.53%)
Mutual labels:  api-gateway, load-balancer
semaphore
Take control of your data, connect with anything, and expose it anywhere through protocols such as HTTP, GraphQL, and gRPC.
Stars: ✭ 74 (-98.57%)
Mutual labels:  api-gateway, gateway-api
go-microservices-and-krakend-api-gateway
This is a shopping basket workshop that shows how to use KrakenD API Gateway.
Stars: ✭ 44 (-99.15%)
Mutual labels:  api-gateway, krakend
shim
HTTP Handler shim for Go projects running on AWS Lambda
Stars: ✭ 64 (-98.76%)
Mutual labels:  router, api-gateway
wolfpacs
WolfPACS is an DICOM load balancer written in Erlang.
Stars: ✭ 1 (-99.98%)
Mutual labels:  router, load-balancer
Ambassador
open source Kubernetes-native API gateway for microservices built on the Envoy Proxy
Stars: ✭ 3,583 (-30.55%)
Mutual labels:  api-gateway, gateway-api
networking-icons
Repo containing various networking icons including routers, switches, servers, firewalls, load balancers and more. Icons are provided in png and svg formats.
Stars: ✭ 61 (-98.82%)
Mutual labels:  router, load-balancer
aws-lambda-r
Using R on AWS Lambda
Stars: ✭ 51 (-99.01%)
Mutual labels:  api-gateway
serverless-cloud-vision
Serverless API around Google Cloud Vision
Stars: ✭ 31 (-99.4%)
Mutual labels:  api-gateway
platform
Apinf - Open source API management platform with multi proxy and protocol support
Stars: ✭ 69 (-98.66%)
Mutual labels:  api-gateway
system-design-notebook
Learn System Design step by step
Stars: ✭ 372 (-92.79%)
Mutual labels:  load-balancer
torchestrator
Spin up Tor containers and then proxy HTTP requests via these Tor instances
Stars: ✭ 32 (-99.38%)
Mutual labels:  proxies
gotway
☸️ Cloud native API Gateway powered with in-redis cache
Stars: ✭ 71 (-98.62%)
Mutual labels:  api-gateway
dilovel
An advanced framework is written in PHP, a framework containing rich components such as middleware, orm, request management, template engine, elasticsearch, template engine, many modern frameworks have been written by adopting clean code principles completely written in accordance with PHP standards. like linux operating system ...All of control…
Stars: ✭ 38 (-99.26%)
Mutual labels:  router
sample-spring-cloud-gateway
sample spring cloud application with embedded api gateway on spring cloud gateway with or without service discovery with eureka
Stars: ✭ 25 (-99.52%)
Mutual labels:  api-gateway
gluu-gateway
Gluu API 🚀 and Web Gateway 🎯
Stars: ✭ 29 (-99.44%)
Mutual labels:  api-gateway
svelte-starter-kit
Svelte starter kit — router, state management and testing included.
Stars: ✭ 16 (-99.69%)
Mutual labels:  router
FGRoute
Get your device ip address, router ip or wifi ssid
Stars: ✭ 128 (-97.52%)
Mutual labels:  router

The Lura Project framework

Go Report Card GoDoc CII Best Practices Docker Pulls Slack Widget

An open framework to assemble ultra performance API Gateways with middlewares; formerly known as KrakenD framework, and core service of the KrakenD API Gateway.

Motivation

Consumers of REST API content (specially in microservices) often query backend services that weren't coded for the UI implementation. This is of course a good practice, but the UI consumers need to do implementations that suffer a lot of complexity and burden with the sizes of their microservices responses.

Lura is an API Gateway builder and proxy generator that sits between the client and all the source servers, adding a new layer that removes all the complexity to the clients, providing them only the information that the UI needs. Lura acts as an aggregator of many sources into single endpoints and allows you to group, wrap, transform and shrink responses. Additionally it supports a myriad of middlewares and plugins that allow you to extend the functionality, such as adding Oauth authorization or security layers.

Lura not only supports HTTP(S), but because it is a set of generic libraries you can build all type of API Gateways and proxies, including for instance, an RPC gateway.

Practical Example

A mobile developer needs to construct a single front page that requires data from 4 different calls to their backend services, e.g:

1) api.store.server/products
2) api.store.server/marketing-promos
3) api.users.server/users/{id_user}
4) api.users.server/shopping-cart/{id_user}

The screen is very simple, and the mobile client only needs to retrieve data from 4 different sources, wait for the round trip and then hand pick only a few fields from the response.

What if the mobile could call a single endpoint?

1) lura.server/frontpage/{id_user}

That's something Lura can do for you. And this is how it would look like:

Gateway

Lura would merge all the data and return only the fields you need (the difference in size in the graph).

Visit the Lura Project website for more information.

What's in this repository?

The source code for the Lura project framework. It is designed to work with your own middleware and extend the functionality by using small, independent, reusable components following the Unix philosophy.

Use this repository if you want to build from source your API Gateway or if you want to reuse the components in another application.

If you need a fully functional API Gateway you can download the KrakenD binary for your architecture or build it yourself.

Library Usage

The Lura project is presented as a Go library that you can include in your own Go application to build a powerful proxy or API gateway. In order to get you started several examples of implementations are included in the examples folder.

Of course, you will need Go installed in your system to compile the code.

A ready to use example:

    package main

    import (
        "flag"
        "log"
        "os"

        "github.com/luraproject/lura/config"
        "github.com/luraproject/lura/logging"
        "github.com/luraproject/lura/proxy"
        "github.com/luraproject/lura/router/gin"
    )

    func main() {
        port := flag.Int("p", 0, "Port of the service")
        logLevel := flag.String("l", "ERROR", "Logging level")
        debug := flag.Bool("d", false, "Enable the debug")
        configFile := flag.String("c", "/etc/lura/configuration.json", "Path to the configuration filename")
        flag.Parse()

        parser := config.NewParser()
        serviceConfig, err := parser.Parse(*configFile)
        if err != nil {
            log.Fatal("ERROR:", err.Error())
        }
        serviceConfig.Debug = serviceConfig.Debug || *debug
        if *port != 0 {
            serviceConfig.Port = *port
        }

        logger, _ := logging.NewLogger(*logLevel, os.Stdout, "[LURA]")

        routerFactory := gin.DefaultFactory(proxy.DefaultFactory(logger), logger)

        routerFactory.New().Run(serviceConfig)
    }

Visit the framework overview for more details about the components of the Lura project.

Configuration file

Lura config file

Benchmarks

Check out the benchmark results of several Lura components

Contributing

We are always happy to receive contributions. If you have questions, suggestions, bugs please open an issue. If you want to submit the code, create the issue and send us a pull request for review.

Read CONTRIBUTING.md for more information.

Want more?

Enjoy Lura!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].