这篇文章介绍了一个作者使用Go语言开发的、代码量不到300行的后端服务,该服务提供PDF发票生成API。作者详细阐述了该应用的构建方式、选择Go的原因、如何实现货币化以及安全和部署策略。它强调了小型、专注的软件也能带来可观收入的理念。

并非所有成功的软件都必须是一个庞大的平台或一个完整的软件即服务产品。事实上,一些最悄然盈利的工具是小巧、专注的,并且只构建了足够的功能来很好地解决一个特定问题。
在这篇文章中,我将带你了解一个使用 Go 构建的小型后端服务。它是在一个周末内创建的,代码行数不到 300 行,并且每月持续带来 1,500 到 2,000 美元的收入。这足以支付我的房租。我将解释这个应用程序是做什么的,它是如何构建的,为什么 Go 是正确的选择,以及你如何构建并实现类似产品的商业化。
最简单来说,这个应用程序是一个创建 PDF 发票的 API。就是这样。
它是为那些需要一种快速、轻量级方式从自己的系统中生成发票的人而构建的。这包括自由职业者、小型机构和内部业务团队。大多数现有选项要么功能臃肿不必要,要么需要设置完整的用户账户。我想要一个简洁易用的东西。
这个小应用程序之所以成功,原因如下:
应用程序的第一个版本是用 Node.js 编写的,但我最终切换到了 Go,事实证明这是一个正确的决定。
以下是 Go 适合这类项目的原因:
切换到 Go 后,应用程序的内存使用量减少了约 70%,冷启动速度提高了近 90%。对于经历流量高峰的 API 来说,这种性能提升意义重大。
整个应用程序只包含几个文件:
invoice app
├── go.mod
├── main.go
├── handler.go
└── generator.go
让我们分解一下每个文件的作用。
1. go.mod
module pdfapi
go 1.21
require (
github.com/jung kurt/gofpdf v1.16.0
)
这定义了 Go 模块并包含了 PDF 生成库。
2. main.go
package main
import (
"log"
"net/http"
)
func main() {
http.HandleFunc("/invoice", invoiceHandler)
log.Println("Listening on port 8080")
err := http.ListenAndServe(":8080", nil)
if err != nil {
log.Fatalf("Server error: %v", err)
}
}
这设置了一个基本的 HTTP 服务器来监听请求。
3. handler.go
package main
import (
"net/http"
)
func invoiceHandler(w http.ResponseWriter, r *http.Request) {
if r.Method != http.MethodPost {
http.Error(w, "Only POST allowed", http.StatusMethodNotAllowed)
return
}
generatePDF(w, r)
}
这处理 API 请求并将其路由到 PDF 生成器。
4. generator.go
package main
import (
"net/http"
"github.com/jung kurt/gofpdf"
)
func generatePDF(w http.ResponseWriter, r *http.Request) {
pdf := gofpdf.New("P", "mm", "A4", "")
pdf.AddPage()
pdf.SetFont("Arial", "B", 16)
pdf.Cell(40, 10, "Invoice")
w.Header().Set("Content Type", "application/pdf")
pdf.Output(w)
}
这会创建一份简单的 PDF 格式发票并将其发送回客户端。
像这样的工具可以在不将其变成一个完整的商业产品的情况下实现商业化。以下是一些有效或可能有效的简单策略:
因为这个应用程序解决了一个特定问题并且做得很好,所以用户理解其价值并愿意为此付费。
即使是小型工具也需要坚实的安全基础。以下是我关注的几点:
输入验证
始终验证用户输入,尤其是在生成文件时。
if err := r.ParseForm(); err != nil {
http.Error(w, "Invalid input", http.StatusBadRequest)
return
}
速率限制
基本的速率限制有助于防止滥用并保护你的服务器免受不必要的负载。
安全传输
所有流量都通过 HTTPS 提供服务。我使用像 NGINX 这样的反向代理,并使用 Let’s Encrypt 管理证书。
身份验证
如果有人付费使用 API,他们会获得一个限制访问的密钥,必要时可以撤销。
保持依赖项更新
我定期使用 govulncheck 等工具扫描第三方包,以识别任何已知的漏洞。
这个应用程序易于部署,并且无需太多关注即可顺利运行。我使用的工具是:
一旦它运行起来,它基本上就能自己维护。
构建这个应用程序教会了我一些重要的经验教训,它们适用于任何类型的产品:
你不必构建庞大或复杂的东西来创造价值。如果小应用程序有目的且专注地构建,它们绝对可以产生可观的收入。
这个小小的应用程序最初只是一个周末项目。现在它支付我的房租,并在后台默默运行。无需全职维护。没有庞大的代码库。只是一个简单、有用的工具,把一件事做好。
如果你是一位创始人或开发者,正在寻求创造额外收入或白手起家创业,这就是一个提醒:小而专注的软件可以带来巨大的不同。你不需要庞大的团队或资金。你只需要一个清晰的问题和一个能提供解决方案的方案。
如果你正在开发类似的东西,或者需要帮助构建安全可扩展的后端系统,我的 Ancilar 团队可以提供帮助。我们专注于将想法转化为可靠的生产级 API 和基础设施。
让我们帮助你将产品变为现实。
如果你认真考虑长期发展,我们随时准备提供帮助。
邮箱: hello@ancilar.com
- 原文链接: medium.com/@ancilartech/...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!