回應(二)用 Schema 建立巢狀結構回應
這是 Django Ninja 系列教學的第 14 篇。
在 API 開發中,我們經常會遇到關聯模型之間的資料需要同時返回的情況。
特別是在處理「一對一」或「一對多」關聯時,多層結構往往是常態。
我們希望以巢狀結構(Nested Objects)的方式返回資料,這樣可以讓 API 的使用者一次取得必要資訊,而不需要進行多次請求。
本文將繼續使用並擴充「單一文章資訊」API 這個範例,講述如何在 Django Ninja 中實現巢狀結構回應,讓我們的 API 回應更加豐富、有體系。
本文所有的程式碼變動,可參考這個 PR。
一、問題背景
在之前的 API 設計中,「取得單一文章資訊」的回應包括了文章資訊及作者的 id:
1 | class PostResponse(Schema): |
有經驗的開發者都知道,無論是id
還是author_id
,通常不是給服務的使用者看的——而是給前端人員靈活運用的。
比如在系統的畫面中,文章可能包括作者的個人資訊連結,點進去可以看到作者資訊。此時前端必須透過 id,再呼叫另一支 API「取得用戶資訊」來獲得額外的內容。
如果額外資訊很多,這樣的「解耦」設計是非常合理的。但如果我們希望一併呈現作者的「必要資訊」,那分次呼叫的設計就略嫌拖沓。
所以我們需要巢狀結構!
API 可以直接在回應中,嵌入作者的「必要資訊」,這樣用戶就不必再進行多次請求。這裡我們以一併顯示作者的「名字」和「email」為例。