0

我目前正在通过 Symfony (5.1) Routes 和 NelmioApiDocBundle 生成 OpenAPI 注释,

其中一条路线如下所示:

 * @Route("/users/{id}", methods={"GET"}, requirements={"id": "\d+"})
 * @OA\Parameter(name="id", in="path", description="The id of the user", required=true, @OA\Schema(type="integer"))

和另一个喜欢

 * @Route("/users/followed", methods={"GET"})

我正在使用 League 的 OpenAPI PSR-7 消息验证器(https://github.com/thephpleague/openapi-psr7-validator),通过将 Symfony 请求转换为 PSR-7 请求symfony/psr-http-message-bridgenyholm/psr7。除了这两个端点外,一切都运行良好。我不断得到

The given request matched these operations: [/api/users/{id},get],[/api/charter-calculations/followed,get]. However, it matched not a single schema of theirs.

是否有可能/followed只能匹配/{id}?因此验证者会感到困惑?或者是{id}我已经完成的正则表达式?

4

1 回答 1

0

想通了,所以回答自己。它有点特定于我的问题,但可能对其他人有帮助。

我有其他参数,例如

* @OA\Parameter(name="pageSize", in="query", @OA\Schema(type="integer"))

当我对某些验证进行单元测试以触发错误(例如pageSize=test)时,它会抛出一个League\OpenAPIValidation\PSR7\Exception\Validation\InvalidQueryArgs.

但是当我添加"/users/followed"端点时,之前的测试会抛出一个不同的错误:League\OpenAPIValidation\PSR7\Exception\MultipleOperationsMismatchForRequest,因为现在错误不是“嘿,我找到了端点,但是查询错误!” 而是“嘿,我发现了多个可能的端点,它们都错了!”。

于 2020-09-28T14:48:11.160 回答