Perl的OpenAPI::Client如何在OpenAPI GET查询请求中传递additionalProperties
首先明确你给出的OpenAPI参数定义的规则:
这个接口声明了一个名为params的查询参数,类型为键值均为字符串的对象,序列化规则为form风格且开启explode。按照OpenAPI 3.x的序列化标准,这种配置会将params对象内的所有键值对直接展开为顶层的查询参数,例如params值为{id => "1", status => "active"}时,最终生成的查询串为?id=1&status=active。
正确传参方式
Perl的OpenAPI::Client会严格按照OpenAPI定义的参数规则处理传参,你需要把参数值放在和定义中参数名匹配的键下,也就是你尝试的第一种写法是符合规范的:
my $tx = $client->findApps({ params => { 'id' => '1' } });
错误写法说明
你尝试的第二种直接传{ 'id' => '1' }的写法无法生效,因为你的OpenAPI定义中根本不存在名为id的查询参数,该参数会被库直接忽略,不会带入请求。
排查建议
如果第一种写法没有得到预期结果,可以按照以下步骤排查:
- 确认你的
OpenAPI::Client版本 >= 1.00,更早的版本对复杂对象类型的查询参数序列化支持存在缺陷 - 调用后通过
print $tx->req->url->to_string打印实际生成的请求URL,确认参数序列化结果是否符合预期
内容的提问来源于stack exchange,提问作者user2145475
相关产品推荐
相关产品推荐

