支持RESTful服务 - 我应该使用Pragma,Cookies,自定义标头或其他东西来识别客户端会话和事务吗?

时间:2012-08-14 16:44:12

标签: rest soa

问题

我们正在使用RESTful方法构建SOA。一旦系统投入生产,我们将有许多客户使用该接口,包括内部和第三方系统。

我们希望能够在客户端应用程序提供的响应信息中使用和回显,例如: -

  • 会话ID - 可以是Java EE会话ID或任何特定于客户端的,这对支持团队和调试客户端问题非常有用,可以通过我们所有的系统跟踪它们。
  • 事务ID - 请求的唯一标识符,如果客户端异步调用服务或者我们实现202 Accepted样式的长时间运行过程,我们可以回显给客户端以帮助客户端进行请求/响应关联。

潜在解决方案

因此,坚持使用RESTful约束表明我们需要利用HTTP来实现这一点,并且我们可以实现几个选项。

  • Pragma标头 - 为transaction-id,session-id等实现扩展-pragma。这似乎是解决方案的纯粹主义,因为它使用标准的HTTP标头,虽然我担心它会成为我们无法做到的一切的倾销场要好好考虑一下。
  • X-My-Header - 我们需要的每个字段的自定义标头。可能被代理剥离,而不是核心HTTP,所以感觉反休息
  • 在查询字符串或XML / JSON表示中 - 将字段添加到我们的所有资源中。因为它是一个操作参数,所以感觉它应该作为元数据而不是资源提供。
  • Cookie - 使用Cookie和Set-Cookie来保存自定义键值;在会话ID的情况下很有用,因为大多数实现已经使用了cookie。每次都必须重新发送以支持客户端相关性,这会使得使用cookie的方式失败。

答案

这有先例吗?我们生气了吗?在我的所有研究中是否有一些明显的东西?没有人真正关心他们部署后如何支持他们的服务?我应该闭嘴并离开吗?

我希望有人可以提供帮助。

P.S。对不起,如果这是一篇文章,建议确实说“具体”....

2 个答案:

答案 0 :(得分:2)

哦,这是一种痛苦。我也去过那儿。

嗯,交易,会话等元数据的想法是个好主意。至少用于记录。

问题是设置符合各种公司策略和SOA基础架构的东西。

在HTTP的情况下,最佳设计和最大互操作性之间存在交易。

安全路径是对消息本身中的元数据进行编码。不是很好,这样的解决方案最终看起来有点像SOAP,你有一个包含所有消息标题的信封。

我最终使用X-header来获取交易ID等信息。但是,正如您所提到的,代理/ b2b网关等可能会删除标题,您可以使用所有指定的开发框架,COTS应用程序等来检索它们并不明显。因此,如果您喜欢这样,您应该避免使元数据强制要求得到一个解决方案 - 只是“很高兴”。

饼干只不过是痛苦。它们可能令人烦恼,有时甚至对浏览器交互有用,但在SOA场景中,这将是个坏主意。许多事情都可能出错,调试跨组织是一件痛苦的事。

我也会避免使用查询字符串以及POST或PUT数据。根据HTTP规范,这是可能的。但不是在随机框架中实现。

答案 1 :(得分:0)

您可以使用GUID并让客户端生成它并将其作为启动工作流/业务流程的任何请求的一部分传递。此GUID可用于关联参与工作流的多个组件。