簡體   English   中英

從 Restful 服務返回時的最佳實踐 - 返回 Java Object 與返回手動構建的 JSON

[英]Best practice when returning from Restful services - returning Java Object vs returning manually constructed JSON

我目前正在研究返回的寧靜 web 服務,比如List<ConfidentialData> (我使用這個ConfidentialData作為這個問題的例子)

假設這個ConfidentialData定義如下:

@Getter
@Setter
public class ConfidentialData {
    private Integer id; // unique-identifier
    private String data;
    private String creationDate;
    private String approvalDate;
}

現在,我使用 jackson 在幕后將此List<ConfidentialData>轉換為 JSON 並將其作為Response發送。

現在,UI 中的不同組件需要不同的 state 的ConfidentialData 假設我的一個 UI 頁面(比如 page1)需要純ConfidentialData object(在 JSON 中沒有任何其他成員),而另一個頁面(比如 page2)需要ConfidentialData object 以及一些其他成員(假設這些成員與ConfidentialData 。這些統計數據並不真正屬於ConfidentialData object,而是在 page2 要求時添加)。

我對 go 有 3 個選項:

  • 為page1和page2構造一個單獨的域object。
    • 恐怕這個解決方案的可擴展性不是很好,因為可能有更多頁面需要稍微不同的ConfidentialData組合,我最終會膨脹我的域對象。
  • 只需保留一個域 object 並構建 JSON - 通過添加特定頁面所需的其他成員。
    • 我可以看到在這種情況下我將不得不使用 JSON。 (但我也知道存在像 GSON 這樣的復雜庫,這將使我的生活變得輕松)
  • 我可以簡單地創建一個單一的域 object,它將包含 page1、page2、page3 等所需的所有內容。 (如果需要,我將繼續向此ConfidentialData域 object 添加任何其他成員)
    • 我非常反對這種方法,因為我們談論的機密數據的附加成員不容易計算。 在某些情況下,它可能是一些與ConfidentialData相關的統計數據,計算這些統計數據的計算成本很高。 我不希望我的簡單 API 調用來完成所有這些計算,當 UI 永遠不會使用它時(例如,在 page1 的情況下)

我可以看到第一種和第二種方法的明顯缺點。 我的問題是,在處理這種情況的寧靜服務方面,有什么好的做法。

為什么不操縱 JSON:

  • 另外,我不太贊成使用 JSON,因為我們的 java 權限過濾器(它是一個攔截器 - 它攔截來自服務的響應,並根據用戶的權限對列表進行一些過濾)然后必須調整JsonArray進行過濾,而不是簡單地過濾List<ConfidentialData>
  • 但是考慮到我們有像 GSON 這樣的復雜庫,過濾很容易。
  • 此外,由於過濾只能基於ConfidentialData#getId()進行(而且這永遠不會改變),我可以考慮繼續使用基於 JSON 的方法,目前在可擴展性方面看起來很有希望。

我可以將其視為操作 JSON 和創建多個域對象之間的權衡。 行業內是否有任何標准來處理這種情況?

根據調用服務的方式,您可以僅填充ConfidentialData的相應屬性,而其他屬性保持不變。 在序列化期間,您可以省略任何未設置的屬性。 這可以通過提供適當的序列化庫元數據來實現,無論是 Jackson 還是 Gson。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM