violines / rest-bundle
violines/rest-bundle 是一个用于创建 REST API 的 Symfony 扩展包。它专注于 HTTP 标准,并集成了 symfony/serializer 和 symfony/validator。
v0.8.1
2022-03-09 13:05 UTC
Requires
- php: ^8.0
- psr/log: ^1.1 || ^2.0 || ^3.0
- symfony/config: ^5.4 || ^6.0
- symfony/contracts: ^2.5 || ^3.0
- symfony/dependency-injection: ^5.4 || ^6.0
- symfony/http-foundation: ^5.4 || ^6.0
- symfony/http-kernel: ^5.4 || ^6.0
- symfony/serializer: ^5.4 || ^6.0
- symfony/validator: ^5.4 || ^6.0
Requires (Dev)
- doctrine/annotations: ^1.11
- friendsofphp/php-cs-fixer: ^2.16
- infection/infection: ^0.25.6
- matthiasnoback/symfony-dependency-injection-test: ^4.1
- mikey179/vfsstream: ^1.6
- phpspec/prophecy-phpunit: ^2.0
- phpunit/phpunit: ^9.3.0
- rector/rector: ^0.12.13
- symfony/filesystem: ^5.4 || ^6.0
- symfony/framework-bundle: ^5.4 || ^6.0
- symfony/property-access: ^5.4 || ^6.0
- vimeo/psalm: ^4.0
Suggests
- doctrine/annotations: ^1.11
- symfony/property-access: ^5.4 || ^6.0
README
violines/rest-bundle 是一个用于创建 REST API 的 Symfony 扩展包。它专注于 HTTP 标准,并集成了 symfony/serializer 和 symfony/validator。
功能
- 请求体或查询字符串到对象的转换
- 从对象构建响应
- 可配置的内容协商
- 事件以控制 symfony/serializer 上下文
- symfony/validator 的集成
- 错误处理
- 可选日志记录
兼容于...
- Symphony 5.4 + 6
- PHP 8 + 8.1
设计用于...
应用领域驱动设计原则、六边形架构或类似概念的现代化架构。
安装
composer require violines/rest-bundle
它是如何工作的?
- 创建任何 PHP 类(实体、DTO、命令、查询等)并添加
#[HttpApi]
属性或@HttpApi
注解 - 使用 symfony/serializer 或 symfony/validator 中的任何属性属性/注解
- 将此 PHP 类声明为控制器参数的类型
- 在控制器中返回此 PHP 类的实例
案例展示
在以下链接下找到使用示例:https://github.com/violines/rest-bundle-showcase。
示例
<?php declare(strict_types=1); namespace App\Entity; #[Violines\RestBundle\HttpApi\HttpApi] final class Order { public $amount; public $articles; } // Or use Doctrine Annotations (requires separate install): // In order to use Annotations you have to install `doctrine/annotations` via `composer require doctrine/annotations` /** * @Violines\RestBundle\HttpApi\HttpApi */ final class Order {}
<?php declare(strict_types=1); namespace App\Controller; use App\Exception\AuthenticationFailedException; use App\Entity\Order; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Annotation\Route; class OrderController { /** * @return Order[] */ #[Route('/orders', methods: ['GET'], name: 'find_orders')] public function findOrders(): array { return $this->orderRepository->findOrders(); } #[Route('/order/{id}', methods: ['GET'], name: 'find_order')] public function findOrder(int $id): Order { $order = $this->orderRepository->find($id); if (null === $order) { throw NotFoundException::id($id); } return $order; } /** * @param Order[] $orders */ #[Route('/orders/create', methods: ['POST'], name: 'create_orders')] public function createOrders(Order ...$orders): Response { $this->orderRepository->createOrders($orders); return new Response(null, Response::HTTP_CREATED); } #[Route('/order/create', methods: ['POST'], name: 'create_order')] public function createOrder(Order $order): Response { $this->orderRepository->create($order); return new Response(null, Response::HTTP_CREATED); } }
维基
欲了解更多详情,请查阅 violines/rest-bundle 维基。
开发设置
- 将 docker/.env.dist 复制到 docker/.env 并根据需要调整
- cd docker/
- 拉取最新镜像:docker-compose pull
- 创建容器:docker-compose up -d
- 使用
docker-compose exec php80 composer run test
运行测试