这些REST HTTP响应代码是否正确,内容类型如何?

时间:2010-05-11 18:49:03

标签: rest httpresponse

我正在编写一个控制器助手,为我的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 :(得分:0)

对我来说看起来很不错,我倾向于使用200来删除,但是如果你在处理删除时永远不会发回任何实体,我认为使用204没有任何问题。关于401 vs 403,它们很棘手,因为它们的名字很差。 401表示“未经授权”,但发送WWW-Authenticate标头的要求告诉我,当请求未经“认证”时,应该真正使用它。 401说:“我不能让你这样做,因为我不满意,我对你了解得足够多。另一方传达403的资源是”禁止的“,只是在这种情况下说”未授权“的另一种方式,我们没有努力让用户更好地进行身份验证。当你需要表达时,请使用403:“我知道你是谁,我不在乎,我不会让你那么做。”

否则这些看起来不错,但您可能需要将302,303和307视为额外的重定向,具体取决于您进行重定向的原因。请进一步了解http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,如果您需要更深入了解重定向标题,请与我们联系。