私はサポート、複数(10Ksまで)IDに拡張する必要があることを、単一のIDのREST APIを持っています。基本的には代わりに、ネットワーク内の10Ksリクエストを送信するすべての関連IDに更新を実行します。
現在のエンドポイント:
@POST
@Path("{id}/update")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public ResponseVO updateBlockReason(@PathParam("id") int id, List<RequestVo> requestVo) {
一つの選択肢提案は、としてカンマ区切りの値であるstackexchangeの答えバイIDS
/回答/ {IDS}の使用GET
{IDは} 100のセミコロンで区切られたIDにまで含有することができます。IDSは、プログラムの回答のオブジェクトにanswer_idを探し見つけるに。
これは、上のケースで同様の回答を
http://our.api.com/Product/<id1>,<id2>
:ジェームズは、商品タグの後に来るものから選択することができ示唆したように、パラメータであります
しかし、それは私には厄介なようだとRequestVo
(あるすべてのIDに対して同じになり、現在で結構ですが、後でそのようなサポートが困難になります追加します)
私がRequestVO内でそれを追加するPath変数から変更する必要があると思われます
どの手段IdはJSONのキーになります、例えば
[{
"id" : "1",
"name": "myAttribute"
"toggle": true
},
{
"id" : "2",
"name": "mySecondAttribute"
"toggle": false
}
]
これは正しいアプローチであるか、私は何かが足りないのですか?
コメント\答えを事前にありがとうございます
現在のリクエストVO
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RequestVO {
private String name;
private boolean toggle;
// will add now private int id
}
私がしたい場合は私の関心は、10KsのIds私が代わりにIDを別々に送信するのでは重複要求VOする必要がありますため、同じ要求(名前など= DOA、トグル=真)で更新することも(要件の1)であります
私はパスが見つかりproduct/{id}/update
あなたがマッピングによって同様の動作を実現する可能性があるため、疑問@Put-request
にproduct/{id}
自分自身。READ、WRITE分化は、Request-マッピングにより、既に明示的です。また、安らかなURLで動詞を使用しているか否かは、自分自身のためのトピックです。
あなたは、複数のエンドポイントを使用したと仮定すると、これは次のようになります/products/{id}
。
あなたはバッチ/一括更新製品にしたいので、あなたがマップすることができ@Put-requests
に/products
RequestBodyで更新された製品のリストで、今。あなたが返す必要があり、これは多少、レスポンスを複雑にすることを、覚えておいてくださいHttp-207
リストの各要素に対してアップデートの正しい状態に答えるために。
私は、更新のための1つの論理エンドポイントが欲しいです
あなたは、このための論理的なサービスのメソッドを持っていますが、実際にエンドポイントすることはできません。あなたは既にの問題を言及した/{id}
一括更新のためのあなたのパスに。あなたは本当に、本当にする必要がある場合は、私が削除でしょう@Put
から-mapping /products/{id}
とリダイレクトに/products
更新内容は、単一の要素のリスト、または少しより洗練され、再び2 endpintsを意味するものMEDIATYPE(で区別さ、だろうどこが、単一のURLを)。
編集:私はちょうどVO-問題を理解するために起こります。あなたは、製品を更新していないが、それの一部は(名前RequestVOは私を誤解されました)。これは、のようなにおいが@Patch-mapping
製品の一部が更新されますどこ私には、。私はまだ使用しますので、/products
しかし、と@Patch-mapping
。
クライアントは完全に既存のリソースを交換する必要がある場合、彼らはPUTを使用することができます。彼らは部分更新をやっているときは、HTTP PATCHを使用することができます。
これは別の問題、使用が現れ@Post
IDが不明な場合にのみ、(通常は何かが作成され、IDが割り当てられます、アップデート用の前に@Put
、割り当てられたIDを再利用)のポストを使用することは技術的になんとかですが、理由のidempotece得策ではありません。