- Published on
Api platform 教程5---PUT还是PATCH
原创文章,转载时需取得本人同意并注明来源
- Authors
-
-
- Name
- langziyang
-
Api platform 教程5---PUT还是PATCH
6个默认接口中,有四个是一眼就能明白用途的
获取资源集合
获取单个资源
创建资源
删除资源
那么PUT和PATCH是怎么回事呢?
PUT表示替换,PATCH表示更新,听起来好像是同一回事,我们不妨先试一试:
先用PATCH修改一个资源 /api/dragon_treasures/1
{
"name":"Treasure 1 edit"
}
然后再用PUT修改同一个资源 /api/dragon_treasures/1
{
"name":"Treasure 1 edit"
}
"detail": "An exception occurred while executing a query: SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'description' cannot be null",
为什么会提示某个字段不能为null? 实际上当我们使用PATCH修改资源中某一个字段时,API会仅仅只更新这个字段。而当我们用PUT 修改某一个字段时,API会把除了要修改的字段以外的字段更新为null。
那么问题来了:如果我一定要用PUT实现PATCH效果呢? 比如小程序的请求 https://developers.weixin.qq.com/community/develop/doc/0008648f00097075d0e7b339351400
不知道2024年了,小程序是否已经支持PATCH
从 api platform3.1开始,可以通过向每个ApiResource 添加extraProperties 选项来达到PATCH效果
#[ApiResource(
extraProperties: [
'standard_put'=>false
]
)]
如果你有几十上百个实体,是不是需要为每个实体都添加?太费力了,那我们不如修改全局设置:
api_platform:
# ...
defaults:
# ...
extra_properties:
standard_put: false
# ...