Frage

Dies ist ein auf einer Frage für eine Erklärung zu fragen Follow-up von REST .

Wie Sie aus den Kommentaren zu meiner Antwort zu sehen, haben wir ein kleines Argument mit Darrel Miller haben auf der besten Media-Darstellung der Ressourcen. Wir haben eine weitere E-Mail-Diskussion haben, die in dieser Frage geführt hat.

Der Hauptunterschied zwischen Darrel und mir Verständnis von REST ist, ob die semantische des Datenteil des REST-API ist.

Darrel glaubt (meine Interpretation seiner Worte :-)), dass die Semantik der Daten ist ein wesentlicher Bestandteil des REST-API und als solche, die medialen Repräsentation gewähltes soll es reflektieren. Somit sollte ein richtiger REST API wählen:

  • ein bekanntes Medium wie ATOME die Daten zu repräsentieren, so dass so viele Kunden nativ die semantischen der Ressource verstehen könnten;
  • ein App-spezifischer Medientyp wie application / vdn.mycomany.mymedia und erwartet, dass der Client diesen Medientyp zu verstehen, die Ressourcen Daten konsumieren zu können. Application / xml ist keine gute Ressourcendarstellung, da es nicht die semantischen in dem Medientyp darstellen wird, noch erfordert den Client mehr über die semantischen kennen.

I, auf der anderen Seite, glaube, dass der REST-API eine separate Schicht von der tatsächlichen Datendarstellung ist. Der Medientyp durch die API exponiert ist nur ein Behälter, der die Ressourcendaten zu übertragen. Die tatsächliche Semantik der Daten werden getrennt behandelt. Somit ist ein Client, der die Daten nicht verstehen, kann immer noch das REST-API verbrauchen. Application / xml ist eine wirklich gute Darstellung der Daten, da es enge Kopplung für Kunden ermöglicht, die das Schema verstehen, dennoch erlaubt noch Client, der nicht verstehen, das Schema einige grundlegende Bearbeitung der Ressourcen zu tun.

So stellt sich die Frage: : ist der Daten semantischen Teil der REST-API? Sollten wir nur Medientypen für Ressourcen Darstellung wählen, die tatsächlich auch die Semantik der Daten darstellen?

Ich würde appreaciate, wenn die Menschen in ihren Antworten ein paar Zitaten per Post, vorzugsweise aus dem Roy Menschen selbst. : -)

War es hilfreich?

Lösung

Lassen Sie uns am Anfang beginnen: Medientypen gibt es den Client mit einem Format bereitzustellen, kann es verwenden, um zu entscheiden, was als nächstes zu tun ist. Ohne eine HTML-Seite, hat der Browser keine Links zu gehen. Ohne HTML-Renderer, kann der Browser eine Seite nicht machen und weiß nicht, was zu tun ist.

Ohne einen Medientyp, hat der Kunde keine Ahnung, ob es in der Lage sein wird, etwas mit dem Byte-Stream zu tun. Tatsächlich, wenn ein Client die Header die Angabe application / xml empfängt, hat keine Kenntnis von dem, was jenseits bekommen einen XML-Parser zu tun.

So ist die Frage wirklich ist, sollte der Kunde in der Lage sein, eine Entscheidung über die HTTP-Nachricht basierte zu machen, ohne einen Blick in der Nachricht mit, oder sollte es in der Nachricht (oder noch schlimmer, analysiert die Nachricht zuerst) gehen und Peek wissen, was zu tun ist.

Der Mangel an Medientypen bedeutet, dass Ihr Kunde zusätzliche spähen Arbeit zu tun haben, oder noch schlimmer Prozess Körper das Unternehmen selbst, bevor sie eine Entscheidung treffen kann, sei es für die Wiedergabe oder für die Verarbeitung. Sie haben jetzt eine Menge individuelle Verhalten für jede Ihrer Formate hinzuzufügen, den Sie bearbeiten möchten, und Sie verlieren ein wenig Kopplung in den Prozess einzubeziehen.

Es ist auch ein http grundlegender Bedeutung, dass Vermittler sollten in der Lage, die Anforderungen ohne Inspektion des Körpers, und auch dort Anwendung / xml ist problematisch.

zu verarbeiten

Wenn Sie jetzt sagen, dass die Semantik der Medientypen oder teilweise nicht von der API ist ... Was macht die API?

Von einer Client-Perspektive gibt es keine API. Es gibt eine anfängliche Darstellung, dass der Kunde eine Entscheidung treffen können, was als nächstes zu tun ist. Der Medientyp ist in der Tat, wo der Kunde die Informationen bekommt es erfordert es die „API“, und als solche navigieren kann, ohne Darstellungen keine API sein.

Darüber hinaus sollte ein Client nur drei Bits des Wissens hat: ein Bootstrap-Verzeichnis, das HTTP-Protokoll und die Medientypen. Die erste ist nur eine URI und vermittelt nicht viel über den Standort eines represetnation weiterhin erforderlich. Der zweite hat schon sehr klare Semantik. Die dritte ist die, wo Sie die Kontrolle haben, wie es der Vertrag ist Sie mit Ihrem Kunden haben.

Das contraact sagt, dass, wenn Sie etwas tun wollen, wird die etwas Semantik haben. Einen Kunden hinzufügen möchten, senden application / vnd.acme.customer + xml / Kunden eine POST mit

Daher meine Antwort: stützt sich auf zwei Schritte, um eine REST-Architektur entwerfen: Ressourcenmodellierung (auf der konzeptionellen Ebene) und den Medientyp Gebäude. Alles andere und du bist wahrscheinlich, es falsch zu machen.

Andere Tipps

Ich sehe die Notwendigkeit nicht allzu pedantisch sein darüber. Eine Ressource kann mehrere Darstellungen exponieren; jede mit ihrer eigenen Semantik (und sogar mehr Dimensionen der Semantik zu diesen). Wenn eine Darstellung bietet nicht die durch einen bestimmten Anwendungsfall erforderlich Semantik, setzt ein, das tut.

  

So ein Client, der nicht der Fall ist   versteht die Daten, kann immer noch verbrauchen   das REST-API.

Ich bin mir nicht sicher, das ist ein guter Lackmustest für das, was tut oder nicht eine ordentliche Darstellung machen. Was gut ist, ein Client, der ein Dokument verbrauchen kann aber nicht verstehen, ist es gut genug, um etwas damit zu tun? Ich glaube, ich verstehe nicht, wie „grundlegende Verarbeitung von Ressourcen“ macht application / xml eine bessere Wahl als eine beliebige Klecks 1 und 0?

Da Sie nach Referenzen gefragt, hier ein Artikel von Roy auffängt, wo er „schlägt“, um eine Bitmap-Darstellung von sozialen Netzwerken Graphen . Ich kann sicherlich auf eine Maschine diese Bitmaps anzuzeigen, aber was nützt das, wenn ich nicht verstehen, die zugrunde liegende soziale Netzwerk Graph? Würde die Änderung der Darstellung der Anwendung / xml erlauben eine naive Client zusätzliche Bedeutung daraus zu extrahieren, die nicht in der Bitmap enthalten ist? Nein.

Schauen Sie sich diese von Dias von Mark Baker gesetzt mehr Erklärung für, warum application / xml den „selbstbeschreibende“ Zwang nicht erfüllt. Sie können auch eine Reihe von Beiträgen in seinem Blog mit diese ein, wo er sich, warum application / xml + Namensraum erklären weiterhin Medien-Typen nicht entspricht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top