er1z/multi-api-platform-bundle

此包已被废弃且不再维护。未建议替代包。

提供在单个应用程序中创建多个API的能力

0.1.1 2019-01-07 23:45 UTC

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"

必须配置namespaceimplements

您必须手动为每个API配置conditions。这是一个表达式,它通过动态的路由条件限制通过HTTP访问API。

条件不是预先定义的,以便强制您谨慎地公开特定的API。如果您想像这样公开API,请将"true"作为值。

debug_conditionsdev环境中评估,而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']