代码之家  ›  专栏  ›  技术社区  ›  talentedmrjones

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

  •  2
  • talentedmrjones  · 技术社区  · 16 年前

    我正在编写一个控制器助手,它为我的REST控制器操作设置正确的响应头。它贴在下面,应该被简化到足以让那些不熟悉Zend框架的人理解我在做什么。

    我的问题是:这些代码对它们各自的响应是否正确?在“拒绝访问”的情况下,我是使用401还是403?

    另外,如果响应出现错误,我知道我应该在响应正文中放置消息,但是我应该将“内容类型”设置为“文本/纯文本”吗?

    <?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 回复  |  直到 16 年前
        1
  •  0
  •   stinkymatt    16 年前

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

    否则,这些看起来不错,不过您可能希望将302、303和307视为其他重定向,具体取决于您执行重定向的原因。再看一眼 http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html 如果您需要更多有关重定向头的信息,请告诉我。