Web API の要点は、ステートレスな RESTful サービスになることです。あなたがそれを正しく行っていれば、その例は決してありません。この質問は古いものであり、個人的にこれを学んだかもしれませんが、よくある質問への回答であるため、回答はそれほど多くありません.
Web API について話すとき、多くの場合、ルートを取得してビューに変換する基本的な MVC「コントローラー」ではなく、ApiController について話していることに注意してください。
したがって、プロジェクトには、いくつかの基本的なビュー ロジックを実行するが、ビジネス ロジックを実行しない「コントローラー」がいくつかある場合があります。これを、ビジネス ロジックおよび永続アクセスのラッパーであるサービス レイヤーと混同しないでください。
私と多くの人は、ApiControllers を MVC アプリケーションと混在させるべきではないと考えています。MVC は Web API とうまく組み合わせられないことに注意してください。フィリップ W が言うように:
Web API と MVC で使用される概念の多くは、一見似ていますが、実際には互換性がありません。たとえば、Web API 属性は System.Web.Http.Filters.Filter であり、MVC 属性は System.Web.Mvc.Filter であり、これらは交換可能ではありません。
最も柔軟な答え
そこで、api.YourWebsite.com という名前のサブドメインを作成し、そこに新しい Web API ApiController プロジェクトを構築します。その Web API プロジェクトは、ApiControllers と Dependency Injection を介してビジネス ロジックをインスタンス化して公開する以上のことを行うべきではありません。
代替案 1
サービス指向アーキテクチャは再利用性がすべてです。アプリケーションを DRY に保ちたい場合は、間違いなく SOA に移行する必要があります。とはいえ、すべての状況は異なります。この Web サイトの同じビジネス ロジックを他のアプリケーション (デスクトップ、Android、タブレット、ewPhones など) で使用することがない場合は、別の方法があります。
Busines Logic Layer を別のプロジェクトとして作成し、Web アプリから直接アクセスします。Javascript (Angular/Razor?) コントローラーが呼び出しを行うと、ViewModel や Codebehind などを呼び出すことができ、ビジネス ロジックをインスタンス化して直接アクセスできます。すべてがそこにあり、再利用されない場合、サービスは必要ありません。
代替案 2
Web API ApiControllers を同じプロジェクトに配置してください。ただし、MVC の「コントローラー」とは別のフォルダーに分けてください。それでも、Javascript コントローラーが呼び出しを行うときは、ステートレス リターンのために Web サイトへのルーティング呼び出しを行います。ステートレス ApiController を ViewModel やその他の MVC コードと混在させないでください。
これの欠点は、SOC の欠如です。これで、Service-Layer と UI-Layer が混在し、UI-Layer は Business Logic Layer (DLL) に強制的にアクセスするようになりました。オルタナティブ 1 がそれを行った場合、何が問題なのですか?
問題は、Alternative 1 が小さなアプリケーションであり、成長の余地がなかったことです。他のもの (元の計画、またはここでは代替案 2) には、ビジネス ロジック (または永続性) が存在することすらまったく知らない UI が必要です。彼らは、バックエンドの世界に気づかずに、自分のやっかいなことに取り組まなければなりません。