599 votes

La compréhension reste : Verbes, codes d’erreur et l’authentification

Je suis (comme un suivi de cette question) vous cherchez un moyen pour envelopper Api autour de fonctions par défaut dans mon PHP, applications web, bases de données et de Cms.

J'ai regardé autour et a trouvé plusieurs "squelette" des cadres. En plus des réponses à ma question, il est Tonique, un REPOS cadre que j'aime bien car il est très léger.

J'aime RESTE le meilleur pour sa simplicité, et voudrais créer une architecture API basée sur elle. Je suis en train d'essayer d'obtenir ma tête autour des principes de base et n'ont pas pleinement compris. Par conséquent, un certain nombre de questions.

1. Suis-je le comprendre, à droite?

Dire que j'ai une ressource "utilisateurs". Je pourrais établir un certain nombre de Uri comme suit:

/api/users     when called with GET, lists users
/api/users     when called with POST, creates user record
/api/users/1   when called with GET, shows user record
               when called with PUT, updates user record
               when called with DELETE, deletes user record

est-ce une représentation correcte d'une bonne architecture?

2. J'ai besoin de plus de verbes

Créer, mettre à Jour et Supprimer suffira peut-être en théorie, mais en pratique, je vais avoir besoin de beaucoup plus de verbes. Je réalise que ce sont des choses qui pourraient être incorporées dans une demande de mise à jour, mais ils sont les mesures spécifiques qui ont des codes de retour et je ne veux pas les jeter tous en une seule action.

Certains qui viennent à l'esprit de l'utilisateur exemple:

activate_login
deactivate_login
change_password
add_credit

comment pourrais-je exprimer des actions telles que celles dans un cadre Reposant URL architecture?

Mon instinct serait de faire un appel à une URL du type

/api/users/1/activate_login 

et s'attendre à un code d'état de retour.

Qui s'écarte de l'idée d'utiliser les verbes HTTP. Qu'en pensez-vous?

3. Comment retourner des messages d'erreur et les codes

Une grande partie du RESTE de la beauté provient de son utilisation de méthodes HTTP. Sur une erreur, j'émets un en-tête avec un 3xx,4xx ou 5xx code d'état d'erreur. Pour une description détaillée de l'erreur, je peux utiliser le corps (à droite?). So far So good. Mais quel serait le moyen de transmettre un propriétaire code d'erreur qui est plus détaillé dans la description de ce qui s'est passé (par exemple, "impossible de se connecter à la base de données", ou "connexion de base de données mal")? Si je l'ai mis dans le corps du message, je dois l'analyser par la suite. Est-il un en-tête standard pour ce genre de chose?

4. Comment faire de l'authentification

  • Ce serait une API basée sur une clé d'authentification de REPOS après les principes?
  • Sont là les points forts à l'encontre de l'utilisation de sessions lors de l'authentification d'un client REST, d'autres que c'est une violation flagrante du principe RESTE? :) (seulement la moitié de blague ici, une session d'authentification voudrais bien jouer avec mon infrastructure existante.)

EDIT: Merci à tous pour votre grande les réponses les gars. Je m'en vais à travers eux, demain ou le jour d'après.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X