mvnrsa / fibery-apis

Laravel 的 Fibery APIs 实现

dev-main 2024-02-24 08:37 UTC

This package is auto-updated.

Last update: 2024-09-24 09:57:09 UTC


README

Fibery APIs 的 Laravel 实现。

(c) 2024 - Marnus van Niekerk - fibery@mjvn.net

包含的 APIs

  • 集成 API - 用于自动将您的模型作为实体包含在 Fibery 中。
  • Webhooks - 当 Fibery 中的字段更改时,用于从 Fibery Webhooks 更新您的模型。
  • REST API - 用于查询模式,检索、创建和更新实体以及创建 Fibery 中的字段。

双向同步

通过结合集成 API 和 Webhooks,可以实现 最小化 的双向同步。

  1. 使用集成 API 将您的模型作为实体包含在 Fibery 中 - 来自 Laravel 的字段将是 只读
  2. 在 Fibery 中为该实体添加一些(阴影)字段 - 这些字段将 不是 只读。
  3. 设置一个 webhook,将实体的更改发布回您的 Laravel。
  4. 配置 webhook 处理器,从阴影字段的变化更新模型的真实字段。
  5. 任何在 Laravel 中更改的字段(不是阴影字段)将在集成同步下一次运行时更新到 Fibery。

不是 理想或完美的,但这是 Fibery APIs 目前能做的最好的。
遗憾的是,Fibery 集成 API 不支持任何更新,而且可能很快也不会。
更多详细信息请参阅下面的 Webhooks 部分。

注意!!

注意创建无限循环。 不要 以任何方式在您的 webhook 配置中包含相互依赖的字段。

安装

通过 composer 安装

composer require mvnrsa/fibery-apis

发布配置文件

php artisan vendor:publish --tag=fibery-config

.env 中设置您的 Fibery 主机和 api token。

FIBERY_HOST=yourhost.fibery.io
FIBERY_API_TOKEN=your_token

如果您打算使用 webhooks,则必须发布并运行迁移和种子。

php artisan vendor:publish --tag=fibery-migrations
php artisan vendor:publish --tag=fibery-seeders
php artisan migrate
php artisan db:seed FiberyMapSeeder

FiberyMap 种子将通过 API 连接到 Fibery,并将所有您的 Fibery 类型字段填充到 fibery_map 表中,但不会设置 Laravel 模型和字段名称。
如果您向 Fibery 添加类型或字段,您可以多次运行此种子。

身份验证和授权

遗憾的是,Fibery 集成和 Webhooks API 还不支持携带令牌身份验证(尚不支持),因此 Laravel 侧的身份验证是通过作为 URL(对于 Webhooks)或请求变量(对于集成)一部分的个人访问令牌进行的。

因此,您的应用程序必须支持创建用于这两个 API 的个人访问令牌。

授权是通过配置文件中可配置的 Gate 进行的。默认网关是 fibery_access,因此您必须将其添加到您的应用程序中或将其配置为使用另一个现有网关。

集成 API

如果您只想将您的模型发布到 Fibery,您只需要将您的类型与相应的模型类和字段添加到配置文件中,并将 integrations_enabled 更改为 true。配置文件中有关于假设的货币类型的合理示例。

然后,只需将您的 Fibery 集成指向 https://your.laravel.host/api/fibery,让 Fibery 做剩下的工作。:-)

内置代码使用 Model::all() 获取所有行,然后对每个模型应用 ->only($fields),以返回仅配置的字段。请注意,您可以从模型中包含任何属性(不仅限于数据库列),但遗憾的是,这(目前)不适合大型数据集。

如果您想要进行更复杂的操作,例如过滤或聚合数据,您可以在模型中添加一个返回二维数组中项的getFiberyData()方法。内置代码会检查该方法是否存在并使用它。

REST API

该包提供了一个具有查询Fibery模式、列出任何实体类型的字段、添加、查询和更新实体以及添加、列出和删除webhooks等方法的mvnrsa\FiberyAPIs\FiberyClient类。

  1. 查询Fibery模式;
  2. 列出任何实体类型的字段;
  3. 添加、查询和更新实体;以及
  4. 添加、列出和删除webhooks。

Webhooks

如果您计划使用webhooks,您必须发布并运行上面提到的迁移和seeder,并在配置文件中将webhooks_enabled更改为true。

然后您必须编辑fibery_map表中的行,以设置laravel模型和字段名称,并将某些字段标记为每个模型的引用字段。引用字段由API客户端用于将Fibery中的实体与Laravel中的模型相匹配。

然后您可以调用带有类型名称的add_webhook方法以生成唯一的URL并在Fibery中设置webhook。该方法接受一个第二tag参数,该参数将标签添加到webhook URL,以便更容易地在日志文件中找到调用。

使用webhooks方法列出任何现有的webhooks,并使用delete_webhook方法删除一个。

注意,webhooks是通过您的默认队列使用FiberyWebhookJob作业处理的。

注意

请注意,为了使webhooks真正工作,您必须正确设置fibery_map,其中包含Fibery和Laravel实体/模型和字段名称,并且必须将一些字段标记为引用字段,以便API客户端能够确定哪些实体映射到哪些模型。

不幸的是,webhook有效负载(效果)本身不包含足够的数据来做出这样的决定,因此客户端必须从Fibery获取更多字段以匹配第一次更新特定模型。模型的Fibery ID存储在fibery_map表中的FiberyMap模型中,然后用于所有后续更新。

示例

以我们的假设货币模型为例,Fibery可能有一个与模型中code列匹配的Code字段。然后可以设置Currency/Code字段以匹配Currency模型上的code列,如果它被标记为引用字段,API客户端将使用Code/code来确定哪个Laravel模型与Fibery中的哪个实体匹配。

如果您为特定模型标记了多个字段为引用字段,它们都必须匹配。