Loopback4 "todo" 教程似乎只部分起作用

Loopback4 "todo" tutorial seems to be only partially working

我是 Loopback4 的新手,我刚刚完成“待办事项”教程,完全按照文档安装它。

有些路线似乎运行良好。我可以添加一个待办事项,通过 id 查询它,通过 id 删除它等等。但是 GET /todos/count 和 GET /todos 似乎不起作用。第一个 returns 0 和第二个 returns 一个空列表。但是,我可以在 db.json 中看到数据,并且我可以再次通过 ID 获取它们。

我是不是漏掉了什么?有人知道为什么这些可能不起作用吗?

在相关说明中,您能否提供有关如何调试的建议?我启用了调试字符串,但似乎没有任何有用的输出。没有错误。

This "issue" has been quite extensively documented issue #6662.

简答

Swagger UI,API Explorer 使用的基础库,将尽最大努力用自己生成的查询替换 OpenAPI 3.0 规范中缺失的示例查询。大多数时候,这可能并不理想,通常会生成限制过度的查询过滤器。

为什么会这样

LoopBack 4 REST 默认生成并公开 /openapi.jsonopenapi.yml 下的 OpenAPI 3.0 规范。 API 消费者和代码生成器可以使用它以编程方式与 API.

交互

其中一个 API 消费者是 API Explorer(由 Swagger UI 提供支持),读取 OpenAPI 3.0 规范以生成用户界面 和示例参数.

Swagger UI 的例子

Swagger UI,支持 API Explorer 的底层库尝试创建基于 OpnAPI 3.0 规范的“示例”HTTP 查询。

但是,这些示例不是开箱即用的;它们通常用作该参数的预期语法指南。

获取/todos

GET /todos 的情况下,LoopBack 4 期望 Filter:

Filter是用来缩小查询范围的,Swagger生成的例子UI限制性很大。这是因为 Swagger UI 生成的示例旨在显示参数中所有可能的属性。

最值得注意的是,当 API 支持其他属性时,Swagger UI 在 WhereFilter 中添加了 additionalProp*。这没有用,因为这些属性在当前数据库中不存在。

通过在按下执行之前清除过滤器查询,我们告诉 LoopBack 4 不要缩小请求的范围。

获取/todos/count

GET /todos 不同,GET /todos/count 只需要一个 WhereFilter,因为 orderskiplimit 等更广泛的过滤器属性不是返回单个计数值时适用。

尽管如此,同样的问题也适用于将 additionalProp* 添加到 WhereFilter 中。

为什么过滤器模型不感知?

目前,issue #4977正在跟踪此功能。