Toàn bộ điểm Web API là dịch vụ RESTful không trạng thái. Sẽ không bao giờ là một ví dụ của nó nếu bạn làm đúng. Tôi nhận ra câu hỏi này là cũ và bạn có thể cá nhân đã học được điều này, nhưng câu trả lời không phải là nhiều cho bạn vì nó là một câu trả lời cho một câu hỏi thường gặp.
Lưu ý rằng khi nói về API Web, thường xuyên hơn không, mọi người đang nói về ApiControllers và không phải là "Bộ điều khiển" MVC cơ bản có tuyến đường và biến chúng thành Chế độ xem.
Vì vậy, trong dự án của bạn, bạn có thể có một số "Bộ điều khiển" làm một số logic xem cơ bản, nhưng không có logic nghiệp vụ. Đừng nhầm lẫn điều đó với Lớp dịch vụ của bạn, đây là một trình bao bọc cho truy cập Logic và Kinh doanh của bạn.
Tôi và nhiều người cho rằng ApiControllers không nên được trộn lẫn với ứng dụng MVC của bạn. Hãy nhớ rằng MVC không kết hợp tốt với Web API. Như Filip W nói:
Nhiều khái niệm được sử dụng bởi API Web và MVC, mặc dù tương tự tại cái nhìn đầu tiên, thực sự không tương thích. Ví dụ, thuộc tính Web API thuộc tính System.Web.Http.Filters.Filter và MVC là System.Web.Mvc.Filter - và chúng không thể hoán đổi cho nhau.
câu trả lời linh hoạt Hầu hết
Vì vậy, những gì bạn làm là tạo một subdomain tên api.YourWebsite.com, và xây dựng một dự án ApiController Web API mới có. Dự án Web API đó KHÔNG làm nhiều hơn việc khởi tạo và trưng ra Logic nghiệp vụ thông qua ApiControllers và Dependency Injection.
Alternative 1
Kiến trúc hướng dịch vụ là tất cả về việc tái sử dụng. Nếu bạn muốn giữ các ứng dụng của bạn KHÔ, bạn chắc chắn sẽ rơi vào SOA. Mặc dù, mọi tình huống đều khác nhau. Nếu bạn sẽ không bao giờ sử dụng cùng một logic kinh doanh trong trang web này trong bất kỳ ứng dụng nào khác (máy tính để bàn, android, máy tính bảng, ewPhones, v.v.), thì bạn có một phương pháp thay thế.
Tạo Busines Lớp logic của bạn dưới dạng một Dự án khác và truy cập trực tiếp từ ứng dụng web của bạn. Khi bộ điều khiển Javascript của bạn (Angular/Razor?) Thực hiện cuộc gọi, họ có thể gọi vào ViewModels và/hoặc Codebehind của bạn hoặc một cái gì đó tương tự, có thể khởi tạo Business Logic và truy cập trực tiếp nó. Không cần dịch vụ nếu mọi thứ ở ngay đó và sẽ không được sử dụng lại.
Alternative 2
Đi trước và đặt ApiControllers Web API của bạn trong cùng một dự án. Tuy nhiên, hãy chắc chắn bạn tách chúng thành các thư mục khác nhau từ bộ điều khiển MVC của bạn "." Tuy nhiên, khi Bộ điều khiển Javascript của bạn thực hiện cuộc gọi, họ sẽ thực hiện cuộc gọi Định tuyến đến trang web của bạn để trả lại không trạng thái. Không trộn các ApiControllers không trạng thái với các ViewModels của bạn và mã MVC khác.
Nhược điểm của điều này là thiếu SOC.Bây giờ bạn đã có dịch vụ Layer và UI-Layer hỗn hợp, và UI-Layer của bạn buộc phải truy cập vào Business Logic Layer (DLL) của bạn. Có gì sai với điều đó nếu Phương án 1 đã làm điều đó?
Vâng, có gì sai là Phương án 1 là một ứng dụng nhỏ không có chỗ cho tăng trưởng. Bất kỳ điều gì khác (Kế hoạch ban đầu, hoặc Phương án 2 ở đây) nên có giao diện người dùng không có đầu mối nào mà Logic nghiệp vụ (hoặc Persistence) thậm chí tồn tại. Họ nên đi về doodies của họ unawares của thế giới phụ trợ.
Tôi sẽ chọn tùy chọn đơn giản nhất, với tùy chọn 2 dường như đơn giản hơn trong hai tùy chọn được trình bày. – Kane