ASP.NET MVC로 API 만들기 - 하나의 프로젝트 또는 두 개의 프로젝트에 모두 있습니까?


4

그래서 나는 다시 봤다. 애플리케이션에 액세스하기위한 API를 작성해야한다는 요구 사항. 모든 컨트롤러 동작이 API에서 다루는 것은 아닙니다 (어쩌면 50 %).

나는 동일한 프로젝트를 사용할 수 있으며 각 요청에 대한 http 헤더를 확인하고 필요에 따라 XML, JSON 또는 html로 응답 할 수있다 (레일과 비슷 함).

또는

새 ASP.NET MVC 응용 프로그램을 만듭니다 @ api.myapp.com를 배포하고 API 액세스를 위해 독점적으로 사용.

제가 작업의 99 %를 처리하는 첫 번째 옵션에 대한 기본 컨트롤러를 작성할 수 있다고 가정합니다. 첫 번째 옵션의 문제는 컨트롤러 동작의 1/2 이상 (그리고 결코 해결되지 않을 수도 있음)에 대해 API 기능을 필요로하지 않는다는 것입니다.

두 번째 옵션에는 컨트롤러가 중복되어 있지만 좋은 소식은 대부분/모두입니까? 내 컨트롤러 동작은 몇 줄의 코드 일뿐입니다. 일반적으로 :

Whatever whatever = new Whatever(....); 
repository.Save(whatever); 

어쨌든 스택 오버플로는 어떻게 생각합니까?

3

REST 서비스와 같은 것을 만들고 싶습니다. this post of Phil Haack을보십시오.
예, 같은 프로젝트에 넣을 수 있습니다. 그러나 MvcContrib의 영역을 사용하거나 API 및 웹 응용 프로그램 컨트롤러를 사용하여 SharpArchitecture에서 수행되는 어셈블리를 분리하는 것이 좋습니다. 컨트롤러에서 많은 코드를 복제하면

과 같은 일반 컨트롤러를 만들 수 있습니다. 이 도움이
public class ControllerBase<T, Service> : Controller 
where Service : IService<T> 
{ 
    public Service service { get; set; } 
    public ActionResult Save(int id) 
    { 
     var item = service.Get(id); 
     if (TryUpdateModel<T>(item)) 
     { 
      service.Save(item); 
      return View("Success"); 
     } 
     return View("Error", item); 
    } 
} 

희망. 나는 장기적으로 문제가 요구되는 2 개 개의 다른 프로젝트에서 동일한 코드를 넣어 생각


0

같은 프로젝트에 넣었을 것이라고 생각하지만 별도의 경로를 사용하여 구분합니다.

API: http://example.com/api/widget/list 
App: http://example.com/widget/list 

가능한 한 많은 코드를 재사용 할 수 있습니다. 예를 들어, 데이터 선택 및 기타 코드를 BLL로 밀어 넣으십시오. 동일한 프로젝트에 보관하면 클라이언트의 AJAX를 통해 API 코드를 더 쉽게 사용할 수 있습니다.


0

.

같은 프로젝트에 모두 넣습니다.

일반 vs API 요청간에 분리가 필요하면 별도의 경로를 사용할 수 있습니다.

다음 작업을 수행하는 개인 기능을 만들 수 있습니다. 공개 기능을 사용하여 HTML 또는 JSON/XML로 렌더링하기로 결정하십시오.