2021 年 12 月 9 日,星期四 ·6分钟阅读

Cookpad 的 JSON Schema 简化了复杂逻辑和验证

挑战

Cookpad Mart 是 Cookpad Inc. 关注的新业务之一。它是一个主要经营生鲜食品的电商平台,城市零售商和本地生产商以卖家身份参与 Cookpad Mart。专门的冰箱被安装为用户在便利店、药店、火车站和公寓等各个地点的取货点。用户可以通过应用程序下订单,并从冰箱中取货。

Cookpad Mart 正在为卖家开发一个管理屏幕,该屏幕提供卖家注册产品和执行每日运输操作的功能。

“根据产品的类型和状态,需要输入不同类型的数据,但应该从所有项目都列出的表格中手动输入哪些信息?每次判断都很难,”Cookpad Mart 团队工程师 Kenshi Shiode 说。需要一种机制来根据产品的类型和状态对适当的表格进行分类。

此外,仅仅通过控制前端的表格分配,不可能完全防止无效数据的注册。虽然内部运营人员在产品开始销售之前会进行产品筛选,但希望产品在后端经过验证后注册,以避免产品筛选和错误的负担。

解决方案

该团队考虑使用自定义代码来生成复杂的表格,但担心浏览器和服务器端的一致验证。为了创建一个通用模式,选择 JSON Schema 作为机制。Kenshi 说:“我们决定引入 JSON Schema 作为一种机制,可以分离和验证复杂的表格。”

影响

JSON Schema 提高了注册产品的准确性和体验,并大大减少了产品筛选的运营负担。

使用 JSON Schema 减少了更改需求的负担。Kenshi 说:“即使将来新需求增加,也可以通过简单地更新 JSON Schema 定义来解决,并且可以轻松地执行前端表格分配控制逻辑的验证和后端的验证。”

关键影响结果

"从 10% 的提交存在缺陷到 0。"

Kenshi 说:“以前,大约 10% 的新注册产品在质量保证项目方面输入不完整,但自从引入了 JSON Schema 后,质量保证项目中没有缺陷。”

关于 Cookpad Inc.

Cookpad 是一个全球食谱分享平台,在全球 76 个国家、支持 34 种语言,拥有超过 550 万个共享食谱,每月平均有 1 亿人使用。它是日本最大的食谱分享服务。

Cookpad Mart 冰箱
Cookpad 办公室

作为一家科技公司,他们致力于“让日常烹饪变得有趣”。他们相信烹饪是人们、社区和地球过上更幸福、更健康生活的关键。为优质的生鲜食材提供更便捷的获取方式,可以实现更好的烹饪,这就是 Cookpad Mart 的影响力所在。

“新鲜美味”是 Cookpad Mart 的主要理念之一,它希望将顾客更直接地与生产商联系起来。新鲜食材、推荐和食谱,构成了一个诱人的主张。“新鲜马苏里拉奶酪的酥脆弹性和滴落的乳白色质地是真正的乐趣,”一个产品示例中写道。

来自小型生产商的高品质食材在普通市场上很难找到,因此最明智的做法是大多数自服务清单。虽然 Cookpad Mart 目前只在有限的地区运营,但除了让顾客获得最新鲜的食材外,能够扩展规模并减少手动审核和批准也很重要。

开发优势

“我们认为应该对后端和前端应用程序使用相同的逻辑。最初,我们考虑创建自己的自定义 JSON 结构,但我们必须编写许多 if 语句,我都不敢想象!”

"“JSON Schema 帮助我们轻松地实现后端验证和前端表单生成。这是一次非常棒的体验!”Kenshi 解释说,他估计使用 JSON Schema 后,构建验证所花费的时间减少了一半。"

开发人员经常听到的一句格言是 DRY:“不要重复自己”。Kenshi 说:“我们可以只关注 JSON Schema 定义,所有内容都已自动生成并应用。”“那真是一个美妙的时刻。”减少逻辑重复,可以降低客户端和服务器端之间预期不一致的可能性。

虽然人工智能经常与许多 if 语句进行比较,但经验丰富的应用程序开发人员通常会寻求降低复杂性,从而降低风险。通过删除许多条件块来降低复杂性,使代码审查更容易,甚至对持续维护任务也有积极的影响。Kenshi 打趣地说:“我想工程师希望尽可能减少“if”语句。”

我们看到的许多 JSON Schema 都保持着相当的简单性,但对于那些愿意阅读文档的人来说,它提供了很大的力量。Kenshi 继续说道:“我对 JSON Schema 的词汇量感到非常惊讶。”“它不仅包含类型和长度等简单表达式,还包含 oneOf 甚至 If-Then-Else 等复杂表达式。”

如果您考虑 JSON Schema 的悠久历史,条件验证是新的。一旦您掌握了应用子模式的多种方法的理解,组合起来就会令人满意且强大。“当我发现 JSON Schema 准备的丰富的词汇量时,我感到有信心使用 JSON Schema。太棒了!”我们很同意,Kenshi!

感谢 Cookpad 的工程师 Kenshi Shiode 允许并支持我们与您分享此案例研究。

注意:本案例研究的部分内容最初位于 Cookpad 的博客文章中,位于 https://techlife.cookpad.com/entry/mart-json-schema。经许可使用。