在服务器和客户端之间传递标识符/密钥的推荐编程模式是什么?

时间:2010-07-15 02:03:17

标签: ajax web-applications

如果我需要跟踪标识在浏览器中显示和修改的资源的密钥或标记,那么使用的编程模式是什么?

例如,如果我显示电影列表和连接ajax呼叫用户签出或查看这些电影,我假设我会在html中嵌入标识符,然后将其传递回服务器。

使用数据库密钥是不好的做法?在hrefs中公开标识符是不好的做法吗?

2 个答案:

答案 0 :(得分:1)

我认为向客户端公开资源标识符并不是一种不好的做法。这样做可能会无缘无故地复杂化您的系统。如果数据库密钥实际上是您的实体密钥,则可以透明地使用它。

我能记住在客户端显示和编辑数据的唯一模式是DTO。

关于HREF和您的标识符,REST架构甚至会建议您这样做。这是一种常见的做法; )

希望它对你有所帮助。

答案 1 :(得分:1)

首先,我建议使用 URI来识别内容。它是网络运作的核心。

将您的数据库ID暴露给客户端并不算太糟糕,但您应该考虑:

  • 了解数据库ID并使用它们来做事情的客户正在引入一种微妙的耦合形式。客户对这些ID的期望越多(例如,它们是唯一的),就越有耦合。
  • 客户是否需要知道这些项目有数据库ID?也许可以公开隐藏在URI中的ID 。客户没有任何业务可以解析URI来解决问题,因此您不会严格暴露它。
  • 如果客户需要数据库ID,那可能仅仅是显示标识符吗?然后,您可以将数据库ID嵌入到通过网络传输的数据中,但是应该以这样一种方式对其进行标记,以便只知道ID应该用于向用户显示标识符,以防它们具有既得利益(因为ID)泄露到其他地方)。

从URI中删除数据库ID建议使用另一个唯一标识符,该标识符不是某个数据库中的主键。

考虑如何Twitter自己的Twitter帐户有list of the teamhttp://twitter.com/twitter/team设计良好的URI暴露很少,因此他们可以更改整个实现,而不会出现URI问题。推特上的一条推文看起来像主键http://twitter.com/meangrape/status/18622784109,但有谁知道。