Zurück zum Ranking

luraproject/lura

Goluraproject.org

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

api-gatewaymicroservicegolangmiddlewarerouterload-balancergateway-apikrakendproxiesbackend-servicesgatewaygo
Sterne-Wachstum
Sterne
6.8k
Forks
585
Wochenwachstum
Issues
6
2k4k6k
Nov. 2016Jan. 2020Apr. 2023Juli 2026
ArtefakteGo Modulesgo get github.com/luraproject/lura
README

The Lura Project framework

Go Report Card GoDoc CII Best Practices Slack Widget FOSSA Status

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. For a complete example, check the KrakenD CE repository.

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!

License

FOSSA Status

Ähnliche Repositories
Kong/kong

🦍 The API and AI Gateway

LuaApache License 2.0api-gatewaymicroservices
konghq.com/install/
43.8k5.2k
songquanpeng/one-api

LLM API 管理 & 分发系统,支持 OpenAI、Azure、Anthropic Claude、Google Gemini、DeepSeek、字节豆包、ChatGLM、文心一言、讯飞星火、通义千问、360 智脑、腾讯混元等主流模型,统一 API 适配,可用于 key 管理与二次分发。单可执行文件,提供 Docker 镜像,一键部署,开箱即用。LLM API management & key redistribution system, unifying multiple providers under a single API. Single binary, Docker-ready, with an English UI.

JavaScriptnpmMIT Licenseopenai-apiproxy
oneapi.justsong.cn
35.8k6.7k
hashicorp/consul

Consul is a distributed, highly available, and data center aware solution to connect and configure applications across dynamic, distributed infrastructure.

GoGo ModulesOtherconsulservice-mesh
consul.io
30k4.6k
chaitin/SafeLine

SafeLine is a self-hosted WAF(Web Application Firewall) / reverse proxy to protect your web apps from attacks and exploits.

GoGo ModulesGNU General Public License v3.0firewallhttp-flood
ly.safepoint.cloud/fUxS0GW
21.9k1.4k
apache/apisix

The Cloud-Native API Gateway and AI Gateway

LuaApache License 2.0cloud-nativenginx
apisix.apache.org/blog/
16.9k2.9k
Miserlou/Zappa

Serverless Python

PythonPyPIMIT Licensezappaapi-gateway
blog.zappa.io
11.8k1.2k
TykTechnologies/tyk

Tyk Open Source API Gateway written in Go, supporting REST, GraphQL, TCP and gRPC protocols

GoGo ModulesOthergoapi
10.8k1.2k
higress-group/higress

🤖 AI Gateway | AI Native API Gateway

GoGo ModulesApache License 2.0api-gatewayai-gateway
higress.ai
8.9k1.2k
apache/shenyu

Apache ShenYu is a Java native API Gateway for service proxy, protocol conversion and API governance.

JavaMavenApache License 2.0api-gatewayhttp-proxy
shenyu.apache.org
8.8k3.1k
apex/up

Deploy infinitely scalable serverless apps, apis, and sites in seconds to AWS.

GoGo ModulesMIT Licensedeploymentaws
up.docs.apex.sh
8.8k385
ThreeMammals/Ocelot

.NET API Gateway

C#MIT Licenseocelotdotnet
ocelot.readthedocs.io
8.7k1.7k
aws/aws-sam-cli

CLI tool to build, test, debug, and deploy Serverless applications using AWS SAM

PythonPyPIApache License 2.0serverlessaws
aws.amazon.com/serverless/sam/
6.7k1.2k