免费获取学习方案
ARTICLE DETAIL

资讯详情

深耕编程基础知识与建站技术分享的一线实战洞察。

Airbyte Bunny, Inc. 声明式源连接器解析:GraphQL 数据同步的 Low-Code CDK 实践

Airbyte Bunny, Inc. 声明式源连接器解析:GraphQL 数据同步的 Low-Code CDK 实践 Airbyte Bunny, Inc. 声明式源连接器解析GraphQL 数据同步的 Low-Code CDK 实践【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址: https://gitcode.com/gh_mirrors/ai/airbyteBunnyBunny, Inc.又称 Bunny RevOps提供集订阅管理、计费、报价、收入确认与 SaaS 指标于一体的平台。本篇文章围绕 Airbyte 仓库中的source-bunny-inc连接器讲解如何将 Bunny 平台的账户、发票、订阅、报价等核心业务数据同步到你的数据仓库。读完本文你将掌握该连接器的配置方式、15 个数据流的字段与同步能力以及其底层基于 Low-Code CDK声明式 Manifest调用 Bunny GraphQL API 的实现机制并了解如何在本地进行开发与验收测试。连接器概览与仓库位置source-bunny-inc是一个纯声明式manifest-only源连接器由 Connector Builder 构建没有手写 Python 代码其全部同步逻辑都定义在一份 YAML Manifest 中。相关文件均位于仓库的 airbyte-integrations/connectors/source-bunny-inc/ 目录文件作用manifest.yaml声明式源定义15 个数据流、认证、分页、Schema约 2100 行metadata.yaml连接器元数据Docker 镜像、版本、发布阶段、允许的主机等acceptance-test-config.ymlConnector Acceptance TestsCAT配置README.md面向开发者的通用说明icon.svg连接器图标从 metadata.yaml 可以看到该连接器的身份信息connectorType: source、connectorSubtype: api、dockerRepository: airbyte/source-bunny-inc、当前版本dockerImageTag: 0.0.54属于alpha发布阶段、community社区支持级别并标记了language:manifest-only与cdk:low-code两个标签——这直接印证了它零代码、纯配置的构建方式。其运行底座是source-declarative-manifest基础镜像版本 7.28.4即 Low-Code CDK 的运行时容器。配置参数详解在 Airbyte 中创建该连接器时只需填写三个配置项定义于 manifest.yaml 的spec.connection_specification部分与官方集成文档 docs/integrations/sources/bunny-inc.md 一致输入类型描述默认值apikeystringAPI KeyBunny API 访问令牌无subdomainstring你的 Bunny 账号/服务专属子域名无start_datestring开始日期格式date-time无其中apikey与subdomain为必填项Manifest 中required: [subdomain, apikey]。apikey被标记为airbyte_secret: true在 UI 中会以密文形式存储与展示不会明文回显。start_date定义了日期时间格式YYYY-MM-DDTHH:MM:SSZManifest 中的pattern校验规则。子域名直接决定了 API 的访问地址Manifest 中base_requester将url_base配置为https://{{ config[subdomain] }}.bunny.com意味着填入的子域名会拼接到请求 URL 中。支持的 15 个数据流Streams该连接器通过check阶段校验以下 15 个数据流是否可访问全部使用id作为主键均支持全量同步Full Refresh暂不支持增量同步Incremental分页均采用默认分页器DefaultPaginator数据流名称主键分页全量同步增量同步accountsidDefaultPaginator✅❌accountBalancesidDefaultPaginator✅❌contactsidDefaultPaginator✅❌entitiesidDefaultPaginator✅❌invoicesidDefaultPaginator✅❌invoiceItemsidDefaultPaginator✅❌paymentsidDefaultPaginator✅❌productsidDefaultPaginator✅❌plansidDefaultPaginator✅❌quotesidDefaultPaginator✅❌quote_chargesidDefaultPaginator✅❌subscriptionsidDefaultPaginator✅❌subscriptionChargesidDefaultPaginator✅❌transactionsidDefaultPaginator✅❌tenantsidDefaultPaginator✅❌这些数据流覆盖了 Bunny 平台的核心业务域客户与组织accounts客户账户含账单/配送地址、税率、付款状态等、contacts联系人含邮箱、电话、门户访问权限、tenants租户含子域名、用户数、开通状态、entities法人实体含默认财务科目映射、发票/报价编号规则产品与价格products产品目录、plans订阅计划含自服务购买/续费/取消开关、基础价格交易与账单invoices发票含应付/已付金额、到期日、门户链接、invoiceItems发票行项目含单价、数量、税码、定价模型、payments收款记录、transactions资金流水、accountBalances账户余额订阅与报价quotes报价单、quote_charges报价费用、subscriptions订阅含试用期、周期、价格表、subscriptionCharges订阅费用。每个数据流都在 Manifest 中定义了对应的 JSON Schemaschemas段字段类型多为可空联合类型如[string, null]并开启了additionalProperties: true以兼容上游新增字段。底层实现原理Manifest 驱动的 GraphQL 同步虽然这是一个低代码连接器其实现机制非常值得理解全部体现在 manifest.yaml 中1. GraphQL 端点与 Bearer 认证所有数据流共用同一个base_requesterManifest 中的$ref复用机制base_requester: type: HttpRequester url_base: https://{{ config[subdomain] }}.bunny.com authenticator: type: BearerAuthenticator api_token: {{ config[\apikey\] }}请求统一发往/graphql端点HTTP 方法为POST认证方式为 Bearer Token即请求头中的Authorization: Bearer apikey。API 请求体request_body_json中携带 GraphQL 查询语句。2. 游标分页CursorPagination每个数据流都配置了基于 GraphQLpageInfo的游标分页。以plans为例paginator: type: DefaultPaginator page_token_option: type: RequestOption field_name: variables inject_into: body_json pagination_strategy: type: CursorPagination cursor_value: - {{ {after: response.data.plans.pageInfo.endCursor } if response.data.plans.pageInfo.endCursor else }} stop_condition: {{ response.data.plans.pageInfo.hasNextPage is false }}其工作流程是查询语句声明变量query($after: String) { plans(first: 10, after: $after) ... }每页请求 10 条记录响应中的pageInfo.endCursor被提取为下一页游标注入到下一次请求的variables字段当hasNextPage为false时停止翻页。3. 记录提取DpathExtractor响应解析通过DpathExtractor完成路径为data.stream名.nodes.*即把 GraphQL 响应中data→ 数据流名 →nodes数组展开为 Airbyte 记录流record_selector: type: RecordSelector extractor: type: DpathExtractor field_path: - data - plans - nodes - *4. 流式复用与 Schema 引用15 个数据流的定义高度模板化每个流由SimpleRetrieverDefaultPaginatorHttpRequesterDpathExtractorInlineSchemaLoader组合而成仅 GraphQL 查询字段与field_path不同。Manifest 顶部通过definitions.streams定义全部数据流底部streams段用$ref逐一引用体现了声明式 CDK 的组件复用设计。开发与本地调试按照连接器目录下的 README.md 说明这是一个基于Connector Builder构建的声明式连接器底层 YAML 格式遵循Low-Code CDK规范对应仓库中的manifest.yaml本地开发与测试可参考 Airbyte 官方本地开发连接器指南常见的做法是使用airbyte-ci工具链在本地运行spec、check、discover、read等命令验证 Manifest 行为连接器特有的排障与测试指引可查看该连接器目录下的CONTRIBUTING.md本仓库中尚未提供该文件属可选补充。需要说明的是manifest.yaml本身即连接器的源码修改任何数据流的查询、分页策略或 Schema都是直接编辑该文件后重新构建镜像dockerRepository: airbyte/source-bunny-inc本地构建标签通常为airbyte/source-bunny-inc:dev。验收测试配置acceptance-test-config.yml 定义了该连接器的 Connector Acceptance Testsconnector_image: airbyte/source-bunny-inc:dev acceptance_tests: spec: tests: - spec_path: manifest.yaml connection: bypass_reason: This is a builder contribution, and we do not have secrets at this time discovery: bypass_reason: This is a builder contribution, and we do not have secrets at this time basic_read: bypass_reason: This is a builder contribution, and we do not have secrets at this time incremental: bypass_reason: This is a builder contribution, and we do not have secrets at this time full_refresh: bypass_reason: This is a builder contribution, and we do not have secrets at this time可以看到spec测试会直接以manifest.yaml作为 spec 定义来源进行校验而connection、discovery、basic_read、incremental、full_refresh等测试目前均以社区 Builder 贡献、暂无测试密钥为由跳过bypass这也与该连接器处于 alpha 阶段、缺少 CI 凭据的现状一致。版本发布与变更记录官方集成文档 docs/integrations/sources/bunny-inc.md 维护了完整的 Changelog该连接器于 2024-10-29 由社区成员通过 Connector Builder 完成初始发布0.0.1此后保持高频迭代当前为 0.0.54绝大多数变更记录为Update dependencies即跟随 Low-Code CDK 基础镜像的升级而发布新版本。小结source-bunny-inc是 Airbyte 中典型的manifest-only声明式连接器范例不写一行代码仅通过 manifest.yaml 组合 HttpRequester、BearerAuthenticator、CursorPagination 与 DpathExtractor即可完成对 Bunny GraphQL API 的认证、分页拉取与 Schema 映射。对于开发者而言它不仅是一个开箱即用的 Bunny 数据源更是一份学习 Low-Code CDK 组件化配置的优秀参考实现——想扩展新数据流时只需在definitions.streams中按模板追加定义并注册到streams列表即可。【免费下载链接】airbyteOpen-source data movement for ELT pipelines and AI agents — from APIs, databases files to warehouses, lakes, and AI applications. Both self-hosted and Cloud.项目地址: https://gitcode.com/gh_mirrors/ai/airbyte创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表