使用自定义标题查看响应消息; 不好的做法?

我正在使用Java和Spring框架开发一个REST API。 目前,我从服务器返回一个名为Server-Response的自定义HTTP头中的消息。 这用于发生错误和成功请求完成的两种情况。 为此目的使用自定义HTTP标头是一种不好的做法?

我为什么要这样做?

  • 存在的情况下,我需要一个对象的主体,但需要额外的字符串响应。
  • Java是严格键入的; 如果我返回一个List<Object> ,那么我不能返回一个额外的字符串。
  • 来自服务器的消息必须比全局异常处理程序提供的更具体。
  • 为什么不这样做?

  • Spring提供了一个@ExceptionHandler注释来允许异常处理方式不同,从而允许String响应。
  • 可能标题不应包含重要信息,如错误消息。
  • 示例GET请求

    我可以从以下示例网址获取位置列表: https://fakeurl.com/api/locationshttps://fakeurl.com/api/locations

    请求标题

  • 接受:text / html的,应用/ XHTML + xml的,应用/ XML; Q = 0.9,图像/ WEBP,/ Q = 0.8
  • Accept-Encoding:gzip,deflate,sdch Accept-Language:en-US,en; q = 0.8
  • 缓存控制:无缓存连接:保持活动
  • 升级不安全,要求:1
  • User-Agent:Mozilla / 5.0(Windows NT 6.1; WOW64)AppleWebKit / 537.36(KHTML,如Gecko)Chrome / 50.0.2661.94 Safari / 537.36
  • 状态码:200 OK
  • 响应头

  • 内容类型:应用/ JSON;字符集= UTF-8
  • 日期:2016年5月11日星期三15:41:03 GMT
  • 到期时间:1969年12月31日星期三美国东部时间19:00:00到期时间:-1
  • 服务器:Apache-狼/ 1.1
  • 服务器响应:成功检索所有位置!
  • 传输编码:分块
  • X-Powered-By:Servlet 2.5; JBoss的5.0 / JBossWeb-2.1
  • 响应体

    [
        {"locId":1,"descr":"New York","activeStatus":"ACTIVE"},
        {"locId":2,"descr":"Los Angelas","activeStatus":"ACTIVE"},
        {"locId":3,"descr":"Canada","activeStatus":"ACTIVE"},
        {"locId":4,"descr":"Mexico","activeStatus":"ACTIVE"},
        {"locId":5,"descr":"Nebraska","activeStatus":"ACTIVE"},
        {"locId":6,"descr":"Texas","activeStatus":"ACTIVE"},
        {"locId":7,"descr":"Michigan","activeStatus":"ACTIVE"}
    ]
    

    TL / DR:这取决于您的实际使用情况。

    这实际上取决于您如何处理您在自定义标题中传递的信息。 如果要在信封级别传递信息,则使用自定义标头是有意义的。 我的意思是,这些信息与您想要检索的数据无关,因此不应该存储在那里,而是由封装工具使用。 一个真实世界的例子可能是一个数据服务器,可以通过不同的协议访问,例如HTTP和例如邮件(用另一封邮件回复)和专用协议。 在这种情况下,应该在enveloppe级别传递关于为什么或如何无法访问实际服务器的信息,并且会特别调整自定义响应标头。

    另一个例子是当你使用相同的工具来访问不同的信息类型。 有效载荷应该只包含实际的信息,这些信息将被透明地传递给调用者,并且错误条件可以在响应头中传递并且将由交换工具处理。

    你应该遵守的唯一规则是自定义标题应该以X-开头。

    链接地址: http://www.djcxy.com/p/48073.html

    上一篇: Using Custom Headers for Response Messages; Bad Practice?

    下一篇: Polymer expression