2017-11-29 3 views
0

私はComboBoxesを私のAngularJSウェブアプリケーションに埋めなければなりません。フロントエンドの場合、必要なデータはキーの値のペアのリストだけです。コンボボックスを埋めるためのWeb APIメソッド?

問題はバックエンドです:これらのリストを埋めるために、私は「リストの物」を提供する単一のWeb APIエンドポイントを生成しました。

ルートは{id}の値に応じ/api/list/{id}

あり、それは、キー、値の同じで... UsersAccountsBooksCarsのリストを返します。たとえば、Id = 1の場合、車のリストを返します。

これはComboBoxを満たすのに最適です。

だから私は大きなスイッチ私のコントローラのメソッドの中にどのような種類のリストを返す必要があるかを判断する。

フロントエンドは非常に便利ですが、これはバックエンドにとっては本当に汚いと感じています。異なるマジックナンバーで同じエンドポイントを呼び出すだけで、私は別のリストを取得します。

質問:このシナリオでは、よりクリーンな方法がありますか?

+0

IMO薄いコントローラを維持し、あなたが注入BigSwitchService(または何でもあなたがそれを呼びます)を作成コントローラ。すべてのロジックをサービスに入れてください。 apiデザインに関しては、最もクリーンなapiではないかもしれませんが、それで時間を大いに節約すれば、それを使うべきです –

答えて

1

これは通常、データタイプごとにコントローラで分割されます。 UserControllerAccountControllerなどです。次に、各コントローラの動作はListです。 必要に応じて、追加のアクションが各コントローラに追加され(作成/削除/ etc)、すべてがクリーンなままです。あなただけのパラメータとしてではなく、アドレスの一部としてマジックナンバーを送信しないようにコードを変更する必要がありますフロントエンドで :

  • /API/ユーザー /一覧/ {ID}
  • /API/アカウント /リスト/ {id}
+0

私はこれが彼の必要性をカバーするとは思わない。彼は別の番号で同じURLを望んでいます。少なくともこれは私が彼が書いたことから理解したものです。 **別のマジックナンバーで同じエンドポイントを呼び出すと、別のリストが表示されます。** – pitaridis

+0

@pitaridisマジックナンバーは必ずしも必要ではありません。代わりに、このような1つのエンドポイントにすべてのリストを集中させることをお勧めします。それをやろうとしたかったのですか、あるいはシャドードが言ったことをしますか? – SuperJMN

+0

1つのアクションにすべてを入れるのは良い考えではありません。それを複数のアクションに分割する方が良いです。 – pitaridis

0

属性ルーティングを使用して、IDを特定のアクションにマッピングできます。

ID 1との最初のアクション:

[Route("/api/list/1")] 

ID 2を持つ2番目のアクション:

[Route("/api/list/2")] 
関連する問題