我正在使用 MERN 堆栈开发一个食谱共享 Web 应用程序,我计划使用这种 url 来显示食谱信息
../recipe/:recipeName/:id
我想知道在 url 中使用 Mongodb 自动生成的 id 是否是一个不好的做法,或者我是否应该生成一个单独的公共 id。该项目是针对我的作品集的,我希望避免各种不良做法,以免吓跑招聘人员。
提前致谢!
您在示例中描述的内容称为“RESTful 服务 URL”,非常适合设计 API 或 Web 应用程序。 请小心您的
URL 深度,因为最佳实践是将其限制为 resource/identifier/resource
,任何更深的深度都建议对您的设计进行审查。
ObjectId
是一个很好的标识符候选者,可以唯一地标识数据库中的资源,以便您可以在 url 中使用它们。只是不要在 url 中暴露任何敏感信息,并确保您拥有身份验证和授权来保护您的路由,尤其是那些会改变数据的路由。
公开 objectId 并不是一个好习惯。我个人认为这不存在安全风险,但它可能看起来不专业。
可能会更好。
现在,确实,MongoDB
ObjectId
是一个完美的数据片段,12 个字节,具有非常广泛的域。但我看到两个缺点:
时间戳嵌入在ObjectId
> q = new ObjectId("656cb6485731880768c46e34");
ObjectId("656cb6485731880768c46e34")
> q.getTimestamp();
ISODate("2023-12-03T17:09:28.000Z")
ObjectId
_id
比oracle和postgres中的ROWID
和ctid
更持久。例如,它是一个真正独立的数据类型,就像 UUID 一样。但它仍然与 MongoDB “环境”相关。
_id
具有自动生成的特殊功能。
此外,请考虑转储和重新加载数据的影响。如果您无法完全控制_id
(假设这是您正在使用的
ObjectId
),那么最终可能会得到与过去生成的 URL 不匹配的 new
ObjectId
。