REST API + 웹 페이지 사용을위한 ASP.NET MVC 및 WCF


14

프로그래밍 방식의 서비스 지향적 사용과 인간의 상호 작용에 대한 논의는 분명하다고 생각합니다.

그러나 프로그래밍 API와 동일한 API로 연결된 데이터를 사용하는 웹 사이트를 모두 사용하는 응용 프로그램을 만들려면 ASP.NET 만 사용하는 것이 유리합니까?

동일한 응용 프로그램에서 ASP.NET과 WCF를 통합하는 것이 얼마나 쉬운가요?

답변:


11

ASP.NET/MVC와 WCF를 모두 활용하는 하나의 응용 프로그램을 작성하는 한 좋지 않습니다. WebAPI는 개선 된 문제 일지 모르지만 동일한 앱에서 WCF와 MVC를 사용하는 것으로 익숙한 한 프로젝트에서 동일한 개념을 나타내는 두 가지 모델 세트를 유지했습니다 .WCF 코드와 MVC 암호. 두 모델 사이에서 사물을 번역하기 위해 작성해야하는 모든 맵퍼를 상상할 수 있습니다. 피할 수 있거나 피해야 할 코드가 많이있었습니다.

이것이 발생한 이유 중 하나는 WCF 요청 및 응답 객체에 [DataContract]로 주석을 달고 속성에 [DataMember]로 주석을 달아야하고 MVC에서는이를 요구하지 않기 때문입니다. 한편 관용적 MVC는 WCF DataContracts와 다른 목표를 가진 ViewModel을 원할 것입니다. 물론 두 개의 전체 도메인 개체 집합을 사용하면 WCF 및 MVC 충돌보다 Conway의 법칙 과 더 관련이있을 수 있지만 WCF와 MVC는 출력 및 입력에 따라 목표와 요구 사항이 다릅니다.

개인적으로, 특히 여러 클라이언트를 원할 때 간단하지만 강력한 서비스 지향 백엔드 API를 개발하는 데 부분적으로 도움이됩니다. BackboneJS , KnockoutJS 등을 사용하여 응용 프로그램 코드를 작성 하면 개발 환경 이 향상되므로 우수한 JavaScript MVVM 및 micro-MVC 프레임 워크의 출현으로 자연스러운 선택이 될 것입니다. 그런 다음 선택한 마이크로 MVC에서 백엔드를 사용하여 웹 앱 또는 모바일 클라이언트를 구축 할 수 있으며 파트너는 동일한 API를 원격으로 사용할 수도 있습니다.

암시

WebAPI 또는 서비스 스택 이 백엔드 API를 빌드하기에 적합한 후보 일 수 있습니다. 지난 몇 개월 동안 서비스 스택을 사용해 왔으며 WCF를 대체 할 수있는 훌륭한 서비스 스택 인 것으로 확인되었습니다. 현재 내 블로그의 서비스 스택에 대한 자습서 시리즈를 작성 중 입니다.

그룹 유지 관리 서비스 스택은 프레임 워크를 사용하여 예제 응용 프로그램 을 게시하여 클론과 같은 StackOverflow를 개발했습니다.이 패턴은 특히 매력적이라고 ​​생각하는 개발 패턴을 보여줍니다. 여기에는 MVC 웹 사이트, 모바일 앱 또는 다른 어떤 것이라도 쉽게 소비 할 수있는 간단한 모델 기반 서비스 백엔드가 포함됩니다. ServiceStack의 설계 목표는 클라이언트와 서버 사이의 연결을 줄여야하는 패턴을 분명히 장려합니다. GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm)적은 수의 메소드를 선호하는 것과 같은 호출로 chatty API를 피하는 것이 좋습니다 . 다음과 같이 서비스 스택에서 동일한 것을 구현할 수 있습니다.

[Route("/customers", "GET"]
[Route("/customers/search/{SearchTerm}", "GET"]
[Route("/customers/region/{Region}", "GET"]
[Route("/customers/region/{Region}/search/{SearchTerm}", "GET"]
public class Customers 
{
    public int? RegionId { get; set; }
    public string SearchTerm { get; set; }
}

public class CustomersService : Service
{
    public object Get(Customers request) {
        // handle request
        return new CustomersResponse();
    }
}

이점은, 내 눈에, 대신 많은 별도의 방법을 많이 이상에서 비즈니스 로직의 확산을 필요로한다는 것입니다 GetCustomersInRegionWithSearchTerm(int regionId, string searchTerm), GetCustomersInRegion(int regionId), GetCustomersWithSearchTerm(string searchTerm), GetCustomers(), 그것은 한 곳에서 전부입니다. 이것은 유지 보수가 쉬운 코드로 이어질 것입니다.

우연히도 Stack Exchange는 원래 서비스 스택 작성자를 고용했습니다 . 그는 서비스 스택 프로젝트에 계속 적극적으로 참여하고 있습니다.

특히 특정 메시지 큐를 좋아합니다. WCF는이를 허용하지만 WebAPI는 그렇지 않습니다. ServiceStack은 MQ를 통해 동일한 웹 서비스를 호출 할 수 있도록합니다. 이에 대한 자세한 내용은 Redis MQ 호스트 (github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis)를 참조하십시오.


참고 : ServiceStack은 MQ를 통해 동일한 웹 서비스를 호출 할 수 있도록합니다. github.com/ServiceStack/ServiceStack/wiki/Messaging-and-redis
mythz

@mythz 감사합니다! 나는 몰랐다.
Kyle Hodgson

그러나 mvc4가 웹 API 경로를 가고있는 것처럼 보입니다 ... '공식적으로 후원 된'프레임 워크로 만들지 않습니까?
Xster

지난 2 년 동안 "공식 스폰서 프레임 워크"(WCF pre WebAPI)와 씨름 한 후에는 더 이상 내가 선택한 기준에 포함되지 않습니다. WebAPI가 좋거나 나쁘다는 것은 아닙니다. 아직 시도하지 않았습니다. ServiceStack이 내 문제를 해결하고 싶습니다.
Kyle Hodgson

3
여기서 명백한 것은 아니지만 WCF 서비스의 ViewModel 및 응답 객체는 완전히 별개의 것입니다. ViewModel은 데이터의 하위 집합이거나 서로 다른 소스의 데이터 조각 일 수 있습니다. ViewModels에 대해 다른 객체 집합을 갖는 것은 데이터가 (WCF 또는 기타) 중요하지 않은 MVC에 정확히 필요한 것입니다. 또한 X.Name = Y.Name 상용구 코드를 모두 저장하기 위해 객체 유형 간 매핑을위한 Automapper가 있습니다.
ozz

4

@tzerb 는 IMO에 올바르게 답변했지만 해당 답변을 연장하고 싶었습니다. 현재 베타 단계에 있고 OSS 프로젝트 인 ASP.NET 웹 API는 가장 가까운 프레임 워크입니다.

제품에 대한 간단한 설명은 다음과 같습니다 ( ASP.NET 웹 API 페이지 에서 인용 ).

ASP.NET 웹 API는 브라우저 및 모바일 장치를 포함하여 광범위한 클라이언트에 도달하는 HTTP 서비스를 쉽게 구축 할 수있는 프레임 워크입니다. ASP.NET Web API는 .NET Framework에서 RESTful 응용 프로그램을 구축하기위한 이상적인 플랫폼입니다.

웹 API를 소비하는 데 사용할 수있는 클라이언트 응용 프로그램은 반드시 ASP.NET 응용 프로그램 일 필요는 없습니다. JavaScript를 사용하여 정적 HTML 페이지로 API를 사용할 수 있습니다. jQuery와 같은 유용한 JavaScript 라이브러리를 사용하면이 작업을 쉽게 수행 할 수 있습니다.

반면에 ASP.NET 응용 프로그램의 서버 사이트에서 API를 사용할 수 있습니다. 웹 API 프로젝트에는 HTTP 서비스를 쉽게 사용할 수있는 HttpClient라는 새로운 HTTP .NET 클라이언트 API도 도입되었습니다.

일반적으로 다음은 시작할 수있는 유용한 리소스입니다.

ASP.NET 웹 API 시작하기-자습서, 비디오, 샘플

이 프로젝트는 아직 베타 단계에 있습니다. Henrik F Nielsen 블로그 를 팔로우하여 최신 미공개 업데이트에 대한 정보를 프로젝트에 게시하는 것이 좋습니다 . 프로젝트의 소스 코드와 ASP.NET 웹 스택 프로젝트 의 개발 흐름을 확인할 수 있습니다 .


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.