2017-11-20 3 views
3

私は、SpringでAPIを設定しました。ここで、クライアントは受け取るオブジェクトのIDを指定できます。オブジェクトのJSONリスト(@ResponseBodyアノテーションを使用)を返します。安らかなAPI - 取得、配置、投稿、削除がどれくらい近い必要がありますか?

しかし、リクエストは長いリストになる可能性があるので、私はPOSTとして設定しました。ProductRequestというオブジェクト(@RequestBodyアノテーションを使用)として受信しました。これは、公式のREST API標準に準拠していないようですが、新しいオブジェクトを作成するためのポストが正式であるため、この方法で実装するほうが良いでしょう.UIDの束でURLを乱雑にしないからです。また、出力をカスタマイズする追加パラメータを指定することもできます。

私の質問は、これが有効なRESTfulデザインと考えられるかどうかです。 Postはオブジェクトを作成するために使用されていないため、安心して使用することに厳密には準拠していません。思考?

+0

「公式REST API標準」とはどういう意味ですか? – jschnasse

+0

可能であれば、独自のHTTP動詞を指定できます(例:リスト。しかし、これは常に最善の選択ではありません。ここでの短い議論が見つかりました(https://www.safaribooksonline.com/library/view/restful-web-services/9780596809140/ch01s12.html) – jschnasse

答えて

1

これは簡単なGETリクエストです。

@GetMapping(path = "/your-url") 
public List<Object> method(@RequestParam(name="ids") List<Long> objectIds) { 
} 

あなたのリストは、単純なJavaリストと同じように表示されます。

/api?ids=1,2,3

+0

質問:あなたのリストのIDが数百から数千 - 桁の識別子? URL文字列に許容される最大オーバーフローはありませんか?私はこれに前に出会った。また、それを投稿するのはなぜ悪いことですか?最終的には、APIがこの場合どのように機能するかだけです。 –

+1

私は、このような種類のリクエストはクライアント側でも改ページする必要があり、1回のリクエストで「固定」量以上のオブジェクトをリクエストしないと考えています。 しかし、それができない場合、私は思うHTTPメソッドを使用することはできません。 –

1

あなたは非常によく、リソース(複数可)を "取得" するためのHTTP POSTを行うことができます。そうすることのいくつかの非常に有効な例がありますが、

  1. GraphQL - 私たちがやっているすべては私たちが

  2. を好む形式でいくつかのデータを「GET」するrequestbodyにいくつかのクエリ(投稿)を送信しています特定のデータを取得するためにユーザー名とパスワードで認証する必要があると仮定すると、GET要求でヘッダーで送信するか、データを取得するPOSTを行います。

+0

私が知っているように、 'query 'パラメータを指定することによって、好きな形式でデータを取得するために' GET'メソッドを使うべきです。私たちがリソース上で実行される操作を設定する必要がある場合は、POSTが好ましいです。 – Andrew

+0

@AndrewTobilkoコメントをいただきありがとうございます。複数のリソースが関与している場合でも、それはまだ「GET」操作ですが、「副作用」はありませんhttpメソッドはPOSTです –

1

URL文字列のためのオーバーフロー最大許容できませんでしたか?

実際には、URIの長さに制限はありません。しかし、実際には、あなたはいくつかの遭遇することができます。

2.5節で説明したようにRFC7230(強調鉱山)によれば、

HTTPは、リクエストラインの長さに所定の限界を置きません。実装されているものより長いメソッドを受け取ったサーバは、501 (Not Implemented)ステータスコードで応答すべきである(SHOULD)。解析しようとするURIよりも長い要求対象を受け取ったサーバは、414 (URI Too Long)ステータスコードで応答しなければならない(MUST)。

実際には、要求行の長さに関するさまざまなアドホック制限があります。すべてのHTTP送信者と受信者が少なくとも8000オクテットの要求ライン長をサポートすることが推奨されます。

私たちが問題を処理している間は、リクエストラインに頼ることはできません。

これは有効なRESTfulデザインと考えることができますか?上記の制限に起因し

POSTを使用して、有効な回避策あります。

this Wikipedia articleにより述べたように、

これらの問題のための共通の問題を回避するには、POST代わりにGETを使用し、リクエストボディのパラメータを記憶することです。要求本体の長さ制限は、通常、URL長の長さ制限よりもはるかに長くなります。

お気軽にお気軽にお問い合わせください。common non-standard headerX-Http-Method-Overrideがあります。私は春のヘッダを処理するかどうかを確認していない

X-Http-Method-Override: GET 

:それはヘッダに指定されたメソッドを持つ要求で指定されたメソッドをオーバーライドするWebアプリケーションを要求します。しかし、それは同様の仕事をするように思われるHiddenHttpMethodFilterフィルタを持っています。

関連する問題