Nehmen wir an, ich habe eine Firma, die die süßesten Katzen im Internet auflistet.
Ich biete eine Ressource an, in/cats/
der Benutzer die neuesten, süßesten, entzückenden Katzen finden.
Benutzer können entweder nur die Top 3 Katzen bekommen, wenn sie überhaupt nicht bezahlt haben oder registriert sind. Die Top 10 Katzen, wenn sie 337 Dollar bezahlt haben und eingeloggt sind, und die Top 100, wenn sie 1337 Dollar bezahlt haben und eingeloggt sind. Ich habe eine 'Benutzerkennung', wenn ich die Anfrage stelle.
Kurz gesagt, Konsumenten von /cats/
bekommen eine andere Anzahl von Katzen, basierend auf ihrer 'Benutzerrangliste' . Ich habe eine Benutzerkennung auf der konsumierenden Seite, aber ich habe keine explizite Darstellung der Benutzerebene auf der konsumierenden Seite. Ich möchte Benutzer darüber informieren, dass sie ihr Abonnement aktualisieren können, wenn sie die Anfrage stellen. Das heißt, ich muss zwischen 3 Katzen unterscheiden, da ich nur 3 Katzen und 3 Katzen anbiete, da dies auf Benutzerebene zulässig ist .
Was ist die beste Methode zur Unterscheidung der Einschränkung der Ressource, weil der Verbraucher nicht über ausreichende Berechtigungen verfügt, und zur Einschränkung der Ressource, weil der Verbraucher über diese Berechtigungen verfügt?
Woher weiß der Kunde, ob er sein Ranking verbessern kann? Das heißt, sie haben nur eine begrenzte Ressource, weil sie keine Berechtigungen haben. Was ist hier die beste Praxis?
Beachten Sie, dass dies eine grobe Vereinfachung des tatsächlichen Falls ist. Auch nur zur Verdeutlichung - Lesen ist erwünscht.
Aktualisieren:
Wir haben folgende Optionen in Betracht gezogen:
- Speichern Sie die Benutzerberechtigungsobjekte einmal auf dem Client und fragen Sie sie nur ab, wenn eine Kontoanmeldung oder ein Upgrade durchgeführt wird.
- Das Übergeben von
null
Werten in JSON zeigt an, dass es existiert, aber es wurde tatsächlich nichts übertragen. So könnten 10 Katzen für einen Benutzer mit 3 Katzen sein["Garfield","Sylvester","Puss in Boots",null*7]
- Übergeben eines Ressourcenberechtigungspaars
{cats:["Whiskers","Fluffy","Socks"],authCount:3}
Ich würde das gerne gleich beim ersten Mal richtig machen, um die süßesten Katzen bestmöglich auszuliefern, und wir würden und wir würden gerne
quelle
Antworten:
Ich würde sagen, es hängt von Ihrem Publikum ab.
No-dev
Wenn Ihr Publikum kein Entwickler ist, würde ich folgendermaßen vorgehen:
Angenommen, Sie geben JSON für das Beispiel zurück.
Oder etwas ähnliches.
Es ist für den Benutzer informativ, den Status seines Kontos zu kennen, und es ermöglicht Ihnen, die gewünschten Informationen, z. B. eine Marketingnachricht, einzugeben. Der wichtigste Punkt auf diesem Weg ist es, Ihren Benutzern einen leichten Überblick über ihr aktuelles Konto zu verschaffen.
Dev
Wenn Ihre Zielgruppe jedoch nur Entwickler ist, würde ich sagen: Gehen Sie auf die vollständige HTTP-konforme Weise. Zum Speichern der Metadaten verwenden Sie HTTP-Header.
Hier ist ein Beispiel:
Stellen Sie dann eine klare Dokumentation der Bedeutung dieser Überschriften bereit. Die meisten Entwickler werden direkt nach der Dokumentation suchen, wenn sie diese benutzerdefinierten Header sehen, insbesondere wenn sie ein Limit sehen. Sie können noch weiter gehen und den Link in den Kopfzeilen anzeigen. Oder Sie können einen Link zur Preisseite anzeigen.
Andererseits wissen viele Entwickler nicht, wie HTTP funktioniert.
Also ist es dein Anruf
Einer ist korrekter, der andere ist zugänglicher.
Sonstiges
Einige andere Dinge, die mit Ihrer Frage zu tun haben:
quelle
UserRole = level1
oder wie auch immer nennen, um sicherzustellen, dass die Verbraucher immer wissen, wie sie vorgehen sollen Präsentieren Sie alle empfangenen Daten, und es ist für alle Antworten konsistent, bei denen sich die zurückkommenden Datenmodelle von einer Anfrage zur nächsten unterscheiden. Verbraucher können ihre Rolle immer auf die gleiche Weise überprüfen.Das hängt vom Kunden ab. Normalerweise können Sie solche Informationen in Form einer Hyptertextnachricht (auch als HTML bezeichnet) in den Antworttext der REST-Methode einfügen. Dies ist jedoch nur sinnvoll, wenn die REST-API mit einem HTML-Client verwendet wird.
Ähnliches gilt für XML und JSON.
Bearbeiten: Sie könnten die Verwendung einer API (erweitern Sie dieses Akronym) mit der Vermarktung Ihrer Kontotypen / Benutzerpläne verwechseln. Ich würde dies nicht mischen, da es immer faul wird (Geschäftsentscheidungen erfordern möglicherweise schnellere Änderungen als die Änderungen in der Software, um unterschiedliche Antworten zu kommunizieren, da diese Änderungen in der Lage sind, rechtzeitig auf den Plattenteller zu gelangen).
Informieren Sie Ihre Benutzer stattdessen über einen anderen Kanal, z. B. mit dem Newsletter, über deren Vorteile.
Dies funktioniert besonders gut, wenn die Person, die sich beim Dienst anmeldet, nicht mit der API programmiert. Beispielsweise:
Der Typ, der Spaß am Programmieren hat, ist also nicht gerade der direkteste Adressat der Informationen.
Alternativ können Sie als Antwort auf die Anmeldung und eine Benutzerinformationsmethode alle wichtigen Details angeben.
Wenn ein Benutzer jedoch programmgesteuert Katzen anfordert, sollte er bereits wissen, warum er nur drei oder mehr Katzen zurückerhält. Sie lösen dieses Kommunikationsproblem jedoch nicht mit Code.
Andernfalls können sie weitere Abfragen durchführen und eine Fehlermeldung zurückgeben, wenn ihre Rechte nicht ausreichen. Aber auch das ist keine benutzerfreundliche Software.
quelle