在 Remote 使用 JSON Schema 扩展表单和数据验证
挑战
表单。法律表单、雇佣表单、薪资表单,所有表单!从许多不同的国家招聘会带来许多不同的要求,Remote 必须处理所有这些要求。一个国家不断变化的法律和法规已经足够让人应接不暇,更不用说近 100 个国家了!
"想象一下,你想在阿根廷、德国和尼日利亚雇佣人。这些都是非常不同的国家,有着不同的法律和要求,我们必须处理所有这些。" - Remote.com 的员工前端工程师 Sandrina Pereira。
Remote 最初成立时,只覆盖了少数几个国家,每个国家只有几个特定的表单。扩展到数百种包含复杂要求的国家表单令人印象深刻。您是否意识到工作时间和周末日期在不同国家和雇佣类型之间有所不同?在一些国家,周末是星期五和星期六。除了传统的 9 到 5 之外,还有许多其他类型的日程安排。如果在某人的工资支付中弄错了这一点,可能会产生巨大的影响。
管理和维护以完整 HTML 格式(甚至前端组件)硬编码的表单,对于 Remote 想要实现的扩展来说是不可行的。
"我们硬编码的解决方案阻碍了我们业务的扩展。重复的代码、不一致的服务器/客户端验证、巨大的 JavaScript 包..." Sandrina 解释道。
Remote 需要一种方法来在服务器端配置表单,以便 Remote API 使用这些表单,包括可以在服务器和客户端之间共享的集中式验证。
解决方案
JSON Schema 是专门为 JSON 数据验证而设计的,但这并没有阻止其出现的用例。虽然有一些表单生成库以 JSON Schema 作为输入,但 Remote 想要拥有完全的控制权,并且需要自由地根据需要发展解决方案。
"所有这些现在都通过 JSON Schema 解决,"Sandrina 继续说道。他们最初在他们的开发基础团队中针对表单和验证开发了 JSON Schema,后来作为公司“入职”垂直的一部分。他们的入职流程需要大量数据,必须提供最好的体验,以避免流程中断,同时不影响数据安全或准确性。
Remote 决定创建自己的 表单生成工具,允许他们在 JSON Schema 中添加与表单字段的展示相关的其他自定义关键字,根据需要进行添加。"经过深入的调研和概念验证,考虑到表单在我们核心产品中的关键作用,我们决定冒险..." 这个库的第一个版本最近刚刚开源,所以您现在就可以尝试!去看看 @remoteoss/json-schema-form!
数据不仅仅通过表单获取,也通过 API 获取,这通常包括第三方。"我们从 Remote API 开始这段旅程,Remote API 本身就是一个横向工具。它会逐渐影响 Remote 的各个领域。最终,我们的愿景是让所有与我们的 API 交互的表单都由基于 JSON Schema 的“无头表单”驱动,"Sandrina 解释道。正确地确定数据边界可能很困难,但值得付出努力。在服务器上进行验证并在客户端重复使用它,不仅简化了开发,而且在安全性方面也减少了攻击面。
与在堆栈中添加任何新技术一样,您必须批判性地评估它是否长期可行,以及它在您现有堆栈中进行任何更改时的灵活性。Sandrina 和她的同事进行了研究...
"虽然 JSON Schema 不是一个“官方标准”,但看到大型玩家采用它并为其成熟做出贡献,这对我们来说是一个很大的信任点。JSON Schema 正在由其强大的社区积极开发,并且被许多公司广泛采用,包括我们使用的许多语言中的成熟库:JavaScript 和 Elixir。"
"当寻找一种描述和验证 JSON 对象的方法时,没有其他可靠的替代方案。JSON Schema 被自信地采用。" - Remote.com 的员工前端工程师 Sandrina Pereira。
影响
将 JSON Schema 作为 SSoT(单一事实来源)解锁了巨大的潜力。"JSON Schema 是解决 Remote 所有层级的数据验证和表单生成问题的第一步,"Sandrina 解释道。
一旦您开始使用 JSON Schema,发现多个用途并不罕见。Remote 在服务器上创建 JSON Schema,并使用它们来验证 API 负载、运行定期验证报告(基于法律要求)以及在代码中自动完成。此外,客户端会使用这些模式来生成视觉表示,例如表单和表格。
有了 SSoT,Remote 发现创建和维护表单所需的时间减少了,并且与数据不一致和验证错误相关的支持票数量也显著减少。对于 Remote 来说,最重要的是,他们还缩短了新国际员工和承包商的入职时间。虽然在集成 JSON Schema 期间同时进行了其他改进,但他们相信 JSON Schema 是关键。
主要影响结果
以大规模适应和发展,更快地提供服务,将入职时间从数周缩短到数天。以下是一些迄今为止最大的成果列表
- 服务器和客户端之间的共享验证
- 减少 JS 包和代码重复,用 API 请求代替
- 减少报告不一致验证的票证数量。
- 更快地结束票证
- 更轻松地创建和维护表单
- 为内部运营团队打开了自行构建表单的大门
"JSON Schema 是连接器,可以在大规模上保持数据的准确性,从而加快我们为客户提供的许多服务的执行速度。在某些情况下,为新国家/地区实施表单所需的时间从数周缩短到仅仅几天。"
Remote - 公司
Remote 简化了您入职和支付国际员工和承包商的过程。Remote 是一家全球性的、完全分布式的公司,在人力资源行业运营,没有实体办公室。"我们的员工可以自由地在世界各地他们选择的位置工作!"
Sandrina Pereira:"我是一名员工前端工程师,在入职垂直领域工作,我们拥有最大、最动态的表单,这些表单包含雇佣新员工所需的所有数据。"毫无疑问,这是一个至关重要的职位,可以实现 Remote 提供的价值主张。
随着许多公司不得不提供远程工作的方式,为什么将人才库限制在一个地理位置呢?
Remote 也想赋予员工权力:"人才无处不在,但机会却很少。Remote 使雇主能够从任何地方雇用任何人,为所有人提供获取机会的机会,最终使他们能够改善自己的生活。"对于 Remote 来说,这些不仅仅是口号。
2021 年,Remote 推出了他们的 难民项目,使雇主能够以成本效益的方式投资,同时帮助难民重建生活。Remote 还为流离失所的乌克兰人设立了 专门资源。
Remote 在 2022 年以超过 30 亿美元的估值完成了 3 亿美元的 C 轮融资。
其他好处
"JSON Schema 为我们带来了数据一致性(注释)和数据安全(服务器验证)。" - Remote.com 的员工前端工程师 Sandrina Pereira。
在迁移了业务的一些核心部分之后,Remote 继续创建了一个界面,允许运营团队自行编辑表单,这些表单存储为 JSON Schema,以便从验证中受益。静态 JSON Schema 文件为他们服务得很好,但最终他们需要能够更快地对变化做出反应。
知识共享也从 JSON Schema 中受益,Remote 改进了他们的知识库。国家/地区特定数据(例如支持的签证选项和入职时间表)可以编码到数据结构中,然后可以在服务器端和客户端端进行验证。
最初不确定 JSON Schema 可以走多远,尽管 Remote 推动了 JSON Schema 的能力边界,但事实证明,它对 Remote 的扩展能力产生了重要影响。
"JSON Schema 已经证明了其作为我们核心工具生态系统的一部分的价值,用于验证数据并生成其视觉表示(例如表单和表格),这些是将我们的服务扩展到大规模而不影响准确性、速度和最重要的是客户满意度的基本要素!"我们很高兴您在 JSON Schema 中找到了价值 Sandrina!希望它能继续发挥作用。
感谢 Sandrina Pereira,前端工程师,以及 Remote.com,允许我们与您分享这个案例研究。Sandrina 也想感谢她一年前启动这项工作的同事: André Albuquerque,António Capelo,António Silva,Livia Barbosa,以及 João Almeida.