【问题标题】:Is it a good solution to use primary key使用主键是否是一个好的解决方案
【发布时间】:2021-08-29 16:27:51
【问题描述】:

我想创建自己的宠物简单项目(新闻网站)。我有几个问题:

  1. 在页面的url中使用DB实体的主键是否不正确? (“/atricles/{id}/{article.name}”)。文章可以有相同的名称,所以我不能这样做 ("/articles/{article.name}") 或者我应该在数据库中创建唯一的 BIGINT 编号来解决删除和查找文章的问题。("/articles/{specilaUniqueNumber} /{Name}")

【问题讨论】:

    标签: javascript java html url hyperlink


    【解决方案1】:

    就我在使用 POST 请求时在 API 的 Web 开发中使用的情况而言,我提供了一个 id 作为数据库条目。 此 id 可用于 PUT 请求,因此我们知道需要修改哪些条目。 我在 POST 中生成的这个条目 id 可以在 POST 响应中返回,因此使用 API 的开发人员可以在下一个 PUT 请求中使用它来向 API 定义数据库要修改的条目。 但正如我所说,这是给 POST 请求的响应,它被 POST 响应隐藏,并且在 URL 中的所有用户眼中并不是免费的。

    如果我们在 URL 中使用它,这意味着我们使用 GET 请求。我不认为把它暴露在每个人的眼睛里是那么安全的。 您应该按照您所说的创建一个包含所有普遍接受的字符的 url,这些字符不包含您在数据库中的条目的真实 ID。

    如果你想像我所说的那样向 API 提供这个 ID,你可以通过隐藏在每个用户眼中的 POST 回复来实现。 网址必须是某人可以按下以获取您的页面的内容。

    我不知道你是否明白我想对你说的。问我要不要。 但是在问题中,您没有说明在 url 中在何处以及如何使用此 id 的任何内容。您开发什么框架和应用程序。 这就是为什么我告诉你我的故事方式。我猜你开发的是宁静的服务。

    【讨论】:

    • 例如我有2篇同名文章: 1.java 2.java 当用户点击文章标题时,应该被重定向到文章页面。在数据库中创建一个特殊的唯一字段是一个很好的解决方案,我可以使用它将用户重定向到所需的文章(/article/{specIial Id,但不是主键}/{name}),还是有其他解决方案。简单地说,每次我都必须拉出最后添加的文章才能将唯一字段增加 1。我不确定这是一个好习惯。
    • 我用的是spring data + hibernate + thymleaf
    • @Iroofeee。你好朋友。如果您有 2 个具有相同名称的不同页面,您可以为此生成一个编号。如果您有 100 篇同名文章,您可以找到一种内部方法来识别每篇不同的文章。显示您的条目的确切位置或(您不做的事情)文件页面的确切路径不是一个好习惯。我个人不会公开我的服务器的确切结构或我的数据库的情况。非常感谢您的谈话。
    猜你喜欢
    • 2019-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 2012-02-18
    • 1970-01-01
    • 2011-12-18
    相关资源
    最近更新 更多