介绍
Goyave(发音为 \gɔ.jav\
,"go-yav")是一个全栈式的 Golang Web 框架,专注于 REST API 开发,强调代码的可靠性、可维护性和开发者体验(DX)。
简而言之,Goyave 的目标是:
- 为企业级清洁架构服务,适用于中大型项目
- 帮助开发者专注于应用程序的业务逻辑,而不是在技术细节上花费时间
- 提供开箱即用的全功能包,无需繁琐设置
- 提供典型项目所需的所有功能,没有冗余或魔法
- 为真实世界提供最优配置
- 确保代码的健壮性、可靠性和弹性
- 在保持开放性和可定制性的同时提供规范指导
- 使后端开发变得简单愉快
- 保持清晰详尽的文档,让开发者总能找到问题的答案
Goyave 的非目标是:
- 极致优化和性能
- 小型项目和原型开发
- 提供底层网络控制
- 提供前端开发工具
如果您觉得以上描述符合您的需求,欢迎!本网站包含文档和指南,介绍如何充分利用该框架,以便您开始为业务创造价值。
在此之前,让我们先谈谈创建该框架的动机和背后的决策。如果您不感兴趣,可以直接跳转到安装文档。
为什么创建 Goyave
故事始于 2019 年,在一家拥有许多 Web 服务的公司,这些服务既有内部使用的,也有对外公开的。所有这些服务都使用了大量复制粘贴的样板代码和一个非常有问题的架构,一堆模块被快速拼凑在一起,导致整个基础设施存在缺陷、不可靠且难以维护。没有技术决策或工作有专门的时间。开发人员只有业务实现的时间,从来没有时间真正构建好的技术。
当时,我(框架的作者)主动在空闲时间开始为未来项目开发可重用的基础。我寻找可以立即使用的完整全功能 Go 包并开始构建。事实证明,在当时,没有专注于 REST API 的全功能 Go 框架存在。所以我开始创建一个健壮的库集合,这些库正确地进行接口连接,以便它们能够无缝协作。
一段时间后,我提出了一个简单轻量的框架,带有推荐的架构,并向团队展示。由于时间总是很紧张,技术负责人甚至没有检查或考虑将其集成到我们的项目中。不久后我离开了公司,并继续我的项目。我被允许这样做是因为我的代码不是公司财产:我在空闲时间独自完成这项工作,并且没有被指示这样做。我致力于创建工具,帮助未来的开发者和企业家避免遇到同样的问题,这样他们就可以自信地推动业务发展,同时在任何团队都不可避免遇到的技术主题上节省时间。我将项目以 Goyave 的名称发布在 Github 上。
当时框架非常简陋,存在许多缺陷。随着时间的推移,我不断改进它。我开始用自定义实现替换框架依赖的库,这使得模块之间的兼容性更好。它打开了许多新的可能性,这些在使用各种设计不同且分离的库时是不可能的。
不久之后,一些公司在为新应用程序进行研究时注意到了这个项目。再次说明,Goyave 是当时填补生态系统空白的唯一选择。 我很高兴能够分享我的技能、知识和热情,以便我们能够共同构建更好的软件。使企业能够创造价值并取得成功是我自己对成功的看法。但我还没有完成。让公司与框架合作给我带来了大量的反馈和非常宝贵的经验,这些帮助我塑造了今天的 Goyave 框架。
为什么使用全栈式规范框架
使用全功能框架比用各种库自行组装项目有几个优势:
- 节省时间
- 设置项目只需几秒钟。从头开始设置项目,寻找符合需求的库并使它们无缝互操作可能需要一周或更长时间。
- 所有架构问题和疑问都已为您解决。无需考虑如何解耦各层,如何处理业务事务等。只需遵循框架提供的指南和工具,您就可以顺利开始。
- 完整的详尽文档已准备就绪。您无需自行记录应用程序所有基本模块的工作原理和功能。也无需记录架构和目录结构。
- 得益于这份文档,** onboarding **新开发人员更容易。其中一些人可能已经了解该框架,尽管还不了解您的项目,但会感到宾至如归。
- 可靠性
- 该框架被广泛使用并经过全面测试。与自行实现相比,您的核心系统包含错误的可能性更小。
- 该框架增加了保障措施,确保即使出现问题,您的应用程序仍能正确运行。它提供了许多以最少努力优雅处理错误的方法。
- 您只需担心业务逻辑。这减轻了开发人员的压力,帮助他们保持心态平和。
- 抽象
- 在幕后,框架为您做了很多工作。在其之上构建应用程序保证了符合标准。它使其更加一致。它减少了您的团队必须考虑的小细节的数量。例如,您知道由于验证系统,用户输入将始终具有正确的类型。您不再需要自己进行转换。
为什么开发者体验(DX)很重要
良好的开发者体验(DX)非常重要。如果开发人员通过以最小的认知负荷清楚地了解开发环境的工作原理来掌握它,他们将产生更健壮和可靠的代码。在一个项目上工作越愉快,其质量就越好。这将反映在您的企业提供的产品或服务的质量上。
无数事实证明,快乐的开发人员是高效的开发人员。快乐的开发人员也会乐意编写干净、可维护、经过全面测试的代码,因为这样做并不费力。
Goyave 将通过提供必要的工具并使您的项目易于扩展以解决公司独特的挑战来帮助他们实现这一目标。
赞助者和捐赠者
- Ben Hyrman
- Massimiliano Bertinetti
- ethicnology
- Yariya
- sebastien-d-me
- Nebojša Koturović
贡献者
向 Goyave 贡献者表示衷心的“感谢”:
- Kuinox (Powershell 安装脚本)
- Alexandre GV. (安装脚本 MacOS 兼容性)
- jRimbault (CI 和代码分析)
- Guillermo Galvan (请求额外数据)
- Albert Shirima (速率限制和各种贡献)
- Łukasz Sowa (JWT 中的自定义声明)
- Zao SOULA (配置文件中的自定义 Gorm.Config{})
- Ajtene Kurtaliqi (文档着陆页)
- Louis Laurent (
gyv
生产力 CLI) - Clement3 (
goyave.dev/filter
上的search
功能) - Darkweak (
HTTP 缓存,RFC 兼容
中间件,基于 Souin HTTP 缓存系统) - Jason C Keller (Testify 接口兼容性)
- saltyFamiliar (
DoesntStartWithValidator
) - Muhammad Meganata Adam (
DoesntEndWithValidator
,KeysInValidator
) - BowlOfSoup (配置条目中的
Required
标志,ParseErrorStatusHandler
) - AidanKenney (Clickhouse 支持, 压缩编码器)
- SallesCosta (Slog 丢弃记录器)
- fnoopv (JWT 控制器认证元数据)
生产环境中的 Goyave
这些公司已经在生产环境中使用 Goyave:
想要在这里展示您的公司吗?提交 Pull Request。
Discord
来了解这个框架,随时了解进展,在有新版本发布时获得通知,获取帮助,建议新功能或更改,为项目做贡献,以及更多!