前一段时间,我问过如何实现REST api。我已经取得了进展,但我正试图让我的大脑围绕另一个想法。
在我的api中,我会有多种类型的数据,例如人物,事件,新闻等。
现在,使用REST,一切都应该有唯一的ID。这个id,我认为它应该是整个系统的独特之处,而不仅仅是每种类型的数据。
例如,不应该有id#1的人和id为#1的新闻项。最终,这两件事情将被完全赋予不同的ID:#1唯一身份的人#1和唯一ID#2的新闻#1,因为#1是由一个人拍摄的。在数据库中,我知道您可以创建自动递增的主键。问题是,通常你有一个表为每个数据“类型”,如果你单独设置每个表的自动增量,你将得到“重复”的ID(是的,ID在他们自己的表中仍然是唯一的,但不是整个数据库)。
有一种简单的方法吗?例如,可以将所有这些表设置为使用一个增量器(我能想到如何设置它的唯一方法),或者是否需要创建一个包含这些全局ID的表,并将它们绑定到表和该表中的唯一ID?
答案 0 :(得分:1)
您可以使用GUID,它们在任何地方都是唯一的(无论如何都是为了所有意图和目的)。
答案 1 :(得分:0)
+1 UUID(请注意GUID是UUID standard的特定Microsoft实现)
有一个内置函数uuid(),用于将UUID生成为文本。您可能可以在其前面添加表名,以便以后可以轻松识别它。
每次调用uuid()
都会为您生成一个全新的值(如文本)。因此,使用上述前缀方法,INSERT
查询可能如下所示:
INSERT INTO my_table VALUES (CONCAT('my_table-', UUID()), ...)
不要忘记让这个列varchar足够大,当然也为它创建一个索引。
答案 2 :(得分:0)
现在,使用REST,一切都应该有唯一的ID。这个身份,我接受 它应该是整个系统的独特之处,而不仅仅是每种类型的系统 数据
这根本不是真的。每个资源都需要一个唯一的标识符,是的,但在HTTP系统中,这意味着一个唯一的URI。 /people/1
和/news/1
是唯一的URI。通过约束系统,没有的好处(实际上是很多痛苦,正如您所发现的那样),/news/1
必须改为/news/0983240-2309843-234802/
才能避免冲突。