Disons que j'ai une entreprise qui classe les chats les plus mignons sur Internet.
J'offre une ressource/cats/
qui fournit aux utilisateurs les chats adorables les plus récents et les plus mignons.
Les utilisateurs peuvent obtenir uniquement les 3 meilleurs chats s'ils n'ont pas payé du tout ou se sont inscrits. Les 10 meilleurs chats s'ils ont payé 337 dollars et sont connectés, et les 100 meilleurs chats s'ils ont payé 1337 dollars et sont connectés. J'ai un 'identifiant utilisateur' lors de la demande.
En bref, les consommateurs /cats/
obtiennent un nombre différent de chats en fonction de leur «classement des utilisateurs» . J'ai un identifiant utilisateur à l'extrémité consommatrice, mais je n'ai aucune représentation explicite du niveau utilisateur à l'extrémité consommatrice. Je souhaite informer les utilisateurs qu'ils peuvent mettre à niveau leur abonnement lors de la demande. C'est-à-dire que je dois faire la distinction entre 3 chats car je n'offre que 3 chats et 3 chats parce que c'est ce que le niveau utilisateur a permis .
Quelle est la meilleure pratique pour distinguer la limitation de la ressource parce que le consommateur n'a pas les privilèges suffisants et la limiter parce que c'est ce que le consommateur a?
Comment le client sait-il s'il peut améliorer son classement? Autrement dit, ils n'ont obtenu qu'une ressource limitée car ils n'ont pas d'autorisations. Quelle est la meilleure pratique ici?
Notez qu'il s'agit d'une simplification grossière du cas réel. Aussi, juste pour clarifier - la lecture est appréciée.
Mise à jour:
Voici les options que nous avons envisagées:
- Stockage des objets d'autorisations utilisateur une fois sur le client, recherche uniquement lorsque la connexion ou la mise à niveau du compte est effectuée.
- Passer des
null
valeurs en JSON indiquant qu'il existe, mais rien n'a été transféré. Donc 10 chats pour un utilisateur avec 3 chats pourraient être["Garfield","Sylvester","Puss in Boots",null*7]
- Passer une paire d'autorisations de ressources
{cats:["Whiskers","Fluffy","Socks"],authCount:3}
J'aimerais bien le faire la première fois pour livrer les chats les plus mignons de la meilleure façon possible et nous aimerions et nous aimerions
la source
Réponses:
Je dirais que cela dépend de votre public.
No-dev
Si votre public n'est pas un développeur, j'irais de la façon suivante:
Disons que vous renvoyez JSON pour l'exemple.
Ou quelque chose de similaire.
Il est informatif pour l'utilisateur de connaître le statut de son compte, et il vous permet de mettre toutes les informations que vous souhaitez, comme un message marketing. Le point le plus important de cette façon est de donner une visibilité facile à vos utilisateurs de leur compte courant.
Dev
Cependant, si votre public est purement développeur, je dirais: optez pour la méthode compatible HTTP complète. Pour stocker les métadonnées, vous utilisez des en-têtes HTTP.
Voici un exemple:
Ensuite, fournissez une documentation claire de la signification de ces en-têtes. La plupart des développeurs iront directement à la documentation lorsqu'ils verront ces en-têtes personnalisés, surtout s'ils voient une limite. Vous pouvez aller encore plus loin et afficher le lien dans les en-têtes. Ou vous pouvez afficher un lien vers la page de tarification.
Mais là encore, de nombreux développeurs ne savent pas comment HTTP fonctionne.
C'est donc votre appel
L'un est plus correct, l'autre est plus accessible.
Divers
Quelques autres trucs divers liés à votre question:
la source
UserRole = level1
ou tout ce que vous souhaitez appeler juste pour vous assurer que les consommateurs sont toujours conscients de la façon de présenter toutes les données qu'ils reçoivent, et c'est cohérent dans toutes les réponses où les modèles de données qui reviendront seront différents d'une demande à l'autre, les consommateurs peuvent toujours vérifier leur rôle de la même manière.Cela dépend du client. Normalement, vous pouvez mettre ces informations sous la forme d'un message hypertexte (alias HTML) dans le corps de réponse de la méthode REST. Cependant, cela n'a de sens que si l'API REST est utilisée avec un client HTML.
Similaire pour XML et JSON.
Modifier: vous pourriez confondre l'utilisation d'une API (développer cet acronyme) avec la commercialisation de vos types de compte / plans d'utilisateur. Je ne mélangerais pas cela, car cela devient toujours louche (les décisions commerciales peuvent nécessiter des changements plus rapides que les changements dans le logiciel pour communiquer des réponses différentes en raison de ces changements peuvent arriver sur le plateau à temps).
Dites plutôt à vos utilisateurs via un canal différent, par exemple avec la newsletter, quels sont leurs avantages.
Cela fonctionne particulièrement bien lorsque la personne qui s'inscrit au service n'est pas celle qui programme contre l'API. Par exemple:
Donc, le gars qui s'amuse à programmer cela n'est pas vraiment le destinataire le plus simple de l'information.
Alternativement, en réponse à la connexion et à une méthode d'informations utilisateur, fournissez tous les détails sanglants.
Mais lorsqu'un utilisateur demande des chats par programme, il doit déjà savoir pourquoi il ne récupère que trois chats ou plus. Mais vous ne résolvez pas ce problème de communication avec du code.
Sinon, laissez-les interroger davantage, puis renvoyez un avis de défaillance si leurs droits ne sont pas suffisants. Mais encore une fois, ce n'est pas un logiciel convivial.
la source