WCF 데이터 서비스 (OData) 대 ASP.NET 웹 API? 하이퍼 미디어?


12

REST 서비스와 다양한 클라이언트 (Silverlight, iOS, Windows Phone 7 등)로 구성된 분산 응용 프로그램을 원합니다. WCF 데이터 서비스 (OData)를 사용하여 REST 서비스를 구현하기로 결정할 준비가되었지만 이제 MVC 4 웹 API에서 해당 결정에 의문을 제기했습니다.

내가 OData에 대해 좋아했던 것은 무료로 제공되는 URI 쿼리 및 하이퍼 미디어 기능이었습니다. 내가 싫어하는 것은 OData 페이로드의 자세한 내용입니다. 불필요하게 많은 캐릭터들이 전선을 통해옵니다.

웹 API에서 내가 좋아하는 점은 페이로드가 훨씬 간결하고 OData의 URI 쿼리 기능이 있지만 하이퍼 미디어가 부족한 것 같습니다 (최소한). 상사는 또한 "Microsoft의 강력한 기능이이를 뒷받침하고 OData가 관심을 끌지 못하고 있기 때문에"Web API를 추진하고 있습니다.

그래서 두 가지 질문이 있습니다.

1) 누구나 Web API 및 OData의 백업 / 추적에 대해 언급 할 수 있습니까?

2) 웹 API는 출시 시간에 따라 하이퍼 미디어를 기본적으로 지원할 것으로 예상됩니까, 아니면 고려해야 할 상용 구현 또는 예제가 있습니까?

감사!


2
질문 1에 대한 좋은 답변. 누구든지 내 두 번째 질문에 대한 통찰력이 있습니까?
Raymond Saltrelli

Kinda는 그것을 놓 쳤고 용어를 보았지만 기술적 의미에서 하이퍼 미디어가 무엇인지 잘 모르겠습니다. 링크가 있습니까?
Wyatt Barnett

2
기본적으로 REST 컨텍스트에서 하이퍼 미디어는 "게으른로드"를 의미합니다. 예를 들어, REST 서비스에 대한 요청이 다른 오브젝트에 대한 참조가있는 오브젝트를 리턴하는 경우 해당 참조는 전체 참조 오브젝트를 포함하는 대신 XML 문서에서 링크로 표시됩니다. 참조 된 객체에 대한 정보를 원하면 링크를 따라 가면됩니다. dret.net/lectures/ppos-spring11/reading/…
Raymond Saltrelli 19

1
REST와 관련된 하이퍼 미디어에 대한 또 다른 좋은 설명입니다. timelessrepo.com/haters-gonna-hateoas
Raymond Saltrelli

답변:


2

웹 API는 odata를 수행합니다. Scott Guthrie의 블로그 게시물을 참조하십시오 . 구체적으로 특별히:

쿼리 구성 : Web API를 사용하면 OData URL 규칙을 통해 쿼리를 쉽게 지원할 수 있습니다. 웹 API에서 IQueryable 유형을 반환하면 프레임 워크에서 OData 쿼리 지원을 자동으로 제공하므로 페이징 및 정렬을 쉽게 구현할 수 있습니다.

또한 많은 경우에 동일한 클래스가 기존 WCF 클래스 및 웹 API 클래스 일 수 있으며 상호 배타적이지 않다고 생각합니다.


2

웹 API는 http 프로토콜을보다 기본적으로 활용합니다. Odata는 많은 대기업들이 수용 한 공개 표준입니다. Odata와 관련된 경험과 최근에 Web API를 발견하고 조사를 한 경험 만 말할 수 있습니다.

OData는 실제 표준이기 때문에 멋지다. 데이터베이스를 쉽게 만들고 HTTP를 통해 노출 할 수 있습니다. 즉, 구성없이 테이블 구조를 탐색 할 수 있습니다 (느슨하게 말하십시오). 간단한 LINQ를 포함 할 수있는 URL을 통해 쿼리를 실행할 수도 있습니다.

/products/orders/[put some linq-ish query here]

이것은 틀림없이 좋거나 나쁘다. 인증은 표준이며 구축되었습니다.

웹 API는 내 관점에서 더 흥미 롭습니다. HTTP 기능 (오류 메시지 등)을 활용했으며 실제 RESTful 요청에 대해 "기본"입니다. 나는 그것을 너무 많이 연주하지 않았습니다. 그러나 나는 MVC와 웹 API가 언젠가 다시 "결혼"될지도 모른다는 일종의 "들었다"고 들었습니다.

내가 OData를 가지고 놀 때 Stored Proc를 만들고 엔티티 표면에 매핑하고 강력한 반환 유형을 구성 한 다음 URL 요청과 BANG에 연결하면 RESTful 요청이 입력 된 결과 저장 프로 시저에 매핑됩니다. 그것은 매우 간단했고, 내가 필요한 것을 정확히 얻을 수있었습니다.

결론적 으로 WCF API를 너무 자세하게 사용할 기회는 없었지만 REST에 대한 순수한 접근 방식이기 때문에 클라이언트 개발에 갈 길이라고 말하고 싶습니다. "똑바로"앞뒤로 전화를 걸고 "모델보기"를 검색하려는 경우보다 기본적인 상호 작용을 제공합니다.

반면에. 클라이언트 상호 작용을 기반으로 데이터에 대해 복잡한 (ish) 쿼리를 작성하고 쿼리 논리를 "빌드"하고이를 매개 변수로 전달하려는 경우 Odata가 작동 할 수 있습니다.

내가 보는 방법은 데이터를 구조적 형식 (테이블 / 관계 구조)으로 노출 한 다음 클라이언트에서 직접 쿼리하면 Odata가 가장 잘 작동하는 것입니다. 또한 "기타"가 데이터 (올바른 인증 등)에 액세스 할 수 있도록하는 것이 좋습니다. 이것이 OData 프로토콜을 준수하는 이유입니다.

URL (/ products / orders / 22)을 지시하고 "숨겨진"관리 코드 및 데이터 구조에서 복잡한 "결과 세트"를 작성하고 HTTP 응답 메시지의 이점을 얻을 수있는 RESTful 요청을 원하는 경우 웹 API가 아마도 가장 좋은 방법 일 것입니다 ..

다시 말하지만, 이것은 모두 연구와 장난감에서 비롯됩니다. 프로덕션 / 풀 블로우 앱 시나리오에서 구현하지 않았습니다. 나는 그들이 강점과 약점을 가지고 있다고 생각하며, 분명히 약간의 중복이 있습니다.


2

하이퍼 미디어 관점에서 볼 때 확실히 웹 API입니다. AtomPub를 기반으로하는 OData는 HTTP를 사용하여 데이터베이스를 노출하는 방법 일 뿐이며 사전 정의 된 상태 전송 (CRUD) 세트는 제한되어 있습니다. 반면, 하이퍼 미디어 서비스는 클라이언트에 맞게 조정 된 응용 프로그램과 같습니다. Web API를 사용하면 원하는 모든 링크를 포함시킬 수 있으며 OData 쿼리 구문을 사용할 수도 있습니다. 실제로 HTML을 기본 형식으로 사용하려는 경우 Microsoft 스택에서 최상의 하이퍼 미디어 솔루션은 ASP.NET MVC입니다.


2
Web API를 사용하여이를 구현하는 방법에 대한 온라인 예가 있습니까?
Raymond Saltrelli 2016 년


odata v3 ( odata.org/media/30002/OData.html#actions ) 에 조치를 추가하여이 의견을 계속지지 하십니까?
Chris DaMour
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.