API Platform处理POST请求时能否返回200状态码替代201?
API Platform无ORM场景问题解决方案
可以将POST接口的返回状态码修改为200,以下是具体实现方案,同时提供GET请求适配无ORM场景的可选方案,避免必须改用POST的问题。
修改POST接口返回状态码
注解配置方式(适用于PHP8+注解声明资源的场景)
直接在你的非ORM资源类的ApiOperation注解中指定status参数为200即可,示例代码:
#[ApiResource( operations: [ new Post( controller: YourCustomQueryController::class, status: 200, path: '/cross-api-query' ) ] )] class YourCrossApiDto { // 你的DTO属性定义 }
YAML配置方式(适用于用yaml配置API资源的场景)
在资源配置中对应POST操作下添加status: 200配置即可。
可选方案:修复GET请求search-filter报错问题
Call to a member function getClassMetadata() on null报错是因为默认的search filter是Doctrine ORM专属实现,依赖数据库实体元数据,无ORM场景下替换为自定义过滤器即可正常使用GET请求,更符合查询类接口的REST规范:
- 自定义过滤器类实现
ApiPlatform\State\ProviderInterface或者ApiPlatform\Api\FilterInterface,在过滤器内自行处理请求参数的过滤逻辑,对接另外两个业务API即可 - 在你的资源类上关联自定义过滤器,替换原有ORM的search filter即可
CORS适配补充
如果调整状态码后仍然有CORS问题,可以直接修改项目中nelmio_cors.yaml的配置,添加对应接口路径、请求方法、允许源的规则,不需要为了适配CORS强行调整接口语义。
内容的提问来源于stack exchange,提问作者JEEASH
相关产品推荐
相关产品推荐

