terminal42/rokka-io-api-platform-bridge

提供集合和项目提供者、数据持久化器等功能,以便轻松集成 ApiPlatform 和 rokka.io

1.1.1 2022-07-29 09:25 UTC

This package is auto-updated.

Last update: 2024-08-29 04:31:37 UTC


README

无缝集成您的 rokka.io 账户与 ApiPlatform

Screenshot

为什么?

为什么要桥接一个已经是API的API?以下是一些主要原因

  • 使用此捆绑包,您可以将rokka.io的API密钥隐藏在您已经存在的API后面。
  • 您可以使用保护您的API的相同身份验证机制来保护rokka.io图像处理。
  • 它会根据rokka.io的文档自动更新您的API的Swagger文档,使其始终保持最新。
  • 它为使用您的API的开发者带来一致的感觉。

它通过简单地通过rokka.io的授权头使用相同的路径桥接您对API发出的所有请求来工作。默认情况下,它使用/rokka桥接端点,但这可以进行配置。

示例:假设您想创建一个新的源图像。在rokka.io中,这将是一个对/sourceimages/{organization}POST请求。所以您不会发送对https://api.rokka.io/sourceimages/{organization}POST请求,而是发送对https://myapi.com/rokka/sourceimages/{organization}POST请求。

因为您永远不想公开rokka.io的整个API(否则也可以修改您的帐户),所以必须配置允许的端点(请参阅配置部分)。因此,您可以桥接任何您喜欢的端点。这个概念很酷,如果您想允许一些用户修改您的帐户,您可以很容易地启用此端点并使用您的身份验证机制保护它。

此外,您可以通过配置default_organization来省略整个{organization}部分,它将自动在您请求任何内容时使用此组织。

安装

  1. 使用 Composer 并运行

    $ composer require terminal42/rokka-io-api-platform-bridge
    

    重要: 此捆绑包使用 HTTPlug 来解耦任何特定的HTTP客户端。这意味着如果您已经使用了一个可用的客户端,它将简单地重用该客户端。如果您还没有任何客户端,您必须先选择一个并安装它(或同时安装)。例如,如果您想使用Guzzle,请按如下方式安装捆绑包

    $ composer require terminal42/rokka-io-api-platform-bridge php-http/guzzle6-adapter php-http/message
    
  2. 按照他们的文档配置 rokka.io Symfony Bundle

  3. 在您的内核中加载此捆绑包,如果您使用Symfony Flex,则这是自动完成的,否则请使用

    $bundles = [
        ...
        new Terminal42\RokkaApiPlatformBridge\RokkaApiPlatformBridgeBundle(),
    ];
  4. 将此捆绑包的路由加载器添加到您的路由配置中

    # config/routes.yaml (or if you're still on SF 3: app/routing.yml)
    rokka_api_platform_bridge:
        resource: .
        type: rokka_api_platform_bridge
  5. 按照配置部分所示配置此捆绑包。

配置

# config/rokka_api_platform_bridge.yaml
rokka_api_platform_bridge:
    api_key: '' # Required
    bridge_endpoint: '/images' # Default: '/rokka'
    default_organization: ~ # Default: null
    http_client: ~ # Default: null
    endpoints:
        - { path: '/sourceimages/{organization}', methods: ['POST'] }
        - // etc.

自定义Http客户端

您可以通过rokka_api_platform_bridge.http_client传递一个服务ID,它必须是一个PSR Http\Client\HttpClient的实例。多亏了这个,您可以创建自己的实例,该实例实现了日志记录等功能,甚至可以重用现有的Symfony扩展包,例如非常流行的eightpoints/guzzle-bundle。您只需要使用php-http/guzzle6-adapter获取的PSR兼容适配器将Guzzle客户端包装起来。然后您可以这样配置Guzzle服务

# config/eight_points_guzzle.yaml
eight_points_guzzle:
    logging: true
    profiling: true
        rokka_api_platform_bridge: ~


# config/rokka_api_platform_bridge.yaml
rokka_api_platform_bridge:
    http_client: 'app.my_rokka_api_platform_bridge_service'
    
# config/services.yaml
app.my_rokka_api_platform_bridge_service:
    class: Http\Adapter\Guzzle6\Client
    arguments: ['@eight_points_guzzle.client.rokka_api_platform_bridge']

路线图/想法

  • 缩略图端点是否可以隐藏rokka.io URL?
  • 您的想法是什么?