自定义 REST 接口在开发环境能用,部署后返回 Request does not match any route。这个提示发生在服务方法执行前,所以在实现类加日志通常什么也看不到。

先核对请求的四个基本量

记录实际 HTTP 方法、完整路径、Store Code 和 Content-Type。GET 与 POST 是不同路由,/rest/V1/、/rest/all/V1/ 和带店铺代码的 URL 也不能凭印象互换。注意代理是否重写路径前缀。

检查 webapi.xml,不是 frontend routes.xml

<route url="/V1/example/:id" method="GET">
    <service class="Vendor\Module\Api\ExampleInterface" method="getById"/>
    <resources>
        <resource ref="Vendor_Module::example"/>
    </resources>
</route>

文件路径、大小写或 XSD 错误会让配置无法正确合并。模块启用后清配置缓存并在构建中重新编译,不要在线上只替换一个 XML。

接口签名也会影响服务暴露

参数名要与 URL 占位符、JSON 字段对应,复杂类型使用明确数据接口。方法只存在实现类、接口未声明,或 docblock 类型无法解析,都会在 Web API 层出问题。

先调用一个已知端点证明 REST 入口正常,再调用自定义路由。最后分别测试正确方法、错误方法和无权限身份,确认得到预期的成功、路由错误和授权错误,而不是被代理统一改写。