实现字段选择模式的 Gin-Gonic 中间件
在我的公司,我们使用 Go 来构建内部工具。最近,我使用 gin-gonic 开发 REST API,这需要跨多个端点显示大量数据。
在这种类型的场景中必须具有的功能是分页,但经常被忽视的模式是部分响应(又名字段选择)。这也是一个非常好的补充,可以过滤掉网络服务器响应中的数据量。
首先让我们明确一下字段选择的含义。想象一下您有以下端点:
// > GET /api/products [ { "id": 1, "createdAt": "2024-18-11", "updatedAt": "2024-18-11", "code": "1", "price": { "amount": 100, "currency": "EUR" }, "manufacturedBy": "myshop", "stock": 552, ... }, ... ]
使用部分响应,客户端可以使用字段查询参数过滤输出,例如
// > GET /api/products?fields=code,price [ { "code": "1", "price": { "amount": 100, "currency": "EUR" } }, ... ]
仅返回查询参数中声明的字段。减少有效负载大小并节省带宽。
我找不到任何可用于此模式的实现,因此我决定自己创建它,这就是 Milogo 的诞生。
Milogo 是一个 Gin 中间件,用于处理 API 响应,过滤出 fields 查询参数中指定的字段,并仅返回请求的数据。
一些可用的主要功能:
支持 json 对象和 json 数组。
因此,Milogo 可以过滤以一组项目或仅以一个项目开头的 JSON 响应字段。
支持过滤嵌套 json 对象中的字段。
Milogo 还支持过滤具有以下格式的嵌套 JSON 对象,例如代码,价格(金额)
支持将 json 包裹在另一个 json 中。
有时 JSON 响应会包装在另一个 JSON 对象中,Milogo 支持过滤实际负载(请参阅包装示例):
// GET /products?fields=code,price(amount) { "data": [ { "code": 1, "price": { "amount": 100 } }, ... ], "_metadata": { ... } }
与任何杜松子酒中间件一样,Milogo 非常易于使用和设置,您可以按照 github 存储库中的 README 进行操作,但基本上:
r := gin.Default() r.Use(Milogo())
足以将 Milogo 中间件添加到您的 api。
在前面的示例中,Milogo 应用于每个端点,但也可以仅应用于一组端点,或仅应用于特定端点,例如
group := r.Group("/products", milogo.Milogo()) group.GET("", productsHandler)
在前面的示例中,只有 /products 组才会应用 Milogo 的中间件。
Milogo 旨在简化 REST API 开发并改进客户端-服务器交互。查看 GitHub 存储库以获取示例和文档。
欢迎随时伸出援手或做出贡献——让我们共同提高 REST API 的效率!
以上是使用 Milogo for Gin-Gonic 简化您的 REST API 响应的详细内容。更多信息请关注PHP中文网其他相关文章!