yoanm/jsonrpc-params-symfony-validator-sdk

Simple JSON-RPC params validator that use Symfony validator component

v2.1.0 2023-04-02 10:52 UTC

README

License Code size Dependabot Status

Scrutinizer Build Status Scrutinizer Code Quality Codacy Badge

CI codecov Symfony Versions

Latest Stable Version Packagist PHP version

Simple JSON-RPC params validator that use Symfony validator component

See yoanm/symfony-jsonrpc-params-validator for automatic dependency injection.

See yoanm/jsonrpc-params-symfony-constraint-doc-sdk for documentation generation.

Versions

  • Symfony v3/4 - PHP >=7.1 : ^v1.0

  • Symfony v4/5 - PHP >=7.2 : ^v2.0

    ⚠️⚠️ v0.2.0 is replaced by v1.0.0 ! ⚠️⚠️

    ⚠️⚠️ v0.3.0 was badly taggued, used v2.0.0 instead ! ⚠️⚠️

  • Symfony v4.4/5.4/6.0 - PHP ^8.0 : ^v2.1

How to use

In order to be validated, a JSON-RPC method must :

With yoanm/jsonrpc-server-sdk

Create the validator and inject it into request handler :

$requestHandler->setMethodParamsValidator(
  new JsonRpcParamsValidator(
    (new ValidatorBuilder())->getValidator()
  )
);

Then you can send JSON-RPC request string to the server and any method wich implements MethodWithValidatedParamsInterface will be validated.

Standalone

use Symfony\Component\Validator\ValidatorBuilder;
use Yoanm\JsonRpcParamsSymfonyValidator\Infra\JsonRpcParamsValidator;

// Create the validator
$paramsValidator = new JsonRpcParamsValidator(
  (new ValidatorBuilder())->getValidator()
);

// Validate a given JSON-RPC method instance against a JSON-RPC request
$violationList = $paramsValidator->validate($jsonRpcRequest, $jsonRpcMethod);

Params validation example

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\Constraints\Collection;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\NotNull;
use Yoanm\JsonRpcParamsSymfonyValidator\Domain\MethodWithValidatedParamsInterface;
use Yoanm\JsonRpcServer\Domain\JsonRpcMethodInterface;

class MethodExample implements JsonRpcMethodInterface, MethodWithValidatedParamsInterface
{
  /**
   * {@inheritdoc}
   */
  public function apply(array $paramList = null)
  {
    return 'result';
  }

  public function getParamsConstraint(): Constraint
  {
    return new Collection(
      [
        'fields' => [
          'fieldA' => new NotNull(),
          'fieldB' => new NotBlank(),
        ],
      ]
    );
  }
}

Violations format

Each violations will have the following format :

[
  'path' => 'property_path',
  'message' => 'violation message',
  'code' => 'violation_code'
]

Contributing

See contributing note