er1z / multi-api-platform-bundle
提供在单个应用程序中创建多个API的能力
Requires
- api-platform/api-pack: ^1.1
This package is auto-updated.
Last update: 2023-01-08 11:36:24 UTC
README
这个Symfony包是解决在单个API Platform实例中拥有多个API的问题的解决方案。例如,您有一个应用程序的后端,它公开了面向最终客户端的资源,您想为内部微服务创建一个入口点。
安装
问题
composer require er1z/multi-api-platform
配置
首先,分离您的结构。它们必须通过命名空间或实现接口来区分。假设我们创建了两个API:内部和外部。
通常我依赖于DTO(但也应该适用于实体)。创建两个类
App\DTO\Internal\MyInternalStruct
App\DTO\External\MyExternalStruct
然后创建config/packages/multi_api_platform.yml
,内容如下
multi_api_platform:
apis:
internal:
namespace: App\DTO\Internal
#implements: App\My\MyInterface
conditions: "request.query.has('is_internal')"
debug_conditions: "request.query.has('is_internal')"
external:
namespace: App\DTO\External
conditions: "true"
debug_conditions: "true"
必须配置namespace
或implements
。
您必须手动为每个API配置conditions
。这是一个表达式,它通过动态的路由条件限制通过HTTP访问API。
条件不是预先定义的,以便强制您谨慎地公开特定的API。如果您想像这样公开API,请将"true"
作为值。
debug_conditions
在dev
环境中评估,而conditions
仅在生产环境中评估。
使用
条件是一个简单但强大的工具,可以限制特定的API,例如通过源IP、标题、环境变量等。请查看路由条件文档以了解如何构建此类内容。
为了扩展以满足您的需求,您始终可以创建kernel.request
事件监听器/订阅者,并附加一些要检查的表达式中的属性。请注意,您需要将监听器的优先级配置为高于32
,因为Symfony的路由器就在那里。在执行监听器之后执行会产生无用的结果。
Swagger导出
重写了bin/console swagger:api:export
- 需要一个单参数,指定所需的API名称以生成正确的导出。
调试模式
如果您处于开发环境,指定一些条件或使用特殊请求属性来指定您想与之一起工作的API很有用。默认情况下,如果您处于开发环境,则启用。
只需将x-api-select
变量添加到请求参数之一(除了files
)中,并指定API名称即可。它将产生一个具有相同名称的cookie,允许使用Swagger调试器进行工作。
当然,这可以很容易地进行调整或禁用
multi_api_platform:
debug_http_listener:
enabled: true
request_param: x-api-select
set_cookie: true
request_order: ['request', 'query', 'attributes', 'cookies', 'headers', 'server']