holokron/json-patch

处理JSON补丁请求的库,兼容RFC 6902

0.1.0 2017-06-06 19:20 UTC

This package is not auto-updated.

Last update: 2024-09-20 19:35:15 UTC


README

一个简单的库,用于处理按照RFC 6902的Json Patch请求

其他库只是将一个JSON字符串更改为另一个字符串,但此代码的主要目的是执行特定的动作(在配置中定义的回调函数)

入门

先决条件

  • PHP >= 7.0.0

安装

composer require holokron/json-patch

示例

配置

我们的示例类,其中包含应调用的方法

<?php

namespace Example\Handler;

use Example\Entity\Account;

class UserHandler
{
    public function add($value) 
    {
        $value = json_encode($value);
        echo "UserHandler::add($value)\n";
    }

    public function remove(int $id)
    {
        echo "UserHandler::remove($id)\n";
    }

    public function replace(string $id, array $value)
    {
        $value = json_encode($value);
        echo "UserHandler::replace($id)($value)\n";
    }
}

我们的补丁器的配置

<?php

use Example\Handler\UserHandler;
use Holokron\JsonPatch as JsonPatch;


$accountHandler = new UserHandler();

$builder = new JsonPatch\Definition\Builder();
$definitions = $builder
    ->op('add')
        ->path('/users')
        ->callback([$handler, 'add'])
        ->add()
    ->op('remove')
        ->path('/users/:userId')
        ->callback([$handler, 'remove'])
        ->requirement('userId', '[1-9]+\d*')
        ->add()
    ->op('replace')
        ->path('/users/:userId')
        ->callback([$handler, 'replace'])
        ->requirement('userId', '\w+')
        ->add()
    ->get();

$patcherFactory = new JsonPatch\Factory();
$patcher = $patcherFactory
    ->setMatcher(new JsonPatch\Matcher\Matcher($definitions))
    ->create();

然后应用我们的示例JSON

[
    {
        "op": "add",
        "path": "/users",
        "value": {
            "name": "super handler"
        }
    },
    {
        "op": "remove",
        "path": "/users/123"
    },
    {
        "op": "replace",
        "path": "/users/456",
        "value": {
            "foo": "bar"
        }
    }
]

我们将得到结果

UserHandler::add({"name":"super handler"})
UserHandler::remove(123)
UserHandler::replace(456)({"foo":"bar"})