Lura 项目框架
一个开放的框架,用于通过中间件组装超高性能的 API 网关;前身为 KrakenD 框架,是 KrakenD API 网关 的核心服务。
动机
REST API 内容的消费者(特别是在微服务中)经常查询并非为 UI 实现而编写的后端服务。这当然是一个好习惯,但 UI 消费者需要进行实现,这会因为微服务响应的大小而带来很多复杂性和负担。
Lura 是一个 API 网关 构建器和代理生成器,它位于客户端和所有源服务器之间,添加了一个新层,消除了客户端的所有复杂性,只向它们提供 UI 所需的信息。Lura 充当多个来源到单个端点的 聚合器,允许您对响应进行分组、包装、转换和缩减。此外,它支持大量中间件和插件,使您能够扩展功能,例如添加 OAuth 授权或安全层。
Lura 不仅支持 HTTP(S),而且由于它是一组通用库,您可以构建各种类型的 API 网关和代理,包括例如 RPC 网关。
实际示例
一个移动开发者需要构建一个单一的前端页面,该页面需要来自 4 个不同后端服务调用的数据,例如:
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}
这个页面非常简单,移动客户端 只 需要从 4 个不同的源检索数据,等待往返,然后从响应中只挑选几个字段。
如果移动端可以调用单个端点呢?
1) lura.server/frontpage/{id_user}
这就是 Lura 可以为您做的事情。它看起来是这样的:
Lura 将合并所有数据并只返回您需要的字段(图中大小的差异)。
访问 Lura 项目网站 获取更多信息。
这个仓库里有什么?
Lura 项目 框架的源代码。它旨在与您自己的中间件配合使用,并通过使用小型、独立、可重用的组件来扩展功能,遵循 Unix 哲学。
如果您想 从源代码构建您的 API 网关,或者想 在另一个应用程序中重用组件,请使用此仓库。
如果您需要一个功能完整的 API 网关,您可以下载适合您架构的 KrakenD 二进制文件 或 自己构建。
库使用
Lura 项目作为一个 Go 库 呈现,您可以在自己的 Go 应用程序中包含它来构建强大的代理或 API 网关。有关完整示例,请查看 KrakenD CE 仓库。
当然,您需要在系统中 安装 Go 来编译代码。
一个现成的示例:
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, "服务端口")
logLevel := flag.String("l", "ERROR", "日志级别")
debug := flag.Bool("d", false, "启用调试")
configFile := flag.String("c", "/etc/lura/configuration.json", "配置文件路径")
flag.Parse()
parser := config.NewParser()
serviceConfig, err := parser.Parse(*configFile)
if err != nil {
log.Fatal("错误:", 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)
}
访问 框架概述 了解有关 Lura 项目组件的更多详细信息。
配置文件
基准测试
查看几个 Lura 组件的 基准测试结果
贡献
我们总是很高兴收到贡献。如果您有问题、建议、错误,请开启一个 issue。 如果您想提交代码,请创建 issue 并向我们发送 pull request 以供审核。
阅读 CONTRIBUTING.md 获取更多信息。
想要更多?
- 在 Twitter 上关注我们:@luraproject
- 访问我们的 Slack 频道
- 阅读 文档
享受 Lura!