Sollte eine RESTful-API in der Lage sein, Dateien oder nur einen Speicherort zurückzugeben

11

Das hat mich eine Weile verwirrt.

Zum Beispiel haben wir eine REST-API, die grundlegende Inhalte für ein System bereitstellt und JSON verbraucht und produziert. An diesem Endpunkt wird eine URL zu einem Bild und einer Beschreibung erstellt und wie folgt gefunden: // localhost / myApi / images / 1

{
    id: 1,
    description: "This is a pretty picture of a daisy",
    URL: <OUR URL>
}

Jetzt sollte die OUR_URL auf einen Speicherort in der API verweisen, z. B. // localhost / myApi / files / images / 1, der ein JPG zurückgibt (die Anwendung hinter der API liest den physischen Inhalt der Datei und überträgt ihn dann zurück an den Client ). Dies unterscheidet sich offensichtlich von dem Rest der API, die JSON-Antworten erzeugt, und das Lesen und Streamen der eigentlichen Datei ist mit einem Overhead verbunden.

Alternativ sollte OUR_URL auf eine URL außerhalb des Bereichs des REST-Dienstes verweisen, also //localhost/files/pictures/1.jpg, wo die Datei direkt gelesen wird.

Die Frage ist also:

Sollte eine RESTful-API Dateien oder nur einen Speicherort zurückgeben können?

Verrückter Dino
quelle
1
Sie wissen, dass die allgemeine Beschreibung von REST lautet "Clients stellen Anforderungen an eine URL und der Server gibt Daten zurück", oder? Die ganze Idee ist, dass REST sehr lose definiert ist und an fast jedes URL-basierte Abrufschema angepasst werden kann.

Antworten:

16

Ein RESTful-Service sollte den Benutzern der API Ressourcen bereitstellen. Ressourcen können verschiedene Formate haben, die von JSON oder XML bis JPEG und HTML reichen.

Es besteht nicht einmal die Anforderung oder Erwartung, dass eine einzelne API nur Ressourcen eines einzelnen Formats bereitstellt. Es ist nichts Falsches daran, ein JSON-Dokument auf dem URI /myApi/pictures/1und eine JPEG-Datei aus dem URI bereitzustellen /myApi/files/pictures/1.
In einem extremeren Fall ist es sogar möglich, sowohl die JSON-Beschreibung als auch die JPEG-Datei unter derselben URL bereitzustellen, je nachdem, welches Format der Anforderer anfordert.

Bart van Ingen Schenau
quelle
7

Ein Problem bei der Rückgabe von URIs besteht darin, dass ein einfacher alter Dateiserver keine Sicherheit bieten kann. Wenn Sie also eine Einschränkung für den Zugriff auf eine Datei vornehmen müssen, müssen Sie diese direkt in der REST-API zurückgeben können (oder nicht, wenn der Benutzer keine Rechte hat, ist die Datei) nicht im richtigen Zustand usw.).

Andernfalls hat die Rückgabe der einfachen alten URI und die Weitergabe an ein dediziertes CDN viele Vorteile in Bezug auf Bereitstellung, Einfachheit und Skalierbarkeit - vorausgesetzt, dies ist alles, was Sie tun müssen.

Telastyn
quelle
Der Auth-Aspekt ist ein sehr guter Punkt, über den ich nie nachgedacht hatte.
Crazy Dino