2010-05-11 2 views
2

J'écris un helper de contrôleur qui définit les en-têtes de réponse appropriés pour mon action de contrôleur REST. Il est collé ci-dessous et devrait être assez simplifié pour ceux qui ne sont pas familiers avec Zend Framework pour comprendre ce que je fais.Ces codes de réponse HTTP REST sont-ils corrects et qu'en est-il du type de contenu?

Ma question est: Ces codes sont-ils corrects pour leurs réponses respectives, et dans le cas d'un «accès refusé», est-ce que j'utilise un 401 ou un 403?

De même, en cas de réponse avec une erreur, je comprends que je devrais placer un message dans le corps de la réponse, mais devrais-je définir le "Content-Type" sur "text/plain"?

<?php 

class App_Controller_Helper_RestResponse extends Zend_Controller_Action_Helper_Abstract 
{ 
    public function denied() 
    { 
     // 403 or 401? 
    } 

    public function notFound() 
    { 
     // 404 
    } 

    public function created() 
    { 
     // 201 
    } 

    public function deleted() 
    { 
     // 204 
    } 


    public function redirect() 
    { 
     // 301 
     // new url 
    } 

    public function malformed() 
    { 
     // 400 
    } 

    public function gone() 
    { 
     // 410 
    } 


} 

Répondre

0

Ceux qui semblent très bien pour moi, je tends à utiliser 200 pour supprimer, mais je ne vois rien de mal à utiliser 204 si vous ne réussirez jamais à renvoyer toute entité lorsque vous traitez une suppression. En ce qui concerne 401 vs 403, ils sont difficiles parce qu'ils sont mal nommés. 401 dit "non autorisé" mais l'obligation d'envoyer un en-tête WWW-Authenticate me suggère qu'il devrait vraiment être utilisé lorsque la requête n'est pas "authentifiée". 401 dit: "Je ne peux pas vous laisser faire parce que je ne suis pas satisfait je sais assez sur vous 403 sur l'autre transmet la ressource est" Interdit ", juste une autre façon de dire" non autorisé "seulement dans ce cas, Il n'y a pas d'effort pour que l'utilisateur soit mieux authentifié qu'il ne l'est déjà.Utilisez 403 lorsque vous avez besoin d'exprimer: "Je sais qui vous êtes, et je m'en fous, je ne vais pas vous laisser faire ça."

Dans le cas contraire, vous pouvez considérer les redirections 302, 303 et 307 supplémentaires en fonction des raisons pour lesquelles vous effectuez la redirection, pour plus d'informations, consultez la page http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html. rediriger les en-têtes

+0

Ok, donc si un utilisateur N'A PAS été identifié (authentifié), alors je devrais probablement le rediriger vers une page de connexion. se s'ils se sont connectés et essayent d'accéder à une ressource dont ils n'ont pas l'autorisation, je devrais répondre avec un 403. Bon son? – talentedmrjones

+0

Oui, s'ils ne se sont pas connectés, envoyez-leur un 401 avec l'en-tête WWW-Authenticate pointant vers la page de connexion. S'ils sont connectés, et qu'ils font quelque chose que vous ne voulez pas qu'ils fassent, envoyez simplement le 403. – stinkymatt

Questions connexes