tomaz-kusy/annotations-to-json-schema

将 Symfony 验证器注解转换为 json schema

dev-master 2020-12-29 07:19 UTC

This package is auto-updated.

Last update: 2024-09-29 05:49:43 UTC


README

根据 PHP 文件中的注解生成 JSON Schema 文档。

开发阶段版本。

动机

许多人(例如我)使用 PHP 在客户端和服务器之间传输对象(DTO)。在发送之前,对象必须序列化(例如,转换为 XML 或 JSON)。接收此类对象后,服务器执行反序列化。为此,它需要知道如何执行转换。如果客户端和服务器使用相同的元数据,通常没有问题。如果序列化数据的结构不匹配服务器的元数据,例如,您将获得字符串而不是预期的对象数组。在这种情况下,反序列化器将报告异常并停止进一步处理。最流行的序列化器(Symfony、JMS)将返回关于问题原因的非常简短的信息。

解决方案

解决方案可能是验证 JSON 文档,然后再进行反序列化。为了验证文档,我们可以使用 JSON Schema 文档。这个包允许根据现有的 PHP 实体创建 JSON Schema 文档。

用法

基本实体应使用 PSR-4 兼容的路径。

待续...

独立

Usage:
  convert2jschema [options] [--] <className>

Arguments:
  className                                  Entry class

Options:
  -c, --config[=CONFIG]                      Config file
  -r, --root-namespace[=ROOT-NAMESPACE]      RootNamespace
  -o, --destination-path[=DESTINATION-PATH]  Output directory

示例 config.yaml

# config.yml

a2jschema:
  rootNamespace: TKusy\JSchema\Tests\Assets\
  idPrefix: https://json-schema.fullstack.org.cn/schema/

  destination:
    path: ~
    pathTemplate: "%s.schema.json"

示例

bin/convert2jschema -c config.yaml TKusy\\JSchema\\Tests\\Assets\\Main\\Referral - 使用 config yaml 生成作为实体“兄弟”的 schemas。

bin/convert2jschema --root-namespace=TKusy\\JSchema\\Tests\\Assets\\ --destination-path=./output/ Main\\Referral - 将 schemas 写入 ./output 目录。

在 PHP 中

待做...