شرح إخفاء _v و _id في Node.js لتسريع عملية انشاء واجهات برمجة التطبيقات
في عالم تطوير واجهات برمجة التطبيقات (APIs)، تعتبر السرعة والفعالية احد العوامل الأساسية لضمان تجربة مستخدم ممتازة. عند العمل مع قواعد البيانات في Node.js، خاصةً مع MongoDB الغنيه عن التعريف، قد تواجه حقلين تلقائيين يتم إنشاؤهما تلقائيًا: _id و _v. هذه الحقول قد لا تكون ضرورية دائمًا للعرض في واجهة البرمجة، وقد تؤثر على أداء التطبيق إذا لم يتم التعامل معها بشكل صحيح. في هذا المقال، سنشرح كيفية إخفاء _v و _id لتحسين أداء APIs.
يُعد إخفاء _v و _id تقنية أساسية لإنشاء واجهات برمجة تطبيقات (APIs) قوية وسهلة الاستخدام في Node.js._v: هو إصدار الوثيقة، وهو رقم يزداد كلما تم تحديث الوثيقة , _id: هو معرف الوثيقة الفريد.
ما هي _v و _id؟
_v: هو إصدار الوثيقة، وهو رقم يزداد كلما تم تحديث الوثيقة.
_id: هو معرف الوثيقة الفريد.
لماذا يجب إخفاء _v و _id؟
الأمان:
_v: يمكن استخدام _v لتحديد إصدار الوثيقة.
_id: يمكن استخدام _id لتحديد هوية الوثيقة بشكل فريد.
قابلية الاستخدام:
_v: قد لا يكون _v مفيدًا للمطورين الذين يستخدمون واجهة برمجة التطبيقات (API).
_id: قد يكون _id صعبًا على المطورين الذين يستخدمون واجهة برمجة التطبيقات (API) لفهمه.
قابلية التطوير:
_v: قد يتغير _v بمرور الوقت، مما قد يؤدي إلى مشكلات في التوافق.
_id: قد يتغير _id إذا تم نقل البيانات إلى نظام آخر.
استخدام mongoose
const mongoose = require('mongoose');
const schema = new mongoose.Schema({
name: String,
age: Number,
}, {
timestamps: true,
toJSON: {
virtuals: true,
transform: (doc, ret) => {
delete ret._v;
delete ret._id;
},
},
});
const Model = mongoose.model('Model', schema);
استخدام middleware
const express = require('express');
const app = express();
app.use((req, res, next) => {
if (req.method === 'GET') {
delete req.query._v;
delete req.query._id;
}
next();
});
app.get('/endpoint', (req, res) => {
// ...
});
اخفاء _v و _id اثناء عرضها في response
User.find({},{"__id":false,"__v":false});