目录
什么是 ByteChef?
主要特点
描述
变更类型
这是如何测试的?
清单:
首页 Java java教程 深入研究 Java 项目

深入研究 Java 项目

Nov 03, 2024 am 09:05 AM

在我最后的 Hacktoberfest 贡献中,我参与了一个名为 Bytechef 的项目。 Bytechef 是一个低代码 API 集成和工作流程自动化平台。它允许您通过 API 与大量受支持的服务进行交互,方法是添加和连接各种组件来创建可以使用 API 响应的控制流。

Dipping Into a Java Project 字节科技总部 / 比泰切夫

开源、低代码、可扩展的 API 集成和工作流程自动化平台。将您的组织或 SaaS 产品与任何第三方 API 集成

Dipping Into a Java Project

API集成和工作流程自动化平台

网站 - 文档 - Discord - Twitter

Dipping Into a Java Project Dipping Into a Java Project

更新:ByteChef 正在积极开发中。我们正处于 alpha 阶段,某些功能可能会丢失或禁用。

Dipping Into a Java Project

什么是 ByteChef?

ByteChef 是一个开源、低代码、可扩展的 API 集成和工作流程自动化平台。 ByteChef 可以帮助您:

  • 自动化解决方案,允许您跨 SaaS 应用程序、内部 API 和数据库集成和构建自动化工作流程。
  • 明确针对 SaaS 产品的嵌入式解决方案,允许您的客户将他们使用的应用程序与您的产品集成。

主要特点

  • 直观的 UI 工作流程编辑器:通过 UI 编辑器拖放组件并定义它们的关系来构建和可视化工作流程。
  • 事件驱动和计划工作流程:通过简单的触发器定义自动执行计划和实时事件驱动工作流程。
  • 多种流控:使用条件、switch、loop、each、parallel等多种流控的范围
  • 内置代码...
在 GitHub 上查看

我的任务是向名为 Baserow 的数据库服务组件添加新功能。我必须开发的功能是一个“动作”(即组件的函数),它允许组件更新数据库中的一行。

Baserow - 更新行操作 第1645章

Dipping Into a Java Project
莫尼卡库斯特 发布于

为 Baserow 组件实现更新行操作,以允许用户修改 Baserow 数据库中表中的特定行。

动作属性:

  • 表 id - 要更新行的表的 id
  • row id - 您要更新的行的 id
  • user_field_names - 一个布尔值,指示此端点返回的字段名称是否应该是字段的实际名称
  • fields - 字段及其表的新值的映射。该属性指定行中要更新的数据,允许用户在单个操作中更改多个字段。

输出:

  • 行 - 更新的行对象,包含与指定表中的行关联的所有数据字段和值

文档参考:https://baserow.io/api-docs

</div>
<div class="gh-btn-container"><a class="gh-btn" href="https://github.com/bytechefhq/bytechef/issues/1645">View on GitHub</a></div>
登录后复制


在注册此问题之前,我很少使用 Java。我只在学校课程中做过小型 JavaFX 程序,但我一直想了解更多。我在自己的时间里学习了一些,所以我对包、访问修饰符、依赖项和 Gradle(项目使用的构建工具)等概念有一定程度的熟悉。了解这些肯定会让进入这个项目变得不那么令人生畏。我了解项目结构,因为我了解了 Gradle 项目如何由子项目和子包组成,每个子项目和子包都具有不同的构建配置。

我的同学 Arina 注意到我们都在同一个项目上工作,她很友善地通过链接到添加组件的开发人员文档以及已经为该组件定义的操作来给我一些指示,这意味着我不必亲自查看存储库来查找相关文件/目录。但如果必须的话,我会使用 git grep、GitHub 的代码搜索或 IntelliJ 的搜索。我确实使用 git Blame 来检查我要处理的组件的历史记录,发现它都是在一次提交中开发的。

该项目的贡献文档非常容易理解,并一步步列出了详细的说明。但该项目似乎非常年轻 - 我注意到一些自述文件刚刚写着 // TODO。

在进行更改之前,我尝试编译并运行该程序以查看它是如何工作的,但这是一个艰难的过程。下面是我做的笔记:

Dipping Into a Java Project

编译完成后(花了一个多小时),我运行了它,这样我就可以检查现有的组件。我尝试创建一个帐户来使用客户端,但它不允许我这样做,所以我回到贡献文档,发现它带有一个可用于开发的管理员帐户,我认为该帐户是在运行 docker 时创建的-撰写。

登录后,我尝试制作 Baserow 组件,但客户端有点慢,所以我不小心复制了一个。当我尝试删除它时,客户端冻结了,所以我点击刷新,然后开始出现服务器错误并且客户端超时。我尝试重新启动服务器和客户端,但花了很长时间 - 在我看来似乎又要花一个小时。等了大约 16 分钟后,我就到此为止了,并决定稍后再做。

4天后

我害怕回到这个项目,并且不得不处理长达一小时的编译时间,但随着 Hacktoberfest 接近结束,我没有太多选择。因此,想象一下当项目构建没有错误并且在不到五分钟的时间内启动并运行时,我感到多么惊讶。发生了什么变化?我不知道。

所以我跳上客户端并找到了 Baserow 组件。

Dipping Into a Java Project
图 - Baserow 组件及其上的现有操作

要添加“创建行”操作,我需要查看 Baserow API 文档,该文档由维护者链接到我。我必须创建一个 Baserow 帐户才能查看文档,我认为这有点奇怪,但也没什么大不了的。

所以我测试了现有的操作“创建行”,并遇到了一个错误,整个页面变成了错误消息。我以为我输入了一个意外的值,但后来我发现这个错误已经被一个与我无关的单独问题跟踪。

在随后的测试尝试中,“创建行”操作成功了,因此我认为它是一个很好的学习尝试并理解操作是如何创建的候选者。我随后交叉引用了该问题、现有操作和贡献文档。

我了解到,操作是通过定义所需的输入参数、输出模式以及定义操作执行的实际过程的方法来创建的。

在创建行操作中,我看到有一个方法可以获取表中一行的字段,该方法用于定义输入参数。我意识到我可以在我的操作中使用它,但它的命名好像它仅用于“创建行”操作。我认为使用它很有意义,所以我继续使用它并决定让维护人员知道。

在阅读 Baserow API 文档时,我了解到要更新行,您需要使用名为“PATCH”的 HTTP 方法,而我什至不知道该方法的存在。 PATCH 类似于 PUT,但不是替换资源,而是部分更改资源。有趣的东西。

所以我开始实际编写我的操作,并且我能够从现有操作中提取几乎整个代码。我只需对其接受的参数(我添加了一个行 ID 来标识要更新的行)、输出架构及其调用的方法(更改了端点和 HTTP 方法)进行了轻微调整。为了允许行 ID,我必须向 Constant/ 子目录中的文件添加一个常量,其中包含与 Baserow 组件相关的所有常量。

我注意到所有现有的源代码文件都有一个许可证头,所以我也将其复制到我的中。我组织了我的导入,格式化了我的代码,现在是时候手动测试它了。

此时,我注意到“创建行”操作(已经存在的操作)的描述是错误的 - 它说它在 Baserow 的示例数据库中创建一行,它通过名称引用该行,而不仅仅是说您可以创建一行。我也向维护者做了注释,向维护者提及这一点:

Dipping Into a Java Project
图 - Create Row 组件的描述不正确

我的操作出现在客户端中,视觉上一切看起来都很好:

标题和描述出现:
Dipping Into a Java Project

显示属性(即输入参数):

Dipping Into a Java Project

工作流程成功运行,我收到了成功的响应:

Dipping Into a Java Project

表格已在我的 Baserow 帐户中更新:

Dipping Into a Java Project

我对自己的更改感到满意,因此我继续运行格式化程序和测试,但测试失败了,因为其中一项测试预计 Baserow 组件仅对其执行一项操作。我更新了测试以适应我的新操作,并运行了一个自动生成组件文档的脚本。重新运行测试时,它们通过了,但我仍然必须为我的操作添加单元测试。我查看了现有组件的单元测试,结果摸不着头脑。我认为我已经取得了不错的进展,所以我就到此为止了,打开了一份 PR 草案,并让维护者知道我注意到的问题。

第二天

尽管现有的测试看起来很可怕,但我真的没有太多选择,只能为我的操作添加一个,所以我回去并试图理解现有测试中发生了什么。我稍微研究了一下所使用的测试库 - JUnit Jupiter 和 Mockito。我试图一点一点地分解它,并使用法学硕士来帮助我理解每一行发生了什么。但说实话,我对到底是怎么回事,还是有一个模糊的了解。我知道我在嘲笑 Baserow API 并在其上调用我的操作方法,但这就是我的理解范围。

显然,这已经足够好了。我将我的 PR 标记为可供审核,并且维护者接受了我的更改!他们提供了一些反馈 - 尽管我读过它们,但我忘记了遵循贡献流程的某些部分。下次,我应该在创建拉取请求之前查看贡献文档。

为 Baserow 组件创建更新行操作 第1656章

Dipping Into a Java Project
乌代拉纳 发布于

描述

修复#1645

变更类型

  • 新功能(添加功能的非破坏性更改)
  • 此更改需要更新文档

这是如何测试的?

  • 使用 BaserowComponentHandler 定义测试进行测试,已更新以适应新操作。
  • 通过客户端手动测试操作:

Dipping Into a Java Project

Dipping Into a Java Project

Dipping Into a Java Project

清单:

  • [x] 我的代码遵循该项目的风格指南
  • [x] 我已经对自己的代码进行了自我审查
  • [ ] 我对我的代码进行了注释,特别是在难以理解的区域
    • 没有必要评论,因为现有操作也不包含评论
  • [x]我对文档做了相应的修改
  • [x] 我的更改没有生成新警告
  • [x] 我添加了测试来证明我的修复有效或我的功能有效
  • [x] 新的和现有的单元测试通过我的更改在本地通过
在 GitHub 上查看

我发现初始设置和编写测试是这个问题中最令人生畏的部分。相比之下,实际上添加该功能是轻而易举的事。但我发现这个问题真正酷的是,我能够用我不太了解的语言为项目做出贡献,这要归功于他们维护良好的文档和易于理解的代码。

这是我在 2024 年 Hacktoberfest 上的最后一个公关!回顾帖子即将推出!

以上是深入研究 Java 项目的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1669
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
公司安全软件导致应用无法运行?如何排查和解决? 公司安全软件导致应用无法运行?如何排查和解决? Apr 19, 2025 pm 04:51 PM

公司安全软件导致部分应用无法正常运行的排查与解决方法许多公司为了保障内部网络安全,会部署安全软件。...

如何将姓名转换为数字以实现排序并保持群组中的一致性? 如何将姓名转换为数字以实现排序并保持群组中的一致性? Apr 19, 2025 pm 11:30 PM

将姓名转换为数字以实现排序的解决方案在许多应用场景中,用户可能需要在群组中进行排序,尤其是在一个用...

如何使用MapStruct简化系统对接中的字段映射问题? 如何使用MapStruct简化系统对接中的字段映射问题? Apr 19, 2025 pm 06:21 PM

系统对接中的字段映射处理在进行系统对接时,常常会遇到一个棘手的问题:如何将A系统的接口字段有效地映�...

IntelliJ IDEA是如何在不输出日志的情况下识别Spring Boot项目的端口号的? IntelliJ IDEA是如何在不输出日志的情况下识别Spring Boot项目的端口号的? Apr 19, 2025 pm 11:45 PM

在使用IntelliJIDEAUltimate版本启动Spring...

如何优雅地获取实体类变量名构建数据库查询条件? 如何优雅地获取实体类变量名构建数据库查询条件? Apr 19, 2025 pm 11:42 PM

在使用MyBatis-Plus或其他ORM框架进行数据库操作时,经常需要根据实体类的属性名构造查询条件。如果每次都手动...

Java对象如何安全地转换为数组? Java对象如何安全地转换为数组? Apr 19, 2025 pm 11:33 PM

Java对象与数组的转换:深入探讨强制类型转换的风险与正确方法很多Java初学者会遇到将一个对象转换成数组的�...

电商平台SKU和SPU数据库设计:如何兼顾用户自定义属性和无属性商品? 电商平台SKU和SPU数据库设计:如何兼顾用户自定义属性和无属性商品? Apr 19, 2025 pm 11:27 PM

电商平台SKU和SPU表设计详解本文将探讨电商平台中SKU和SPU的数据库设计问题,特别是如何处理用户自定义销售属...

如何利用Redis缓存方案高效实现产品排行榜列表的需求? 如何利用Redis缓存方案高效实现产品排行榜列表的需求? Apr 19, 2025 pm 11:36 PM

Redis缓存方案如何实现产品排行榜列表的需求?在开发过程中,我们常常需要处理排行榜的需求,例如展示一个�...

See all articles