terminal42 / rokka-io-api-platform-bridge
提供集合和项目提供者、数据持久化器等功能,以便轻松集成 ApiPlatform 和 rokka.io
Requires
- php: ^7.1 || ^8.0
- ext-json: *
- api-platform/core: ^2.3
- guzzlehttp/psr7: ^2.4
- nyholm/psr7: ^1.5
- php-http/client-implementation: ^1.0
- php-http/discovery: ^1.0
- php-http/message-factory: ^1.0
- psr/http-message: ^1.0
- symfony/config: ^4.4 || ^5.4 || ^6.0
- symfony/dependency-injection: ^4.4 || ^5.4 || ^6.0
- symfony/psr-http-message-bridge: ^2.0
- symfony/routing: ^4.4 || ^5.4 || ^6.0
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.8
- php-http/mock-client: ^1.0
- phpunit/phpunit: ^9.5
README
无缝集成您的 rokka.io 账户与 ApiPlatform。
为什么?
为什么要桥接一个已经是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}
部分,它将自动在您请求任何内容时使用此组织。
安装
-
使用 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
-
按照他们的文档配置 rokka.io Symfony Bundle。
-
在您的内核中加载此捆绑包,如果您使用Symfony Flex,则这是自动完成的,否则请使用
$bundles = [ ... new Terminal42\RokkaApiPlatformBridge\RokkaApiPlatformBridgeBundle(), ];
-
将此捆绑包的路由加载器添加到您的路由配置中
# config/routes.yaml (or if you're still on SF 3: app/routing.yml) rokka_api_platform_bridge: resource: . type: rokka_api_platform_bridge
-
按照
配置
部分所示配置此捆绑包。
配置
# 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?
- 您的想法是什么?