假設我有一個移動應用程序,android/iOS和一個java Spring後端。鑑於移動連接性,網絡往返次數必須受到限制,理想的情況是每個屏幕1或更少。對其他資源有副作用的其餘API調用
現在,假設我想在2+應用程序用戶可以發送其他消息時添加/重寫某些消息傳遞功能。
有2個表/資源(這裏簡化)。 '對話'和'消息'。每個對話包含多個消息。
conversation
-----------------
id
type
last_message_test
last_message_username
message_count
etc
message
------------
id
conversation_id
user_id
user name
text
timestamp
談話記錄包含有關發生在這麼一個屏幕,其中列出許多談話只是頭可以展示其最新的內容,而不必查詢實際的消息表的最新消息的一些信息(也消息計數)。
理想會有電話這樣的:
POST /api/conversation => create a new conversation
POST /api/conversation/1234/message => post a new message in conversation 1234
GET /api/conversation?searchparam1=1&searchparam2=2 => retrieve certain conversation without their full actual content
GET /api/converstaion/1234/message => retrieve all the messages of a given conversation, 1234
這裏是雖然問題:
問題A) 當並主張一個新的消息,這將創建一個新的信息資源,但它們是(異步/消息)更新對相應'對話'記錄的副作用。因此,發佈typeA的新資源會觸發typeB的另一個資源的PATCH。這可以嗎?
問題B) 定位第一條消息時,還沒有對話記錄。兩者都必須創建,首先是「對話」記錄,然後是包含新對話ID(最好在交易中)的「消息」記錄。如何以休息的方式做到這一點,而不必做2個API調用?
基本上是試圖之間找到正確的折衷:
- 號休息的要求
- 複製數據庫字段和查詢
- 的資源化API
休息風格也許這不是真的有可能不添加某種人爲的新資源或「批次/捆綁/聚合」操作/終點?任何建議表示讚賞,謝謝!