Adobe Commerce REST API构造函数参数注入更改 — 商家开发人员指南
Adobe Commerce和Magento Open Source对REST API处理构造函数参数注入的方式进行了更改。 此更新通过确保在API请求中仅使用适当的数据类型而增强了Web API框架。 本文还回答了与CVE-2025-54236相关的问题。
描述 description
环境
Adobe Commerce / Magento Open Source 2.4.4+、2.4.5+、2.4.6+、2.4.7+、2.4.8+、2.4.9-alpha3(所有部署类型)
问题
Adobe Commerce API数据类型验证增强 — 商家开发人员指南
概述
Adobe Commerce和Magento Open Source对REST API处理构造函数参数注入的方式进行了更改。 此更新通过确保在API请求中仅使用适当的数据类型而增强了Web API框架。 本文还回答了与CVE-2025-54236相关的问题。
新增功能
Web API中的增强型类型安全性
从Adobe Commerce和Magento Open Source 2.4.4-p16、2.4.5-p15、2.4.6-p13、2.4.7-p8、2.4.8-p3和2.4.9-alpha3开始,Web API框架现在为API请求中的构造函数参数实施更严格的数据类型验证。 此更改可确保:
✅简单数据类型(字符串、整数、布尔值)可继续无缝工作。
✅ API数据接口(Api\Data\*Interface)仍受完全支持。
🚫服务类和复杂模型不再从API负载中自动实例化。
技术详细信息
更改了哪些内容
现在,ServiceInputProcessor 在API请求处理期间更严格地验证构造函数参数。 增强功能引入了一个验证层,该验证层在尝试对象实例化之前检查参数类型。 具体而言,当系统尝试从API有效负载数据填充构造函数参数时,将在getConstructorData()方法中发生此验证。 以前处理过所有参数类型;现在只允许批准的类型通过。
允许的数据类型
支持(无需更改):
简单类型
string— 文本值、产品名称、描述int/integer— 数值、数量、IDfloat/double— 小数、价格、权重bool/boolean- True/false值,状态标志
API数据接口
- 全部
*\Api\Data\*Interface个类
可能受影响的集成
可能需要审核的自定义集成包括:
1。 自定义扩展和第三方模块
- 扩展发送非标准构造函数参数
- 在API有效负载中使用复杂对象注入的模块
- 具有复杂参数结构的自定义API端点
2. 正在测试脚本
- 具有复杂负载的各种测试脚本
解决方法 resolution
迁移指南
审核您的API调用
清点当前集成:
- API调用文档: 查看您的应用程序使用的所有已记录API端点。
- 代码存储库扫描: 在代码库中搜索具有复杂嵌套对象的API调用。
- 网络流量分析: 监视发送到Magento的实际API负载。
- 第三方模块审查: 检查所有已安装的扩展是否使用了API。
标识清单:
- 构造函数参数注入: 查找API负载中的嵌套对象。
- 复杂对象类型: 检查对模型类或服务的引用。
- 自定义属性: 标识任何非标准API参数。
- 扩展特定的API: 审查自定义模块API实施。
疑难解答
常见错误消息
> 2.4.6 不支持的字段名称
{ "message": "\"{fieldName}\" is not supported. Correct the field name and try again." }
<不支持的字段名称=2.4.6
{ "message": "Property \"{fieldName}\" does not have accessor method \"{methodName}\" in class \"{className}\"." }
发生此情况时:
- 使用复杂类型的构造函数参数被拒绝。
调试步骤
1. 在非开发人员模式下检查API日志(对于< =2.4.6)。
- 位置:
var/log/exception.log - 筛选器:搜索
ServiceInputProcessor条目。 - 分析:查找参数处理详细信息。
2. 使用Postman/cURL进行测试。
# Test individual API calls curl -X POST "https://your-magento-site.com/rest/V1/products" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN" \ -d '{"product":{"sku":"TEST","name":"Test Product"}}'
版本兼容性
向后兼容性
- 虽然这些更改保持总体向后兼容性,但对于类型复杂且未实现
Api\Data接口的REST API参数,可能会发生重大更改。
现有API
- 所有标准Magento API保持不变。
- 对核心功能没有重大更改。
自定义扩展
- 如果使用复杂的构造函数注入,则可能需要更新。
- 建议在生产部署之前进行测试。
- 扩展开发人员应更新文档。
第三方集成
- 应该彻底测试。
- 有关兼容性更新,请与供应商联系。
- 监视升级后的集成运行状况。
常见问题解答
问:我是否需要立即更新我的所有API集成?
答:只有使用复杂构造函数参数注入的集成才需要更新。 大多数标准API调用无需更改即可继续工作。 排定测试和更新集成的优先级,这些集成使用API负载中的复杂嵌套对象。
问:如何识别我的集成是否受到影响?
答:使用新版本在开发环境中测试API调用。
问:是否有工具可自动迁移我的API调用?
答:目前还没有完全自动化的迁移工具。 大多数情况下涉及删除复杂的嵌套对象并使用适当的API数据结构。
问:使用复杂注入的现有API调用发生了什么情况?
答:这些API调用将失败,出现 400个错误请求 或 500内部服务器错误(对于< =2.4.6)。
问:此更改是否会影响GraphQL API?
答:不可以,此增强功能仅适用于ServiceInputProcessor的REST API请求。 GraphQL API不受影响。
问:我能否暂时禁用此验证以进行测试?
答:不需要,此验证已内置到核心框架中,无法禁用。 可以对旧版Magento进行测试,以验证旧版行为。
问:如果第三方扩展受到影响,我应该怎么做?
答:请与供应商联系,以获取兼容的更新版本。 如果不可用,请考虑其他方法或与开发人员合作创建兼容性层。