2017-09-15 4 views
0

Je mehr ich recherchiere über Microsoft framework on ODATA Ich neige dazu zu glauben, dass es nicht für die Unternehmensanwendung geeignet ist. Das Framework erwartet, dass die gesamte Datenbank als ViewModel direkt verfügbar gemacht wird, selbst für einfache Operationen wie Paginierung & Sortierung.Verwendet ODATA mit Microsoft Web API wirklich REST-Architektur?

Wir wären gezwungen, stableful-Mechanismus zu verwenden, um Seitenzahlen zu erhalten, die für den JavaScript-Client gerendert werden.

Oder verstehe ich Microsoft-Implementation von OData nicht richtig?

EDIT-1:

Ist ODATA V4 eine Stateful Architektur? Wie von Microsoft Muster Team gefördert. Ich sehe keinen einfachen Pfad der Migration von Asp.Net-Web-API (REST) ​​zu OData (Sounds STATEFUL) Architektur.

EDIT-2: Paging ist & Gruppierung Sortier Teil der eingehenden Anfrage von dem Client.

+0

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

+2

Warten Sie, blättert ein Teil der Anfrage nicht durch den Klienten? Abgesehen von dem Titel scheint dies eine Reihe von Aussagen von Ihrer Seite zu sein, haben Sie wirklich eine Frage? – Icepickle

+0

@DavidTansey, danke Die Antworten stammen aus dem Jahr 2010. – Abhijeet

Antwort

5

Kurz gesagt ist die MS Odata serverseitige Implementierung nicht Stateful und es kann als eine REST-Architektur betrachtet werden.

Wir würden stasteful Mechanismus anhalten Seitenzahlen zu erbringenden der JavaScript-Client

Sie bieten Paging Informationen in der Anfrage zu verwenden gezwungen. Zum Beispiel, wenn Sie wollte 10 Artikel von Seite 2 Sie die Top-10 nehmen und 10.

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

überspringen Wie Sie die Client/Anrufer gibt die Paging sehen können, gibt es keine Notwendigkeit für den Serverstatus verfolgen des Kunden.

Wenn Sie $count=true hinzufügen, wird die Gesamtzahl der Datensätze basierend auf dem übergebenen Filter in der Ergebnismenge zurückgegeben (im obigen Beispiel gibt es keinen Filter). Dadurch kann der Client die Anzahl der vorhandenen Seiten berechnen.


Der Rahmen erwartet, dass alle die Datenbank direkt als Ansichtsmodell ausgesetzt werden ...

auch nicht wahr. Sie können IQueryable<T> zurückgeben, wobei T Ihr Typ ist. T muss kein EF-Modell sein. Beispielsweise ist das Zurückgeben des folgenden von einer DbContext akzeptabel.

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

Um diesen Punkt illustrieren Sie auch eine hart codierte Liste von Objekten zurückkehren können, obwohl dies nicht sehr wahrscheinlich, dass in der Produktion sein könnte.

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

Es gibt viele Ressourcen auf allen Optionen für OData.Ich werde hier nicht alles einbeziehen, sonst könnte ich auch nur eine zweite Dokumentation erstellen.

+1

Auch eine Sache, um seine zustandslose Natur zu betonen: Paging von Seite 1 bis 2 kann dazu führen, dass ein Datensatz zweimal zu sehen. Wenn f.i. Ein neuer Datensatz wird dem Datensatz in der Zeit hinzugefügt, die für die Seite von 1 bis 2 erforderlich war. Unter der Annahme, dass der Datensatz der erste auf Seite 1 ist, wird der letzte Datensatz von Seite 1 auf Seite 2 verschoben. –

+0

@NielsV - Einverstanden, aber wenn dies passiert, hängt auch von jedem Filter ab, der gerade übergeben wird (was den hinzugefügten Datensatz möglicherweise ausschließt) und dem übergebenen Sortierausdruck. Dieses Konzept gilt für fast jedes staatenlose Programm. Ein Datensatz könnte mutiert oder sogar gelöscht werden, wenn er in der Sortierung anders erscheint oder im Filter enthalten ist, der die erwarteten Datensätze ändert, die in einer Paging-Operation angezeigt werden. – Igor

+0

Betrachte die aktuelle Frage zur Abstimmung ;-) – Abhijeet

Verwandte Themen