wake-up-neo.net

Welcher MIME-Typ, wenn JSON von a zurückgegeben wird REST API?

Meine REST - API gibt JSON zurück. 

Ich gebe derzeit Text/Plain als MIME-Typ zurück, aber es fühlt sich komisch an. Sollte ich application/x-javascript oder einen anderen Typ zurückgeben?

Die zweite Frage betrifft den HTTP-Statuscode für Fehlerbedingungen ..__ Wenn meine REST -API einen Fehlerstatus zurückgibt, kehre ich als JSON zurück

{ result: "fail", errorcode: 1024, errormesg: "That sucked. Try again!" }

Soll der HTTP-Statuscode bei 200 OK bleiben?

66
ashitaka

Die JSON spec schlägt application/json vor, und dies scheint von der IETF und IANA Registry unterstützt zu werden.

Bei der zweiten Frage denke ich, wenn die Nachrichtenbehandlung auf irgendeine Weise fehlschlägt, sollten Sie eine strukturierte und standardmäßige Fehlerantwort als JSON-Nachricht zurückgeben. Nur wenn die Übermittlung der Nachricht an den Backend-Handler aus irgendeinem Grund fehlgeschlagen ist, sollten Sie einen HTTP-Fehlercode berücksichtigen.

Update 2014-06-27: Die Tage, an denen Clients (Browser) nur mit einer Antwort von 200 gearbeitet haben, sind lange vorbei und der vorherrschende Ratschlag für RESTful-APIs lautet, für die Antwort geeignete HTTP-Antwortcodes zu verwenden, 2xx für erfolgreiche Antworten ( z. B. 201 Created for PUT; 204 No Content for DELETE) und 4xx und 5xx für alle Fehlerbedingungen, einschließlich derjenigen der API selbst.

76
Lawrence Dol
19
inquam

Ich möchte lieber mit einem HTTP-Fehlerstatus und anwendungsspezifischen Nutzdaten antworten.

10
david

Nein, Sie sollten 200 nicht in einem Fehlerzustand zurückgeben.

Es ist in Ordnung, den Statuscode zu wiederholen oder einen detaillierteren Fehlercode in die Antwortnutzlast aufzunehmen.

10
Julian Reschke

Der richtige Content-type, der zurückgegeben werden soll, ist application/json gemäß RFC 4627 , der auch den MIME-Typ IANA registriert (und tatsächlich auf der IANA-Seite angezeigt wird). Wenn Sie einen Kunden schreiben würden, möchten Sie natürlich liberaler sein, was Sie akzeptieren, und auch andere, wie text/json und text/x-json.

Wenn jetzt ein Fehler auftritt, sollten Sie nicht HTTP 200 zurückgeben, das ist grundsätzlich nicht RESTful. Ich weiß, dass es manchmal keine exakte Übereinstimmung für Ihren Fehler gibt, aber wählen Sie den nächstgelegenen Fehler 4XX (Fehler des Kunden) oder 5XX (Fehler des Servers) in RFC 2616 Abschnitte 10.4 - 10.5 aus und geben Sie im JSON eine genauere Angabe.

6
LukeShu

Wenn Sie mit "REST-API" meinen, dass Sie einer REST - Architektur folgen möchten, wird der zu verwendende Medientyp von der Funktionalität bestimmt, die Sie über die REST - API verfügbar machen möchten. Möchten Sie neue Objekte erstellen können? Eine Objektliste abfragen? Objekt bearbeiten? Wenn dies der Fall ist, könnte vnd.collection + json ein guter RESTful-Medientyp sein, da er eine mit Hypertext verknüpfte Schnittstelle zum Bearbeiten einer Sammlung von Json-Objekten definiert.

Hinweis: Eine RESTful-API könnte den Medientyp application/json verwenden, dieser Medientyp verfügt jedoch nicht über eine mit Hypertext verknüpfte RESTful-Schnittstelle. Daher wäre dies ein Endpunkt der Statusänderung. 

Es ist auch völlig akzeptabel, einer Web-API-Architektur zu folgen, bei der HTTP-RPC-Aufrufe application/json-Objekte zurückgeben und andere HTTP-RPC-Aufrufe diese Objekte bearbeiten und es keine Hypertext-Link-Schnittstelle für die Verwendung und Navigation der Statusänderungen gibt. Aber das ist kein REST.

Ich mag diese Beschreibung von REST (vom Ersteller von REST):

REST APIS muss hypertextgesteuert sein

Mit anderen Worten, wenn die Engine des Anwendungsstatus (und damit der API) Wird nicht von Hypertext gesteuert, kann es nicht RESTful sein und kann nicht eine REST - API sein. Zeitraum.

Aus der Diskussion dieses Beitrags folgt auch dieses Beispiel einer RESTful-Anwendung: Lost Boys's Spam-E REST -Anwendung

0
Jason