2017-09-15 3 views
0

Microsoft framework on ODATA에 대해 더 많이 연구할수록 엔터프라이즈 응용 프로그램에는 적합하지 않습니다. 프레임 워크는 모든 데이터베이스가 ViewModel로 직접 노출 될 것을 기대합니다. 심지어 페이지 매기기 & 정렬과 같은 간단한 작업의 경우에도 마찬가지입니다.ODATA는 Microsoft Web API를 사용하여 실제로 REST 아키텍처를 사용합니까?

우리는 자바 스크립트 클라이언트에 렌더링 된 페이지 번호를 유지하기 위해 stasteful 메커니즘을 사용해야 할 것입니다.

또는 OData의 Microsoft implmentation을 올바르게 이해하지 못합니까? EDIT-1

:

은 하나로, OData V4 상태 기반 아키텍처인가? Microsoft 패턴 팀에 의해 승격 됨. OData (Sounds STATEFUL) 아키텍처에 대한 Asp.Net 웹 API (REST)에서 마이그레이션의 쉬운 경로가 표시되지 않습니다.

편집-2 : 페이징 & 그룹 분류하는 클라이언트로부터 들어오는 요청의 일부이다.

+0

https://stackoverflow.com/questions/2458407/difference-between-odata-and-rest-web-services –

+2

잠깐, 클라이언트가 보낸 요청의 일부분을 페이징하지 않았습니까? 제목을 제외하고 이것은 귀하의 의견에 대한 일련의 진술처럼 보입니다. 정말로 질문이 있습니까? – Icepickle

+0

@DavidTansey 감사합니다 답변은 2010 년으로 거슬러 올라갑니다. – Abhijeet

답변

5

간단히 말해서 MS Odata 서버 측 구현은 이 아니며은 statefull이며 REST 아키텍처로 간주 될 수 있습니다.

우리는 당신이 요청 정보를 페이징 제공 자바 스크립트 클라이언트

에 렌더링 된 페이지 번호를 유지하기 위해 stasteful 메커니즘을 사용하도록 강요 될 것이다. 예를 들어, 2 페이지의 10 개 항목 클라이언트/호출자가 페이징을 지정합니다 볼 수 있듯이 서버가 상태를 추적 할 필요가 없다, 상위 10를 타고 10

odata-url/?$count=true&$top=10&$skip=10 

을 건너 뛸 것을 경우 원 클라이언트의

또한 추가하면 $count=true은 결과 집합에 포함 된 전달 된 필터를 기반으로 총 레코드 수를 반환합니다 (위 예제에서는 필터 없음). 이렇게하면 클라이언트가있는 페이지 수를 계산할 수 있습니다.


프레임 워크는 또한

사실이 아니다 ... 모든 데이터베이스가 직접 뷰 모델로 노출 될 것으로 기대하고있다. 귀하의 유형이 TIQueryable<T>을 반환 할 수 있습니다. T은 EF 모델 일 필요는 없습니다. 예를 들어 DbContext에서 다음을 반환하는 것은 허용됩니다.

public IQueryable<SomeEntity> Get() { 
    return dbContext.SomeEntities 
     .Where(x => optionalPreFiltereExpression) 
     .Select(x => new SomeDTO(){ 
      Prop1 = x.Prop1, 
      Collection1 = x.CollectionOfInterest, 
      // etc 
     }); 
} 

이 지점을 더 자세히 설명하기 위해 하드 코딩 된 개체 목록을 반환 할 수 있습니다 (제작시 그럴 가능성이 낮음).

public IQueryable<SomeEntity> Get() { 
    return new List<SomeDTO>(){ 
     new SomeDTO(){ 
      Prop1 = 5, 
      Prop2 = "Hi there" 
      // etc}, 
     new SomeDTO(){ 
      Prop1 = 6, 
      Prop2 = "Goodbye" 
      // etc} 
     }).AsQueryable(); 
} 

는 하나로, OData에 대한 모든 옵션에 대한 많은 자료가 있습니다.여기에 모든 것을 포함시키지 않을 것입니다. 그렇지 않으면 두 번째 문서 세트를 만들 수도 있습니다.

+1

또한 무국적 성격을 강조하는 한 가지 : 페이지 1에서 페이지 2로 페이징하면 레코드가 두 번 표시 될 수 있습니다. f.i. 사용자가 페이지 1에서 페이지 2로 페이지를 이동하는 데 걸린 시간에 데이터 세트에 새 레코드가 추가됩니다. 페이지 1의 첫 번째 레코드가 레코드라고 가정하면 페이지 1의 마지막 레코드는 페이지 2로 푸시됩니다. –

+0

@ NielsV - 동의하지만이 경우에는 현재 전달 된 모든 필터 (추가 된 레코드를 제외 할 수 있음)와 전달 된 정렬 식에 따라 달라집니다. 이 개념은 대부분의 모든 상태 비 저장 프로그램에 적용될 수 있습니다. 정렬에서 다른 것으로 나타나거나 페이징 작업에 표시된 예상 레코드를 변경하는 필터에 제외되거나 포함되는 레코드는 변경되거나 심지어 삭제 될 수 있습니다. – Igor

+0

투표 하시겠습니까 ?-) – Abhijeet