[英]How to expose MongoDB documents primary keys in a REST API?
我正在使用MongoDB + nodeJS構建REST API。 所有文檔都已存儲,並使用_id作為主鍵。 我在這里讀到,我們不應該公開_id,而應該使用另一個非增量ID。
在數據庫中,文檔表示為:
{
_id: ObjectId("5d2399b83e9148db977859ea")
bookName: "My book"
}
對於以下端點,應如何公開文檔?
GET /books
GET /books/{bookId}
目前,我的API返回:
{
_id: "5d2399b83e9148db977859ea"
bookName: "My book"
}
但它應該返回如下內容:
{
id: "some-unique-id-generated-on-creation"
bookName: "My book"
}
問題
我是否應該公開_id以便進行如下查詢:
GET / books / 5d2399b83e9148db977859ea
我應該使用UUID代替ID作為ID嗎?
回答您的問題。
您可以公開_id,以便經過身份驗證的用戶可以對該_id進行查詢,例如GET,PUT和PATCH。
MongoDB具有支持,允許您生成自己的BSON ID並使用它,而不是mongodb在插入過程中創建它自己的_id。
有沒有必要重復的邏輯,_id的主要目的是分別確定每個文檔並且具有兩個ID列意味着你存儲的冗余數據,遵循DRY(不要重復自己)原則上盡可能。
在后端使用_id並不是一個壞習慣。
希望這可以幫助!
假設您使用的是Mongoose,則可以使用“虛擬”,這實際上是Mongoose創建的偽字段。 它們沒有存儲在數據庫中,只是在運行時填充:
// Duplicate the ID field.
Schema.virtual('id').get(function(){
return this._id.toHexString();
});
// Ensure virtual fields are serialised.
Schema.set('toJSON', {
virtuals: true
});
每當在您從此模式創建的模型上調用toJSON時,它將包含一個與Mongo生成的_id字段匹配的'id'字段。 同樣,您可以以相同的方式為toObject設置行為。
您可以參考以下文檔:
1) https://mongoosejs.com/docs/api.html
2) toObject方法
就我而言,是否存在安全風險,但是我的_id是文檔中任何在語義上被視為關鍵字的字段的串聯,即,如果我將名字,姓氏和電子郵件作為標識符,並且第四個字段,例如Age作為屬性,則_id將是所有這三個字段的串聯。 只要我有名字,姓氏和電子郵件信息,獲取和更新此類記錄就不會困難
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.