搜索
首页Javajava教程深入研究 Java 项目

在我最后的 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




在注册此问题之前,我很少使用 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
JVM如何处理操作系统API的差异?JVM如何处理操作系统API的差异?Apr 27, 2025 am 12:18 AM

JVM通过JavaNativeInterface(JNI)和Java标准库处理操作系统API差异:1.JNI允许Java代码调用本地代码,直接与操作系统API交互。2.Java标准库提供统一API,内部映射到不同操作系统API,确保代码跨平台运行。

Java 9影响平台独立性中引入的模块化如何?Java 9影响平台独立性中引入的模块化如何?Apr 27, 2025 am 12:15 AM

modularitydoesnotdirectlyaffectJava'splatformindependence.Java'splatformindependenceismaintainedbytheJVM,butmodularityinfluencesapplicationstructureandmanagement,indirectlyimpactingplatformindependence.1)Deploymentanddistributionbecomemoreefficientwi

什么是字节码,它与Java的平台独立性有何关系?什么是字节码,它与Java的平台独立性有何关系?Apr 27, 2025 am 12:06 AM

BytecodeinJavaistheintermediaterepresentationthatenablesplatformindependence.1)Javacodeiscompiledintobytecodestoredin.classfiles.2)TheJVMinterpretsorcompilesthisbytecodeintomachinecodeatruntime,allowingthesamebytecodetorunonanydevicewithaJVM,thusfulf

为什么Java被认为是一种独立于平台的语言?为什么Java被认为是一种独立于平台的语言?Apr 27, 2025 am 12:03 AM

javaachievesplatformIndependencEthroughThoJavavIrtualMachine(JVM),wodecutesbytecodeonyanydenanydevicewithajvm.1)javacodeiscompiledintobytecode.2)

图形用户界面(GUIS)如何提出Java平台独立性的挑战?图形用户界面(GUIS)如何提出Java平台独立性的挑战?Apr 27, 2025 am 12:02 AM

JavaGUI开发中的平台独立性面临挑战,但可以通过使用Swing、JavaFX,统一外观,性能优化,第三方库和跨平台测试来应对。JavaGUI开发依赖于AWT和Swing,Swing旨在提供跨平台一致性,但实际效果因操作系统不同而异。解决方案包括:1)使用Swing和JavaFX作为GUI工具包;2)通过UIManager.setLookAndFeel()统一外观;3)优化性能以适应不同平台;4)使用如ApachePivot或SWT的第三方库;5)进行跨平台测试以确保一致性。

Java开发的哪些方面取决于平台?Java开发的哪些方面取决于平台?Apr 26, 2025 am 12:19 AM

JavadevelovermentIrelyPlatForm-DeTueTososeVeralFactors.1)JVMVariationsAffectPerformanceNandBehaviorAcroSsdifferentos.2)Nativelibrariesviajnijniiniininiinniinindrododerplatefform.3)

在不同平台上运行Java代码时是否存在性能差异?为什么?在不同平台上运行Java代码时是否存在性能差异?为什么?Apr 26, 2025 am 12:15 AM

Java代码在不同平台上运行时会有性能差异。1)JVM的实现和优化策略不同,如OracleJDK和OpenJDK。2)操作系统的特性,如内存管理和线程调度,也会影响性能。3)可以通过选择合适的JVM、调整JVM参数和代码优化来提升性能。

Java平台独立性有什么局限性?Java平台独立性有什么局限性?Apr 26, 2025 am 12:10 AM

Java'splatFormentenceHaslimitations不包括PerformanceOverhead,versionCompatibilityIsissues,挑战WithnativelibraryIntegration,Platform-SpecificFeatures,andjvminstallation/jvminstallation/jvmintenance/jeartenance.therefactorscomplicatorscomplicatethe“ writeOnce”

See all articles

热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

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

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

EditPlus 中文破解版

EditPlus 中文破解版

体积小,语法高亮,不支持代码提示功能