多分それは簡単な状況ですが、それは私にとっては混乱しており、正しい方法で対処する方法が必要です。APIコントローラと基礎をなすサービス - 引数の検証の責任
それは、単純なモデルはとして休耕であることを確認するには、次の
User * - * Project
(ユーザーが多くのプロジェクトに割り当てられ、プロジェクトがに割り当てられた多くのユーザーを持っています)。
私は特定のプロジェクトからユーザを割り当て、解雇のために、残りのコントローラを作成しました:
…\Api\v1\Projects\{projectId}\users\{userId}
2つのHTTPアクションが許可されています。
- POSTプロジェクトに既存のユーザーを割り当てるアクションと
- がにDELETEユーザーをプロジェクトから退ける。 (それが正しい解決策であるかどうかはわかりませんが、それは私には役立ちます)。
APIコントローラは、これらの操作を実行するためにサービスレイヤーを使用します。サービスインターフェイスは次のとおりです。
void projectService.assignUser(int projectId, int userId)
void projectService.dismissUser(int projectId, int userId)
サービスは、これらの操作を実行するためにdbContextを使用します。
質問1:projectIdとuserIdが正しいかどうかをチェックする責任はどの要素にありますか? IMHO再利用できるので、このロジックをサービスレイヤに配置する方がよいでしょう。
質問2:projectIdとuseridが正しくない場合(project/userが存在しない、または割り当てが許可されていないなど)、これらのメソッドは何を返すべきですか?
私の最初の考えはnull値を返すことでしたが、それはあまり意味がないと思います。主に、enitiyIdが正しくない場合、サービス内の同様のメソッドがnullを返すためです。例: projectService.getProject(projectId) - プロジェクトが存在しない場合はnullを返します。
2番目はboolを返すことでした。 Falseは少なくとも1つの引数が正しくない
3番目の考えは、メッセージとともにArgumentExceptionをスローすることでした。それは良いようですが、それは例外をキャッチするために、APIのコントローラになります。
あなたはHTTPステータスコードは、上のベースのREST APIをコントローラから復帰するためにどの方法を把握しますBusinessLogicStatus? 404、403、409、500など? – Vinod
これは多少異なる質問ですが、ここでいくつかの例を見ることができます:http://stackoverflow.com/questions/10655350/returning-http-status-code-from-web-api-controller – FailedUnitTest
もちろん、それはあなた次第です例えばStatus = Failureの場合、Status 500を返すことができます。 404と403のようなものは、通常、フレームワークによって処理されます。 – FailedUnitTest