Golang: Web: Framework: Gin

7th February 2022 at 3:08pm

使用 Gin 的过程并不让我感觉愉快。跟其他 Go 的 web 框架一样,Gin 的一些设计真挺垃圾的……

默认的 JSON 实现会 escape HTML entity

使用 c.PureJSON() 而不是 c.JSON()后者会对 HTML entity 做转义。实在太 TM 蠢了。

URI 中无法使用 literal colon

Gin 支持在 URI 中使用 : 来表示一个 URI 参数:

POST /book/:id

但这套机制导致如果你 无法使用不带语义的冒号。比如你想使用 Google API Design Guide 推荐的 自定义动词 样式:

https://service.name/v1/some/resource/name:customVerb

那么其中的 :customVerb 会被 Gin 当作一个路径参数来解析,而不是保留其字面意义。

目前(2022 年 1 月)没有解决办法,这是 httproute 带来的限制。可行的 workaround 是不用冒号来表示 custom verb,换成点号(.)或者其他。

API 错误信息不够用户友好

Gin 的 binding 功能,比如 c.ShouldBindJSON(),假如遇到一个空的 HTTP 请求体,它返回的错误就是一句干巴巴的 EOF。如果你期望你用 Gin 实现的 API 对用户足够友好,你不得不把 Gin 返回的各种乏味的错误信息再做一次包装。这点比 Django 差太多了……