01. 系列主题

Habitica是一个游戏化的 GTD 工具,支持组队打怪,我计划开发一个适合小白用户部署的开源 Web 应用,让用户可以自动接受任务。

02. 本期目标

上期末尾,我计划下一步敲定如何存储用户调用 Habitica API 的 key 和 token

而 Habitica 的 API 验证机制又比较奇葩,它会生成且只生成一个 token,并且要重置的话,还需要给网站客服写信,这导致用户可能并不那么放心把 token 交给第三方,除非是它自己能够一键配置一个 Vercel App,数据存储在自己的 Vercel 账号中。

下期,我将努力敲定这个存储 token 的方案。

https://anl.gg/post/306/

除了存储方案,这波我也将决定使用什么开发语言和框架。

03. 决定存储方案

应用本身不需要存储特别多的数据,只有 api key 和 api token 而已,所以存储当然是越简单越好。

询问了 DeepSeek,它给了几个方案。

Image

但是在 Vercel 中了解后得知,这些都需要预先创建 Storage 实例,然后配置相关的 Key 和 密钥,对于小白用户来说,比较麻烦。

既然逃不开配置环境变量,那么有什么什么可以方便的让用户填写环境变量的方法呢?几经探索后,发现是有的。Vercel 官方提供了非常易于操作的方案:Deploy Button

官方有一个例子:

Image

https://calcom.mintlify.dev/docs/self-hosting/deployments/vercel

这个 例子,可以一键部署 github 仓库到 Vercel, 并且同时填写环境变量。这完全满足我的需求,小白用户也可以轻易操作。

Image

Image

04. 开发语言和框架

虽然 Vercel 中最适合的语言和框架是 TypeScript + Next.js, 不过我个人实在不喜欢 node_modules 这套东西,而且开发这些小工具,也是想以学习为目的之一,最近又对 Golang 比较感兴趣,所以决定使用 Golang + Gin

虽然 Vercel 本身对 Hobby Plan 只提供 12 个 Serverless Function 限额,不过这个应用足够简单,应该是完全够用的(印象中, Next.js 是有一些优化的,可以支持更多一些)。

我在 Vercel 的 Function Limits 文档中,并没有找到这个数量的说明。

https://vercel.com/docs/functions/limitations

但是官方论坛中有相关的讨论,不过时间比较久远了。

https://community.vercel.com/t/error-no-more-than-12-serverless-functions-can-be-added-to-a-deployment-on-the-hobby-plan-create-a-team-pro-plan-to-deploy-more-learn-more-https-vercel-link-function-count-limit/410

大概半年前,我部署一个 Flask 应用也遇到了类似的问题,可能这个限定仍然是存在的。具体遇到再想办法吧。

下面是一个 Golang + Gin 的例子,写起来还是蛮简洁的。


// api/index.go
package handler

import (
    "net/http"
    "github.com/gin-gonic/gin"
)

var r *gin.Engine

func init() {
    r = gin.Default()

    r.GET("/", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "message": "Hello, World from Gin on Vercel!",
        })
    })

}

func Handler(w http.ResponseWriter, req *http.Request) {
    r.ServeHTTP(w, req)
}

// vercel.json
{
  "functions": {
    "api/index.go": {
      "maxDuration": 30
    }
  },
  "routes": [
    {
      "src": "/(.*)",
      "dest": "/api/index.go"
    }
  ]
}

05. 下期计划

决定了存储和语言框架,下面就可以动手开发了,下期,准备先实现 webhook 的自动安装。

POST https://habitica.com/api/v3/user/webhook

文章同步发表于微信公众号老狗拾光,欢迎关注。

微信公众号老狗拾光