Published on

Api platform 教程5---PUT还是PATCH

原创文章,转载时需取得本人同意并注明来源
Authors
  • Api platform 教程5---PUT还是PATCH
    Name
    langziyang
    Twitter

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
      # ...