Ist es ok, um wieder application/octet-stream von einem REST-interface?
Bin ich brechen keine Gesetze in der ÜBRIGEN Bibel durch Rücksendung application/octet-stream für meine Antworten ? Der REST-Endpunkt erhält 5 Bild-urls.
{ "image1": "http://ww.o.com/1.gif",
"image2": "http://www.foo.be/2.gif" }
und es wird laden Sie diese herunter und kehren Sie als application/octet-stream.
KLÄRUNG: Der client ruft diese REST-Schnittstelle ist eine mobile app. Jeder zusätzliche Netzwerk-verbindungen verringern die Lebensdauer der Batterie um ein paar Milliampere. Ich bin gezwungen, zu verwenden, REST, weil das Unternehmen standard. Wenn nicht, werde ich mein eigenes binäres Protokoll.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht so gut, da der client nicht wissen, was zu tun, mit binären Daten, mit Ausnahme von speichern von bytes, die irgendwo oder senden Sie diese weiter an einen anderen Prozess (wenn das ist alles, was Sie brauchen, um mit Ihren Daten tun, dann ist es in Ordnung).
Können Sie einen Blick auf multipart content-Typen. IMO, eine multipart message mit mehreren
image/gif
Teile wäre eine bessere alternative.Sich von den Klängen dieses, das klingt viel mehr wie ein RPC-Aufruf. Genauer: "hier ist eine Liste von URLs, senden Sie mir zurück-ein Archiv".
Dieser Prozess ist nicht besonders Erholsam, als REST ist nicht eine RPC-basierten system.
Was Sie tun müssen, ist die Behandlung der Archive als Ressourcen genutzt werden, und ein Weg, um erstellen und dann dienen Sie.
Zum Beispiel könnten Sie:
Als ein Ergebnis, die Sie erhalten würden,
Dann, könnten Sie eine Anfrage an http://example.com:
Hier erhalten Sie die aktuellen Archivs in einer einzigen Anfrage (wie Sie wollen), nur dass es ein multipart-formatierte Ergebnis. (multipart/x-zip-würde auch funktionieren, das ist eine zip-Datei)
Wenn Sie nicht:
Würden Sie wieder die JSON geschickt Sie ursprünglich (so könnte man, vielleicht, Bearbeiten und das Archiv zu aktualisieren, etwas, das Sie möglicherweise nicht unterstützen möchten, senden bis die binären Bilder).
Ändern, Sie würde einfach nach hinten update:
Wird die Ressource /Archive/1234, das ist sein name.
Es hat zwei Vertretungen in diesem Fall: die JSON-version, und das eigentliche, binären Archiv. Ihr service unterscheidet zwischen den beiden, die mit dem Inhaltstyp angegeben in der Accept-header. Dieser header wird dem client sagen, was Sie will.
Wenn du fertig bist mit dem Archiv, es einfach zu LÖSCHEN
Oder Sie können den server ablaufen die Ressource zu einem späteren Zeitpunkt.
PUT
mitPOST
?PUT
ist in der Regel für die Aktualisierung von Ressourcen wie/archives/1234
, undPOST
ist für neue Dinge wie ein neues Archiv in deinem Beispiel:POST /archives
.Warum nicht fünf einzelne REST-Aufrufe?
Scheint sauberer und teilt mehr logisch. Es laufen auch die downloads parallel, 2 oder mehr in einer Zeit, je nach browser Sie verwenden.
n
URLs, und Durchlaufen Sie mithilfe von HTTP-req/resp für jedes einzelne Bild könnte teuer werden. Wenn es wirklich nur mehrere links pro Anfrage, können die Dinge gemacht werden mehr einfach, durch das dienen von einzelnen Bildern.Sind Sie als REST-Prinzipien nicht die Gesetze, aber Nein, Sie sind nicht "brechen" Sie, IMO. REST ist über die Ressourcen adressierbar, indem Sie eine URL, und (wo angemessen), verfügbar in mehreren Formaten. Es muss nicht sagen, was das format sein sollte. Es gibt eine einfache Beschreibung von dem, was REST bedeutet in diesem Artikel.
Allerdings, wie @Andrey sagt, es gibt schönere Möglichkeiten, um zu behandeln, senden mehrere Daten-Objekte als erfinden Sie Ihre eigenen ad-hoc-format. Die Multipart-MIME-Typ /- format ist eine alternative, und die andere ist zum senden der Objekte, die gepackt als tar, zip oder einem ähnlichen Archiv-Datei-format.
IMO. das eigentliche problem mit der Verwendung von "application/octet-stream" und ist es nicht, sage niemandem etwas darüber, wie die Daten formatiert werden. Eher dein client hat, "wissen", wie es formatiert ist, und interpretieren es dementsprechend. Und die Probleme mit dem erfinden Sie Ihr eigenes format sind die Interoperabilität und die (möglicherweise), dass design, Implementierung und Verwaltung von Bibliotheken unterstützen, kann eventuell mal über.