{"id":27063645,"url":"https://github.com/devopsfaith/krakend","last_synced_at":"2025-04-05T16:01:51.552Z","repository":{"id":37384984,"uuid":"72875399","full_name":"luraproject/lura","owner":"luraproject","description":"Ultra performant API Gateway with middlewares. A project hosted at The Linux Foundation","archived":false,"fork":false,"pushed_at":"2024-10-28T15:26:50.000Z","size":1576,"stargazers_count":6351,"open_issues_count":8,"forks_count":564,"subscribers_count":117,"default_branch":"master","last_synced_at":"2024-10-29T15:05:07.262Z","etag":null,"topics":["api-gateway","apis","backend-services","gateway","gateway-api","go","golang","krakend","load-balancer","microservice","middleware","proxies","router"],"latest_commit_sha":null,"homepage":"https://luraproject.org","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/luraproject.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2016-11-04T18:37:13.000Z","updated_at":"2024-10-28T15:26:52.000Z","dependencies_parsed_at":"2023-07-17T19:52:56.279Z","dependency_job_id":"8e51bbfb-6ee3-4e07-8e14-fa126ac30f43","html_url":"https://github.com/luraproject/lura","commit_stats":{"total_commits":724,"total_committers":51,"mean_commits":"14.196078431372548","dds":0.5676795580110497,"last_synced_commit":"f30b0a9f7c16dfb6ea8fc28e33f22c5caeacc3e5"},"previous_names":["luraproject/krakend","devopsfaith/krakend"],"tags_count":49,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luraproject%2Flura","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luraproject%2Flura/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luraproject%2Flura/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/luraproject%2Flura/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/luraproject","download_url":"https://codeload.github.com/luraproject/lura/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247361593,"owners_count":20926641,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-gateway","apis","backend-services","gateway","gateway-api","go","golang","krakend","load-balancer","microservice","middleware","proxies","router"],"created_at":"2025-04-05T16:01:49.430Z","updated_at":"2025-04-05T16:01:51.515Z","avatar_url":"https://github.com/luraproject.png","language":"Go","readme":"\u003cimg src=\"https://luraproject.org/images/lura-logo-header.svg\" width=\"300\" /\u003e\n\n# The Lura Project framework\n\n[![Go Report Card](https://goreportcard.com/badge/github.com/luraproject/lura)](https://goreportcard.com/report/github.com/luraproject/lura)\n[![GoDoc](https://godoc.org/github.com/luraproject/lura?status.svg)](https://godoc.org/github.com/luraproject/lura)\n![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/3151/badge)\n![Docker Pulls](https://img.shields.io/docker/pulls/devopsfaith/krakend.svg)\n[![Slack Widget](https://img.shields.io/badge/join-us%20on%20slack-gray.svg?longCache=true\u0026logo=slack\u0026colorB=red)](https://gophers.slack.com/messages/lura)\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fluraproject%2Flura.svg?type=shield\u0026issueType=license)](https://app.fossa.com/projects/git%2Bgithub.com%2Fluraproject%2Flura?ref=badge_shield\u0026issueType=license)\n\n\nAn open framework to assemble ultra performance API Gateways with middlewares; formerly known as _KrakenD framework_, and core service of the [KrakenD API Gateway](http://www.krakend.io).\n\n## Motivation\n\nConsumers 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.\n\nLura 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.\n\nLura 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.\n\n### Practical Example\n\nA mobile developer needs to construct a single front page that requires data from 4 different calls to their backend services, e.g:\n\n    1) api.store.server/products\n    2) api.store.server/marketing-promos\n    3) api.users.server/users/{id_user}\n    4) api.users.server/shopping-cart/{id_user}\n\nThe 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.\n\nWhat if the mobile could call a single endpoint?\n\n    1) lura.server/frontpage/{id_user}\n\nThat's something Lura can do for you. And this is how it would look like:\n\n![Gateway](https://luraproject.org/images/docs/lura-gateway.png)\n\nLura would merge all the data and return only the fields you need (the difference in size in the graph).\n\nVisit the [Lura Project website](https://luraproject.org) for more information.\n\n## What's in this repository?\n\nThe source code for the [Lura project](https://luraproject.org) framework. It is designed to work with your own middleware and extend the functionality by using small, independent, reusable components following the Unix philosophy.\n\nUse this repository if you want to **build from source your API Gateway** or if you want to **reuse the components in another application**.\n\nIf you need a fully functional API Gateway you can [download the KrakenD binary for your architecture](http://www.krakend.io/download) or [build it yourself](https://github.com/krakendio/krakend-ce).\n\n\n## Library Usage\nThe 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](https://github.com/krakendio/krakend-ce).\n\nOf course, you will need [Go installed](https://golang.org/doc/install) in your system to compile the code.\n\nA ready to use example:\n\n```go\n    package main\n\n    import (\n        \"flag\"\n        \"log\"\n        \"os\"\n\n        \"github.com/luraproject/lura/config\"\n        \"github.com/luraproject/lura/logging\"\n        \"github.com/luraproject/lura/proxy\"\n        \"github.com/luraproject/lura/router/gin\"\n    )\n\n    func main() {\n        port := flag.Int(\"p\", 0, \"Port of the service\")\n        logLevel := flag.String(\"l\", \"ERROR\", \"Logging level\")\n        debug := flag.Bool(\"d\", false, \"Enable the debug\")\n        configFile := flag.String(\"c\", \"/etc/lura/configuration.json\", \"Path to the configuration filename\")\n        flag.Parse()\n\n        parser := config.NewParser()\n        serviceConfig, err := parser.Parse(*configFile)\n        if err != nil {\n            log.Fatal(\"ERROR:\", err.Error())\n        }\n        serviceConfig.Debug = serviceConfig.Debug || *debug\n        if *port != 0 {\n            serviceConfig.Port = *port\n        }\n\n        logger, _ := logging.NewLogger(*logLevel, os.Stdout, \"[LURA]\")\n\n        routerFactory := gin.DefaultFactory(proxy.DefaultFactory(logger), logger)\n\n        routerFactory.New().Run(serviceConfig)\n    }\n```\n\nVisit the [framework overview](/docs/OVERVIEW.md) for more details about the components of the Lura project.\n\n## Configuration file\n\n[Lura config file](/docs/CONFIG.md)\n\n## Benchmarks\n\nCheck out the [benchmark results](/docs/BENCHMARKS.md) of several Lura components\n\n## Contributing\nWe are always happy to receive contributions. If you have questions, suggestions, bugs please open an issue.\nIf you want to submit the code, create the issue and send us a pull request for review.\n\nRead [CONTRIBUTING.md](/CONTRIBUTING.md) for more information.\n\n\n## Want more?\n- Follow us on Twitter: [@luraproject](https://twitter.com/luraproject)\n- Visit our [Slack channel](https://gophers.slack.com/messages/lura)\n- **Read the [documentation](/docs/OVERVIEW.md)**\n\nEnjoy Lura!\n\n\n## License\n[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fluraproject%2Flura.svg?type=large)](https://app.fossa.com/projects/git%2Bgithub.com%2Fluraproject%2Flura?ref=badge_large)\n","funding_links":[],"categories":["Distributed Systems","router","API Gateway","分布式系统","分佈式系統","\u003cspan id=\"分布式系统-distributed-systems\"\u003e分布式系统 Distributed Systems\u003c/span\u003e","Service Toolkits"],"sub_categories":["Advanced Console UIs","Public REST APIs To Use In Tests","高级控制台界面","高級控制台界面","SQL 查询语句构建库","\u003cspan id=\"高级控制台用户界面-advanced-console-uis\"\u003e高级控制台用户界面 Advanced Console UIs\u003c/span\u003e","Go"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevopsfaith%2Fkrakend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevopsfaith%2Fkrakend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevopsfaith%2Fkrakend/lists"}