dmp/rest-bundle

DMP Rest bundle

安装: 349

依赖项: 0

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

This package is auto-updated.

Last update: 2024-09-21 14:50:44 UTC


README

此包提供了方便的功能,用于编写简单而强大的基于JSON的RPC控制器

如何使用

将包 DMP\RestBundle\RestBundle 添加到您的内核。

编写控制器风格

class TestController
{

    #[Rest\Post("")]
    #[BodyConverter("request")]
    #[Rest\Serializable(statusCode: 201)]
    public function request(string $testCode, RequestDTO $request): ResponseDTO
    {
        ...
    }
}

其中 RequestDTO 和 ResponseDTO 是定义字段序列化和验证规则的数据传输对象(DTO)

所有路由都应该以 '/api/' 开头(TODO:删除此硬编码要求)

查看 tests/Fixtures/ 目录以了解如何定义 Rest 控制器的大致情况

BodyConverter

在控制器操作上放置 @BodyConverter 注解(DMP\RestBundle\Annotations\BodyConverter)。将 DTO 参数的名称作为默认参数放置在注解中。

这将产生以下效果:`@dmp_rest.converter.request_body` 服务将尝试将请求体反序列化为 DTO 参数的类。然后对反序列化的 DTO 进行验证(使用 Symfony 验证器,相应配置)验证后的反序列化 DTO 将作为 DTO 参数的值传递给控制器操作。

异常

默认情况下,任何验证错误都会抛出异常(精确地说,是 DMP\RestBundle\Validation\ValidationException)。这是通过 @dmp_rest.validation_exception_throwing_body_converter 服务(装饰器)实现的。

一个重要的注意事项是,它依赖于 dmp_rest.body_converter.validation_errors_argument 的值是 validationErrors(它被定义为 const DMP\RestBundle\Validation\ValidationExceptionThrowingBodyConverterDecorator::VALIDATION_ERRORS_ARGUMENT_NAME)。覆盖该值将禁用装饰器抛出异常的能力,这将导致未验证的 DTO 被传递到控制器操作中。

如果控制器抛出异常,它将转换为以下形式的响应

{
  "errors": [
    {
      "message": "Exception message",
    }
  ]
}

DMP\RestBundle\Validation\ValidationException 被不同地处理

{
  "errors": [
    {
      "message": "Field value should be a valid email address.",
      "type": "body",
      "field": "email"
    },
    {
      "message": "Field value should not be blank.",
      "type": "body",
      "field": "password"
    }
  ]
}