$ http请求和基于主键或url参数的角度路由?

时间:2017-03-22 11:56:15

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

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

作为解决方案,我将保留主键属性,并且我将在uri属性上重新定义$ http请求。

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

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