Magento2招摇过市生成的php客户端已损坏

Magento2招摇过市生成的php客户端已损坏,php,code-generation,swagger,magento2,client-library,Php,Code Generation,Swagger,Magento2,Client Library,我已经使用为Magento2生成了一个PHP客户端库。我可以连接到Magento并尝试一些方法来查看生成的客户端的可用性。看起来我要么是遗漏了什么,要么是Magento发布的招摇过市的规范还不完善 特别是,调用各种列表操作似乎被设计边缘化了,而在生成的swagger客户机中则被本质破坏了。以列出产品的操作为例。Swagger UI指出可以使用GET参数对其进行参数化(事实上,当我尝试在没有参数的情况下调用它时,您必须这样做),Magento返回HTTP 400。下面是从与客户机库一起生成的Mar

我已经使用为Magento2生成了一个PHP客户端库。我可以连接到Magento并尝试一些方法来查看生成的客户端的可用性。看起来我要么是遗漏了什么,要么是Magento发布的招摇过市的规范还不完善

特别是,调用各种列表操作似乎被设计边缘化了,而在生成的swagger客户机中则被本质破坏了。以列出产品的操作为例。Swagger UI指出可以使用GET参数对其进行参数化(事实上,当我尝试在没有参数的情况下调用它时,您必须这样做),Magento返回HTTP 400。下面是从与客户机库一起生成的Markdown Swagger生成的示例代码

try { 
    $result = $api_instance->catalogProductRepositoryV1GetListGet(
        $search_criteria_filter_groups_filters_field, 
        $search_criteria_filter_groups_filters_value, 
        $search_criteria_filter_groups_filters_condition_type, 
        $search_criteria_sort_orders_field,  
        $search_criteria_sort_orders_direction, $search_criteria_page_size, 
        $search_criteria_current_page);
    print_r($result);
} catch (Exception $e) {
    echo
        'Exception when calling CatalogProductRepositoryVApi->catalogProductRepositoryV1GetListGet: ',
        $e->getMessage(), "\n";
}
我注意到的第一件事是,这些参数只允许每个字段有一个条目,而API实际上允许您定义多个过滤器组、每个过滤器组有多个过滤器等。这有助于我理解API应该如何工作

退一步说,假设一个filter\u组和该组的一个filter是可以接受的,并且只是尝试在faith上使用生成的客户机,我尝试创建一个简单的调用

// Fetch all products with a contrived like query
$oMageClient = new Swagger\Client\Api\CatalogProductRepositoryVApi($oApiClient);
$result      = $oMageClient->catalogProductRepositoryV1GetListGet('name', '%', 'like');
Magento抱怨HTTP 400,这是因为生成的客户端的请求参数:

searchCriteria[filterGroups][][filters][][field]=name&searchCriteria[filterGroups][][filters][][value]=%&searchCriteria[filterGroups][][filters][][conditionType]=like
它所做的是把参数分成不同的过滤组。。。当我查看生成的
Swagger\Client\Api\CatalogProductRepositoryVApi::catalogProductRepositoryV1GetListGetWithHttpInfo
方法时,我发现了设置查询参数的罪魁祸首。通过改变

// query params
if ($search_criteria_filter_groups_filters_field !== null) {
    $queryParams['searchCriteria[filterGroups][][filters][][field]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_field);
}// query params
if ($search_criteria_filter_groups_filters_value !== null) {
    $queryParams['searchCriteria[filterGroups][][filters][][value]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_value);
}// query params
if ($search_criteria_filter_groups_filters_condition_type !== null) {
    $queryParams['searchCriteria[filterGroups][][filters][][conditionType]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_condition_type);
}

我能从Magento那里得到回复。所以我有几个问题

那么,Magento发布的JSON是否存在问题,导致生成的招摇过市代码出现错误?或者,在生成客户机的过程中,是否还有其他步骤被我搞砸了


感觉有些不对劲,因为如果您查看和生成的Swagger文档,Swagger建议filter_groups参数是一个字符串,而实际上它应该是一个对象数组。

您是否有可以与我们共享的Magento OpenAPI/Swagger规范?您也可以通过Hi打开机票,谢谢您的回复。我在本地安装了一个Magento2,我注意到了这一点,但我刚刚确认了这一点。我将继续并提交一份错误报告。我最后打开了两张票,因为我看到了另一个问题:)1。我本想早点开一张票,但这是我第一次体验昂首阔步。
// query params
if ($search_criteria_filter_groups_filters_field !== null) {
    $queryParams['searchCriteria[filterGroups][0][filters][0][field]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_field);
}// query params
if ($search_criteria_filter_groups_filters_value !== null) {
    $queryParams['searchCriteria[filterGroups][0][filters][0][value]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_value);
}// query params
if ($search_criteria_filter_groups_filters_condition_type !== null) {
    $queryParams['searchCriteria[filterGroups][0][filters][0][conditionType]'] = $this->apiClient->getSerializer()->toQueryValue($search_criteria_filter_groups_filters_condition_type);
}