0

のは、私たちは、クライアントが特定の種類のアイテムのリストを取得することができ、単純なAPIを持っていると仮定しましょう:ビジネスロジックとRESTful APIの設計

GET /items/foo 
    GET /items/bar 
    GET /items/blah 

応答が要求されたタイプのアイテムのリスト、各エントリであります一意のIDを持っています。 クライアントは通常、これらの項目をテーブル/グリッド/ etcに表示します。

クライアントでは、IDが&のタイプに基づいて、別のAPIでアイテムを固定/解除することができるように、クライアントでピニング機能を実装する必要があります。だから私は同僚と話して、どの項目が固定されているかどうかについてクライアントに知らせることができました。

オプションは、指定されたタイプのすべての固定されたアイテムのリストを返すために別のAPI GET /pinning/{type}を持つことでした。

もう1つの解決策は、同様のAPI GET /pinning/{type}を使用して、すべての固定項目のIDのリストを返すことでした。クライアントがそれを整理させてください。

最初の解決策が承認されました。彼らの主張は、バックエンドがビジネスロジックを担当し、クライアントがビジネスロジックに関与すべきではないため、クライアントはサーバーから受信したデータを表示するだけであるということでした。この議論は私のためにそれを販売していませんでした。私は、サーバーがこの場合、クライアントが追加のプレゼンテーションロジックを実行できるようにするデータを提供すべきだと考えています。

どのソリューションが優れていますか?または他の解決策は可能ですか?

答えて

1

サーバがItemIdsをGET /pinning/{type}に返すだけの場合、クライアントはUIに表示できるデータを得るために、GET /items/{itemId}のようなものを繰り返し呼び出す必要があります。これは、順番にサーバーの負荷を増加させるだけです。 idで十分であれば、おそらく提案された解決策を打ち破ることができます。クライアントとサーバーの両方が同じ傘の下にあるように見えるので(あなたの会社もAPIコンシューマーであるように)、決定するのに十分な情報があります。

多くのクライアントを持つパブリックAPIであったとしても、パフォーマンス上の理由から、itemIdsではなくページングされた方法でアイテムを返すルートを引き続きダウンします。

+0

はい。一般的には追加の呼び出しが必要になりますが、データの場合、特定のタイプのアイテムを取得するときには、最初にピン留めされたアイテムが優先されます。私はクライアントが初期の重要なフェッチを行うので、ピン留めされたアイテムが欠落する可能性は非常に低いと考えていました。私は今すぐ利用可能なデータを早めに最適化していると思っています。私はますます第二の解決策が好ましくない理由を見ています。 – anonymvs