Was braucht Odata, wenn ich JSON habe?

23

Ich versuche zu verstehen, worum es bei Odata geht und wann es Sinn macht. Derzeit verwende ich ASP.NET und den MVC / WebApi-Controller, um Objekte in JSON zu serialisieren / zu deserialisieren und Javascript etwas damit zu tun.

Nach allem, was ich sagen kann, besteht der Vorteil von OData darin, direkt von der URL abfragen zu können ... Aber da ich den Client- und Server-Code schreibe, besteht keine Notwendigkeit dafür.

Würde jemand jemals die Ergebnisse einer ODaya-Abfrage in Javascript analysieren?

Vielleicht geht es bei OData mehr darum, einen allgemeinen Endpunkt für ALLE Clients bereitzustellen, um detaillierte Informationen aus einer Abfrage zu erhalten, die JSON nicht bereitstellt? Wenn ich also ein Datenanbieter wäre, würde ich annehmen, dass Odata genau für diese Zwecke bestimmt ist.

Helfen Sie mir, den Zweck und die Verwendung von REST / JSON / ODATA zu verstehen.

Punkouter
quelle
2
Zur Erleichterung sind Sie möglicherweise auch an Linked Data , der Linked Data Platform , SPARQL und dem Data Catalog Vocabulary interessiert . Bei allen handelt es sich um verschiedene Dinge, die unterschiedlichen Zwecken dienen und mit JSON kombiniert werden können , z. B. das JSON-Format für SPARQL 1.1-Abfrageergebnisse und natürlich mit REST .
Trylks

Antworten:

42

JSON ist nur ein auf JavaScript basierendes Datenaustauschformat.

REST ist ein Architekturstil, während OData eine spezielle Implementierung von REST zum Generieren und Konsumieren von Daten ist, die zwei Formate unterstützt, AtomPub und JSON.

Der Unterschied zwischen JSON mit einfachem REST und OData sind die Optionen in OData für die Datenbearbeitung. Wenn wir beispielsweise Daten mit dem OData-Protokoll abfragen, können wir die folgenden Optionen in der URI angeben.

  • $ orderby
  • $ top
  • $ überspringen
  • $ filter
  • $ format
  • $ select

Wir können Projektionen durchführen, Ressourcen verknüpfen usw. Alle diese Optionen sind sofort verfügbar. Stellen Sie sich nun vor, wir müssten alle diese Funktionen in unserem eigenen REST-Service bereitstellen.

  • Implementiere sie alle
  • Erstellen Sie eigene Konventionen / Stichwörter für verschiedene Operationen

Es ist nicht nur viel Arbeit, sondern führt auch zu Inkonsistenzen und schafft eine Lernkurve für unsere Datenkonsumenten.

Sajad Deyargaroo
quelle
5

Die JSON- oder JavaScript-Objektnotation ist lediglich ein Format oder ein Standard für Daten. Es handelt sich um ein vereinbartes Format für die Übermittlung eines Anmeldenamens ODER von Daten, die von einem REST-Service verwendet werden müssen.

Siehe diesen Teil: http://en.wikipedia.org/wiki/JSON

Obwohl JSON ursprünglich aus der JavaScript-Skriptsprache abgeleitet wurde, ist es ein sprachunabhängiges Datenformat. Code zum Parsen und Generieren von JSON-Daten ist in einer Vielzahl von Programmiersprachen verfügbar.

Es ist kein Teil einer bestimmten Programmiersprache, daher können verschiedene Systeme Daten sehr leicht weitergeben, wenn sie wissen, dass sie JSON verwenden.

Bei REST handelt es sich lediglich um einen Architekturstil, der für Webdienste verwendet wird.

Siehe diesen Teil: http://en.wikipedia.org/wiki/Representational_state_transfer

Eine Möglichkeit, darüber nachzudenken, besteht darin, einen Webdienst zu schreiben, mit dem viele verschiedene Computer kommunizieren und Informationen austauschen können. Sie können Ihren Webdienst so schreiben, dass er Daten über die URL akzeptiert

 http://www.myservice.com/specialRESTService?name=punkouter

Die Antwort könnte ein JSON-Objekt sein, das signalisiert, dass Ihre Daten empfangen wurden.

{
    "name": "punkouter",
    "status": "service downloaded your data",
}

Ich hatte noch nie von OData gehört und habe es gegoogelt:

OData basiert auf dem AtomPub-Protokoll und JSON, wobei die Atom-Struktur der Umschlag ist, der die von jeder OData-Anforderung zurückgegebenen Daten enthält. Eine OData-Anforderung verwendet für alle Anforderungen das REST-Modell. Jeder REST-Befehl ist eine POST-, GET-, PUT-, PATCH- oder DELETE-HTTP-Anforderung (Zuordnung zu CRUD), deren Einzelheiten in der URL angegeben sind.

GET: Ruft eine Sammlung von Entitäten (als Feed-Dokument) oder eine einzelne Entität (als Eintrittsdokument) ab.

POST: Erstellt eine neue Entität aus einem Erfassungsdokument.

PUT: Aktualisieren Sie eine vorhandene Entität mit einem Erfassungsdokument.

PATCH: Aktualisieren Sie eine vorhandene Entität mit einem Teilerfassungsdokument.

LÖSCHEN: Eine Entität entfernen.

Klingt so, als ob OData etwas ist, das eine Vanille-REST-Architektur erweitert. Aber es sieht so aus, als ob es Ihnen ein paar zusätzliche Dinge bieten kann, die Sie zum Laufen bringen, anstatt Dinge in C # oder einer anderen Sprache von Grund auf neu schreiben zu müssen.

Wenn Sie sich für die Verwendung von OData engagieren, würden Sie weiterhin JSON verwenden, jedoch innerhalb des OData-Frameworks / Standards von Microsoft et al.

Würde jemals jemand die Ergebnisse einer OData-Abfrage in Javascript analysieren?

Ja, da (wie es klingt) es JSON verwendet. Es wäre völlig natürlich, JS zu verwenden.

Vielleicht geht es bei OData mehr darum, einen allgemeinen Endpunkt für ALLE Clients bereitzustellen, um detaillierte Informationen aus einer Abfrage zu erhalten, die JSON nicht bereitstellt? Wenn ich also ein Datenanbieter wäre, würde ich annehmen, dass Odata genau dafür gedacht ist.

Odata würde einen REST-Dienst bereitstellen, aber mit einigen zusätzlichen Standarddiensten zusätzlich zu einem einfachen "generischen" REST-Dienst-Endpunkt. Kunden ist es egal, ob Sie OData verwenden oder Ihren eigenen C # -Dienst so lange rollen als die Antworten in einem vereinbarten Format (wie JSON) waren. Für Ihre Arbeit möchten sie jedoch möglicherweise OData verwenden, da es viele "out-of-the-box" -Funktionen bietet.

Erik
quelle
Arbeit ist mir egal. Ich wollte nur wissen, wofür Odata gedacht ist. JSON ist nur eine Möglichkeit, Daten darzustellen. Und ODATA auch. Aber ich denke, die Frage, die ich habe, ist, was ein Szenario ist Wobei die Verwendung von REST und die Rückgabe von JSON nicht ausreichen. Und die Verwendung von ODATA wäre ein Vorteil?
Punkouter
nein nein, OData ist eine RESTful-Service-Architektur ... die JSON zur Darstellung von Daten verwendet. Sie würden nichts gewinnen , indem sie mit OData Bibliotheken / Standards .. nichts, was sich technisch nicht geschrieben werden konnte .. aber OData verwenden können Sie Zeit sparen , wenn Sie bauen Dinge mit ihm .. wie die Dinge selbst zu schreiben Gegensatz
Erik
json? Aber sieht es für mich so aus, als ob die OData XML zurückliefern ?? Oder ist es beides? Ich bin verwirrt.
Punkouter
Über Ihren Link "OData unterstützt zwei Formate für die Darstellung der bereitgestellten Ressourcen (Sammlungen, Einträge, Links usw.): das XML-basierte Atom-Format und das JSON-Format."
Erik
2

Für die "Warum" -Frage gibt es im Buch RESTful Web APIs eine wirklich gute Definition - im Wesentlichen implementiert OData ein Sammlungsmuster, wobei eine Sammlung eine Ressource ist, die eine Liste von Ressourcen über Links bereitstellt.

Plesiosaurier
quelle
2

OData ist eine spezifische Implementierung des RESTful-Service mit einem Standard für die Schnittstelle. Der Vorteil besteht darin, dass Sie die API Ihres Produkts verfügbar machen und sagen, dass sie dem OData-Standard entspricht. Benutzer, die bereits mit OData vertraut sind, können sie problemlos verwenden, ohne viel Zeit mit dem Lesen der API-Dokumentation zu verbringen.

Nachteil: Während OData die zugrunde liegende Datenbank hervorragend verfügbar macht, enthält die Spezifikation keine Unterstützung für Transaktionen und kann nicht in Anwendungen verwendet werden, in denen ein RESTful-Service sowohl als DB-Schnittstelle als auch als Transaktionsschnittstelle dienen kann.

user3808122
quelle