Правильны ли эти коды ответов REST HTTP и как насчет Content-Type? - PullRequest
2 голосов
/ 11 мая 2010

Я пишу помощник контроллера, который устанавливает правильные заголовки ответа для моего действия контроллера REST. Он вставлен ниже и должен быть достаточно упрощен для тех, кто не знаком с Zend Framework, чтобы понять, что я делаю.

Мой вопрос: правильны ли эти коды для их соответствующих ответов, и в случае «отказа в доступе» я использую 401 или 403?

Также, в случае ответа с ошибкой, я понимаю, что я должен поместить сообщение в тело ответа, но должен ли я установить для «Content-Type» значение «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
    }


}

1 Ответ

0 голосов
/ 12 мая 2010

Они выглядят довольно хорошо для меня, я склонен использовать 200 для удаленных, но я не вижу ничего плохого в использовании 204, если вы никогда не собираетесь отправлять обратно какую-либо сущность при обработке удаления. Что касается 401 против 403, они хитры, потому что они названы плохо. 401 говорит «не авторизован», но требование отправить заголовок WWW-Authenticate подсказывает мне, что его действительно следует использовать, когда запрос не «аутентифицирован». 401 говорит: «Я не могу позволить вам сделать это, потому что я не удовлетворен тем, что знаю о вас достаточно. 403 на другом носителе говорит, что ресурс« Запрещен », просто еще один способ сказать« не авторизован »только в этом случае не предпринимается никаких усилий для того, чтобы аутентифицировать пользователя лучше, чем он есть. Используйте 403, когда вам нужно выразить: «Я знаю, кто вы, и мне все равно, я не позволю вам сделать это».

В противном случае они выглядят хорошо, хотя вы можете рассмотреть 302, 303 и 307 как дополнительные перенаправления в зависимости от того, почему вы делаете перенаправление. Дополнительный взгляд на http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html и дайте мне знать, если вам нужно больше понимания заголовков перенаправления.

...