Wir entwickeln einen Server mit REST-API, der JSON akzeptiert und mit JSON antwortet. Das Problem ist, wenn Sie Bilder vom Client auf den Server hochladen müssen.
Hinweis: und ich spreche auch von einem Anwendungsfall, bei dem die Entität (Benutzer) mehrere Dateien (carPhoto, licensePhoto) und auch andere Eigenschaften (Name, E-Mail ...) haben kann, aber wenn Sie einen neuen Benutzer erstellen, tun Sie dies nicht Senden Sie diese Bilder nicht, sie werden nach dem Registrierungsprozess hinzugefügt.
Die Lösungen sind mir bekannt, aber jede hat einige Mängel
1. Verwenden Sie Multipart / Formulardaten anstelle von JSON
gut : POST- und PUT-Anforderungen sind so RESTful wie möglich, sie können Texteingaben zusammen mit einer Datei enthalten.
Nachteile : Es ist nicht mehr JSON, was viel einfacher zu testen, zu debuggen usw. ist, verglichen mit mehrteiligen / Formulardaten
2. Ermöglichen Sie das Aktualisieren separater Dateien
Die POST-Anforderung zum Erstellen eines neuen Benutzers erlaubt nicht das Hinzufügen von Bildern (was in unserem Anwendungsfall, wie ich zu Beginn sagte, in Ordnung ist). Das Hochladen von Bildern erfolgt per PUT-Anforderung als mehrteilige / Formulardaten zu beispielsweise / users / 4 / carPhoto
gut : Alles (außer dem Hochladen der Datei selbst) bleibt in JSON, es ist einfach zu testen und zu debuggen (Sie können vollständige JSON-Anforderungen protokollieren, ohne Angst vor ihrer Länge zu haben).
Nachteile : Es ist nicht intuitiv, Sie können nicht alle Variablen der Entität gleichzeitig POSTEN oder PUTEN, und auch diese Adresse /users/4/carPhoto
kann eher als Sammlung betrachtet werden (der Standardanwendungsfall für die REST-API sieht so aus /users/4/shipments
). Normalerweise können (und wollen) Sie nicht jede Entitätsvariable GET / PUT, zum Beispiel users / 4 / name. Sie können den Namen mit GET abrufen und mit PUT unter users / 4 ändern. Wenn nach der ID etwas steht, handelt es sich normalerweise um eine andere Sammlung, z. B. users / 4 / reviews
3. Verwenden Sie Base64
Senden Sie es als JSON, aber codieren Sie Dateien mit Base64.
gut : Wie bei der ersten Lösung ist es ein möglichst ruhiger Service.
Nachteile : Erneut ist das Testen und Debuggen viel schlimmer (der Körper kann Megabyte an Daten haben), es gibt eine Zunahme der Größe und auch der Verarbeitungszeit sowohl auf dem Client als auch auf dem Server
Ich würde wirklich gerne Lösung Nr. Verwenden. 2, aber es hat seine Nachteile ... Kann mir jemand einen besseren Einblick in die "Was ist die beste" Lösung geben?
Mein Ziel ist es, RESTful-Services mit möglichst vielen Standards zu haben, während ich es so einfach wie möglich halten möchte.