JSON Schema 在 Cookpad 中去重複化複雜邏輯和驗證
挑戰
Cookpad Mart 是 Cookpad Inc. 正在關注的新業務之一。它是一個主要經營生鮮食品的電子商務平台,城市中的零售商和當地生產商都以賣家的身分參與 Cookpad Mart。專用冰箱被安裝為用戶在便利商店、藥妝店、火車站和公寓等各處的取貨地點。用戶可以從應用程式下單,並從冰箱接收新鮮食品。
Cookpad Mart 正在為賣家開發管理畫面,該畫面提供賣家註冊產品和執行日常出貨作業的功能。
「需要根據產品的類型和狀態輸入不同類型的資料,但應該從哪個表單手動輸入所有項目中列出的資訊?每次都要判斷是非常困難的。」Cookpad Mart 團隊的工程師 Kenshi Shiode 說。需要一種機制來根據產品的類型和狀況分類出適當的表單。
此外,僅靠控制前端表單的分發無法完全防止無效資料的註冊。雖然內部營運人員會在產品開始銷售之前進行產品篩選,但為了避免產品篩選和錯誤的負擔,最好在後端驗證後再註冊產品。
解決方案
團隊考慮使用自訂程式碼來產生複雜的表單,但擔心瀏覽器和伺服器端的驗證是否一致。在尋求建立通用 Schema 時,JSON Schema 被選為機制。「我們決定引入 JSON Schema 作為一種可以分離和驗證複雜表單的機制。」Kenshi 說。
影響
JSON Schema 提高了註冊產品時的準確性和體驗,並大大減輕了產品篩選的營運負擔。
使用 JSON Schema 減少了變更需求的負擔。「即使未來新增了新的需求,也可以簡單地更新 JSON Schema 定義來解決,並且可以輕鬆地執行前端表單分發控制邏輯和後端的驗證。」Kenshi 說。
主要影響成果
「以前,約有 10% 的新註冊產品在品質保證項目中輸入不完整,但隨著 JSON Schema 的引入,品質保證項目中不再有缺陷。」Kenshi 說。
關於 Cookpad Inc.
Cookpad 是一個全球食譜分享平台,每月在全球 76 個國家/地區擁有平均 1 億人次的用戶,支援 34 種語言,並擁有超過 550 萬個分享的食譜。它是日本最大的食譜分享服務。


作為一家科技公司,他們致力於「讓每天的烹飪變得有趣」。他們認為烹飪是人們、社區和地球擁有更幸福、更健康生活的關鍵。提供更容易取得新鮮優質食材的管道可以改善烹飪,而這正是 Cookpad Mart 發揮作用的地方。
「美味的東西趁著美味的時候享用」是 Cookpad Mart 的主要想法之一,旨在讓顧客更直接地與生產者聯繫。新鮮的食材、建議和食譜,構成了一個吸引人的提案。「清脆有彈性的質地和滴落的乳白色質地是新鮮馬蘇里拉起司的真正樂趣。」一個產品範例如此寫道。
來自小型生產商的高品質食材往往很難在一般市場上找到,因此最明智的方法是主要採用自助上架。雖然 Cookpad Mart 目前僅在有限的區域營運,但除了讓客戶獲得最新鮮的食材之外,擴大規模和減少人工審查和核准的能力也很重要。
開發中的好處
「我們認為應該對後端和前端應用程式使用相同的邏輯。起初我們考慮建立自己的自訂 JSON 結構,但我們必須編寫許多 if
陳述式,我不想想像!」
開發人員經常聽到的一句格言是 DRY:「不要重複自己」。Kenshi 說:「我們可以只專注於 JSON Schema 定義,一切都已自動產生並應用。」,「那真是一個很棒的時刻。」減少邏輯重複可以降低客戶端和伺服器端之間期望不符的可能性。
雖然人工智慧通常被比作許多 if
陳述式,但經驗豐富的應用程式開發人員通常會尋求降低複雜性,進而降低風險。透過刪除許多條件區塊來降低複雜性,使程式碼審查變得更加容易,甚至對持續維護任務產生了積極的影響。「我想工程師會盡可能減少 if 陳述式。」Kenshi 打趣道。
我們看到許多 JSON Schema 都保持相當簡單,但對於那些願意閱讀文件的人來說,有很多功能可供使用。「我對 JSON Schema 的詞彙感到非常驚訝。」Kenshi 繼續說,「不僅有像 type 和 length 這樣的簡單表達式,還有像 oneOf
甚至 If-Then-Else
這樣的複雜表達式。」
當您考慮 JSON Schema 的長壽時,條件驗證是新的。一旦您解鎖了對應用子架構的各種方法的理解,組合可能會令人滿意且功能強大。「當我發現 JSON Schema 準備的豐富詞彙時,我對使用 JSON Schema 感到有信心。太棒了!」我們恰好同意,Kenshi!
感謝 Cookpad 的工程師 Kenshi Shiode 允許並使我們能夠與您分享這個案例研究。
註:本案例研究的部分內容最初位於 Cookpad 的一篇部落格文章中,網址為 https://techlife.cookpad.com/entry/mart-json-schema。經許可使用。