【问题标题】:$http requests and angular routing based on primary key or url param?基于主键或 url 参数的 $http 请求和角度路由?
【发布时间】:2017-03-22 11:56:15
【问题描述】:

我有一个关系数据库,我通过 Web 服务从中检索数据。我定义的@GET 方法基于主键。 例如,对于具有主键 1团队,我使用 @GET 请求 http://localhost:8080://teams/1 来获取与团队相关的数据:

{
 “id” : “1”,
 “name” : “Barcelona"
}

在实现我的网络应用程序时,我遇到了一个概念问题。由于我认为让最终用户看到主键 ID 不是一个好习惯,因此我保留了基于主键的请求,但是,我在我的数据库表中添加了一个名为 uri 的属性(对于巴塞罗那 uri 是 bar,依此类推)。我使用 uri 属性作为 url 中的参数。因此,如果用户点击巴塞罗那队图片,他将获得 url:http://localhost:9000/teams/bar 而不是 http://localhost:9000/teams/1,而在状态的内部实现中,我正在使用我已经在我的 web 服务中定义的请求 http://localhost:8080://teams/1,因为此时我使用请求来获取巴塞罗那的图像,我也得到了可以作为参数传递给新请求的 id:http://localhost:9000/teams/1

一切正常,但问题是如果用户直接在浏览器中输入 url:http://localhost:9000/teams/bar 而不是点击巴塞罗那图像,请求将无法工作,因为 id 不是现在。

我想知道的是,在这种情况下,最佳做法是什么?

  1. 保持行为不变?
  2. 从数据库发出请求 基于uri属性而不是主键?如果是,我为什么要 使用主键?为什么不将 uri 属性视为主要属性 钥匙?
  3. 你有什么建议?

【问题讨论】:

  • 最简单的解决方案是在您的数据库中为uri 字段创建一个索引,然后将您的Web 服务端点更改为查询uri,而不是id
  • 一般来说,我认为在 URL 中显示主键并没有什么害处,除非它本身具有某种意义(即银行帐号)。如果您担心未经授权的访问,您应该使用一些服务器端身份验证来验证是否允许用户查看与主键关联的结果。
  • 好吧,假设您说服我将请求基于 uri 属性。那么,为什么我还需要 id 属性作为主键呢?我省略了 id 并使用 uri 属性作为主键(索引)?
  • @EddyG 将uri-字段作为一个单独的字段,让您可以轻松更改它,因为您仍然使用id 作为关系中的外键。跨度>

标签: angularjs web-services web jax-rs restful-url


【解决方案1】:

作为一种解决方案,我将保留主键属性,并将 $http 请求基于 uri 属性。

要检索巴塞罗那队,我使用 url http://localhost:9000/teams/bar,它将为 http://localhost:8080/teams/bar 调用 Web 服务 $http GET 方法。主键(id 属性)对于与其他关系的连接仍然有用。

在其他情况下,如果 uri 没有价值,我会根据主键请求。例如,表格 news 有 id 和 description 属性,其中不需要 uri。只需在请求中使用 id 作为参数,如下所示:http://localhost:8080/news/123http://localhost:9000/news/123 在网络应用程序中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-16
    • 2013-08-28
    • 2015-12-25
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    相关资源
    最近更新 更多