2017-09-15 1 views
1

Ich mag gerne wissen, was die beste Praxis ist RESTful Objekte nach einem Authentifizierungsverfahren für das Laden.Läden RESTful Objekte nach der Authentifizierung

Zum Beispiel habe ich eine App, dass nach der Anmeldung, eine Liste von Personen abrufen muss, Orte und einige anderen Konten-relevanter Informationen. Welcher der folgenden Punkte wäre die beste Vorgehensweise?

A. Nachdem die App POST/api/v1/login sollte es ruft zurück:

{ 
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz", 
    "persons": [ 
     {"id": 1, "name": "John"}, 
     {"id": 2, "name": "Paul"}, 
     {"id": 3, "name": "George"}, 
     {"id": 3, "name": "Ringo"} 
    ], 
    "places": [ 
     {"id": 1, "name": "London"}, 
     {"id": 2, "name": "New York"}, 
    ], 
    "lastLogin": "2017-09-10 13:00:00" 
} 

Diese Methode erleichtert auf den App-Entwickler zu machen scheint, weil sie müssen nicht telefonieren die separat zu erhalten. Aber es scheint eng miteinander verbunden zu sein.

B. Oder sollte es nur zurück

{ 
    "token": "xxxxx.yyyyyyy.xzzzzzzzzz" 
} 

und die App sollten die anderen Daten separat unter Verwendung beispielsweise laden,

GET /api/v1/persons 
GET /api/v1/places 
GET /api/v1/lastlogin 

Diese Methode sauberer zu sein scheint, aber es kann für den App-Entwickler schwieriger. Und es würde ein zusätzlicher Anforderungsaufwand entstehen, besonders wenn Sie viele verschiedene Modelle laden.

C. Oder sollte ich gerade einen Anruf mit dem Namen /api/v1/loginWithData haben, der das Token mit den Daten zurückgibt, und ein separates /api/v1/login, das nur das Token zurückgibt? Diese Methode hat das Beste aus beiden, scheint aber den API-Namespace zu überladen.

Ich würde es wirklich zu schätzen, wenn Sie Links senden, die erklären würde, so kann ich von ihnen lernen.

Antwort

1

Beachten Sie, dass, wenn wir über 3rd party apps sprechen, dann sollten sie nie die Benutzerinformationen und Auth-Token haben. Sie erhalten nur einen Zugriffsschlüssel vom Benutzer, wenn sie ihnen einige Privilegien oder eingeschränkte APIs geben, jede einzelne Anfrage wird vom Benutzer signiert. Wenn Sie über Sitzungen und nicht über Stateless-Tokens sprechen, sollten Sie OAuth und die Fielding-Dissertation überprüfen, um die Grundlagen zu erlernen.

Wenn Sie die tatsächliche Client entwickeln, damit es nicht ein 3rd-Party-App ist, dann muss das Token im Authorization-Header reisen oder in einem Cookie anstelle des Körpers. Ich würde den POST /api/v1/auth Link verwenden, der Ihnen den GET /api/v1/user/136 Link zu Ihrer Datenquelle gibt. Oder wenn Sie einen benutzerdefinierten MIME-Typ verwenden, geben Sie einen leeren Textkörper zurück.

+0

Ich neige dazu, auch Ihnen zuzustimmen. Aber ist das übliche Praxis oder ist es nur der Einfachheit halber? –

+0

@aljof Welcher Teil? – inf3rno

+0

Wo du erwähnt hast: "Ich würde den POST/api/v1/auth-Link verwenden, der dir das GET/api/v1/user/136 gibt". Ich schätze, ich frage, warum die Antwort des POST nicht die Daten enthält, die meine App verwenden wird, sondern dass die App eine andere Anfrage verwendet, um die Daten zu erhalten? –

Verwandte Themen