私はモバイルアプリ、アンドロイド/ iOSとjava Springバックエンドを持っているとしましょう。モバイル接続を考えると、ネットワーク往復の回数は制限されなければなりません。理想的には、1画面につき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
会話記録は、多くの会話のちょうどヘッダを一覧画面は、実際のメッセージテーブルを照会することなく、最新のコンテンツを表示できるようにして行われた最新のメッセージ(また、メッセージに関するいくつかの情報が含まれていますカウント)。このような
理想的に存在することになるのコール:
問題A)新しいメッセージをポジショニングするとき が、これは新しいメッセージ・リソースを作成しますが、その次のとおりです。ここで
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
はしかし、問題となっています対応する「会話」レコードに対する(非同期/メッセージング)更新の副作用でもあります。したがって、typeAの新しいリソースをPOSTすると、typeBの別のリソースのPATCHingがトリガーされます。それは大丈夫ですか?
問題B) 最初のメッセージを送信するとき、まだ会話レコードはありません。どちらも作成する必要があります。最初に「会話」レコード、次に新しい会話ID(理想的にはトランザクション内)を含む「メッセージ」レコードです。 2つのAPI呼び出しを行うことなく安心してやり遂げるには?残りの
- 数が
- 重複デシベルフィールドを呼び出し、リソース指向API
の
何らかの人為的な新しいリソースや 'バッチ/バンドル/集約'操作/エンドポイントを追加しなくても本当に可能ですか?任意の推奨は、ありがとう!