Ist die Verwendung von Sitzungen in einer RESTful-API wirklich ein Verstoß gegen RESTfulness? Ich habe viele Meinungen gesehen, die in beide Richtungen gehen, aber ich bin nicht überzeugt, dass Sitzungen RESTless . Von meinem Standpunkt aus gesehen:
- Authentifizierung ist für RESTfulness nicht verboten (sonst gäbe es wenig Nutzen für RESTful-Dienste)
- Die Authentifizierung erfolgt durch das Senden eines Authentifizierungs-Tokens in der Anfrage, normalerweise in der Kopfzeile
- dieses Authentifizierungs-Token muss auf irgendeine Weise beschafft werden und kann widerrufen werden; in diesem Fall muss es erneuert werden
- das Authentifizierungstoken muss vom Server validiert werden (sonst wäre es keine Authentifizierung)
Wie können Sitzungen dagegen verstoßen?
- client-seitig, Sitzungen werden mit Cookies realisiert
- Cookies sind einfach ein zusätzlicher HTTP-Header
- ein Session-Cookie kann jederzeit abgerufen und widerrufen werden
- Sitzungscookies können bei Bedarf eine unbegrenzte Lebensdauer haben.
- die Sitzungs-ID (Authentifizierungs-Token) wird serverseitig validiert
Für den Client ist ein Sitzungscookie also genau dasselbe wie jeder andere HTTP-Header-basierte Authentifizierungsmechanismus, außer dass er die Cookie
Kopf Kopf Kopf Kopf Kopf an statt der Authorization
oder eine andere proprietäre Kopfzeile. Warum sollte es einen Unterschied machen, wenn dem Cookie-Wert serverseitig keine Sitzung zugeordnet ist? Die serverseitige Implementierung braucht den Client nicht zu betreffen, solange der Server verhält sich RESTful. Daher sollten Cookies allein eine API nicht zu einer RESTless und Sitzungen sind einfach Cookies für den Client.
Sind meine Annahmen falsch? Was macht Sitzungscookies RESTless ?
5 Stimmen
Ich habe genau dieses Thema hier behandelt: stackoverflow.com/questions/1296421/rest-complex-applications/
5 Stimmen
Wenn Sie die Sitzung nur zur Authentifizierung verwenden, warum sollten Sie dann nicht die bereitgestellten Header verwenden? Wenn nicht, und Sie die Sitzung für andere Zustände der Konversation verwenden, dann verstößt das gegen die zustandslose Beschränkung von REST.
3 Stimmen
@Will Danke. Es scheint, dass Sie über Sitzungen für die vorübergehende Speicherung der vom Benutzer eingegebenen Daten sprechen, während ich in meinem Fall nur über sie als ein Implementierungsdetail für die Authentifizierung spreche. Könnte dies der Grund für die Unstimmigkeit sein?
0 Stimmen
@Will Hartung: kein signifikanter Unterschied vom Standpunkt des Protokolls aus gesehen. Filter sollten auch auf der Serverseite persistiert werden und die Filter-ID sollte immer übergeben werden. 100% das gleiche wie bei den Sessions.
3 Stimmen
@deceze Mein einziger Punkt ist, dass, wenn Sie einen Header verwenden wollen, um ein Authentifizierungs-Token darzustellen, HTTP einen anderen als einen generischen Cookie bietet. Warum also nicht diesen verwenden und die freie Semantik beibehalten, die man damit erhält (jeder, der den Payload sieht, kann erkennen, dass ihm ein Authentifizierungs-Token zugewiesen ist).
1 Stimmen
@zerkms Es geht nicht nur um das Protokoll, sondern auch um die Semantik.
1 Stimmen
@Will Die ganze Debatte ist also nur eine Frage der Syntax? :) Wenn die
Authorization
Header sich genau wie ein Session-Cookie verhalten würde, wäre es perfekt RESTful? Ich stimme zu, dass Cookies etwas "schmutzig" wirken, aber es gibt keinen technischen Unterschied.0 Stimmen
@Will Hartung: Ich sehe immer noch keinen Unterschied. Du hast der gleichen Technik einen anderen Namen gegeben. Wir können es Filter nennen, aber es bleibt es eine Sitzung.
8 Stimmen
Sicher, aber warum dann nicht eigene Header erstellen oder einen anderen Header für das Authentifizierungstoken verwenden? Verwenden Sie den X-XYZZY-Header. Das ist doch nur Syntax, oder? Die Header übermitteln Informationen. Der Authorization-Header ist "selbstdokumentierender" als Ihr Cookie, weil "jeder" weiß, wofür der Auth-Header ist. Wenn sie nur JSESSIONID (oder was auch immer) sehen, können sie keine Annahmen treffen, oder schlimmer noch, sie treffen die falschen Annahmen (was speichert er sonst noch in der Sitzung, wofür wird das sonst noch verwendet, usw.). Benennen Sie Ihre Variablen in Ihrem Code Aq12hsg? Nein, natürlich nicht. Das Gleiche gilt auch hier.
1 Stimmen
@zerkms Nein, das ist ein Filter. Ein Filter hat eine andere Semantik als eine Sitzung. Ein anderer Lebenszyklus, ein anderer Arbeitsablauf, ein anderer Zweck.
0 Stimmen
@Will Hartung: Kann ich nicht nachvollziehen :-S Deinem Posting entnehme ich, dass sie sich recht ähnlich sind.
0 Stimmen
Diese auf Meinungen basierende Frage ist ein Verstoß gegen die Regeln. Viele gute Fragen enthalten ein gewisses Maß an Meinungen, die auf der Erfahrung von Experten beruhen, aber die Antworten auf diese Frage beruhen in der Regel fast ausschließlich auf Meinungen und nicht auf Fakten, Referenzen oder spezifischem Fachwissen. Wenn diese Frage so umformuliert werden kann, dass sie mit den Regeln im Hilfecenter übereinstimmt, bearbeiten Sie bitte die Frage.