تم طرح واجهة برمجة التطبيقات Web SQL Database API في نيسان (أبريل) 2009، والتي تتيح لك تخزين البيانات بطريقة منظَّمة على كمبيوتر المستخدم (تستند داخليًا إلى محرك قاعدة بيانات SQLite)، ثم تم إيقافها نهائيًا في تشرين الثاني (نوفمبر) 2010. على الرغم من أنّه تم تنفيذ هذه الميزة في WebKit (الذي يشغّل Safari) وظلّت نشطة في محرك Blink (الذي يشغّل Chrome)، لم يتم تنفيذ هذه الميزة في Gecko (الذي يشغّل Firefox) وأزالها WebKit في عام 2019.
يشجّع اتحاد شبكة الويب العالمية (W3C)
مستخدمي قواعد بيانات الويب على استخدام تكنولوجيات
Web Storage API
مثل
localStorage
و
sessionStorage
،
أو
IndexedDB، إذا كانوا بحاجة إلى ذلك.
تُظهر هذه التقنيات نقاط قوتها عندما يتعلق الأمر بمخازن المفاتيح/القيم والبيانات
المنظَّمة، ولكن من المعروف أنّ لها أيضًا نقاط ضعف، مثل عدم توفّر
لغة استعلامات فعّالة. هناك سبب وراء رغبة المستخدمين في الحصول على SQL على الويب.
خطوات إيقاف لغة الاستعلامات البنيوية (SQL) على الويب وإزالتها
- [ تم.] تم إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها من سياقات الجهات الخارجية في Chromium 97 ( 4 كانون الثاني (يناير) 2022).
- [ تم.] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في السياقات غير الآمنة نهائيًا اعتبارًا من الإصدار 105 من Chromium ( 4 كانون الثاني (يناير) 2022)، وفي ذلك الوقت، ظهرت رسالة تحذير في لوحة المشاكل في "أدوات مطوّري البرامج في Chrome".
- [ تم.] لم يعُد الوصول إلى لغة الاستعلامات البنيوية على الويب (Web SQL) في السياقات غير الآمنة متاحًا اعتبارًا من الإصدار 110 من Chromium ( 4 كانون الثاني (يناير) 2022). تتوفَّر سياسة مؤسسة لمواصلة استخدام الميزة من الإصدار 110 من Chromium ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022).
- [تم .] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في جميع السياقات نهائيًا اعتبارًا من Chromium 115 ( 4 كانون الثاني (يناير) 2022) وستظهر رسالة تحذير في لوحة مشاكل "أدوات مطوري البرامج في Chrome".
- [تم فترة تجريبية لإيقاف الميزة نهائيًا للحفاظ على استخدام Web SQL، وذلك من الإصدار 117 من Chromium ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022). لمعرفة مزيد من المعلومات عن الفترات التجريبية للإيقاف النهائي، يُرجى الاطّلاع على مقالة البدء في استخدام الفترات التجريبية للإصدارات الأصلية. .] كانت هناك
- [ تم.] لم يعُد الوصول إلى Web SQL في جميع السياقات متاحًا بدءًا من الإصدار Chromium 119.
الخطوة التالية
كما هو موضّح في المقدمة، فإنّ تقنيات
Web Storage API
، مثل
localStorage
و
sessionStorage
،
أو معيار
IndexedDB
، هي بدائل جيدة في العديد من الحالات، ولكن ليس في جميعها.
الأسباب المنطقية لترك مساحة التخزين لمطوّري الويب
مع ظهور Wasm، يمكن استخدام حلول SQL أو NoSQL على الويب. ومن الأمثلة على ذلك DuckDB-Wasm، وabsurd-sql. استنادًا إلى هذه التصاميم، نرى أنّه بإمكان منتدى المطوّرين إنشاء حلول تخزين جديدة وتحسينها بشكل أسرع وأفضل من مورّدي المتصفّحات.
لا ننوي إزالة Web SQL فقط. لقد استبدلنا هذه الميزة بميزة أخرى سيتولى منتدى البرامج مفتوحة المصدر صيانتها، وسيتم تقديمها كحزمة يمكن تحديثها متى شئت، بدون تحمل عبء تقديم إصلاحات وميزات جديدة مباشرةً في المتصفّحات. هدفنا هو السماح للمطوّرين بنقل قاعدة بياناتهم إلى الويب.
بالإضافة إلى ذلك، نأمل أن يساعد هذا المثال في ازدهار منظومة متكاملة جديدة من قواعد البيانات المفتوحة المصدر. أخيرًا، يوفّر إصدار أرقام تعريف الوصول إلى نظام الملفات الطريقة الأساسية الجديدة التي يمكن إنشاء حلول تخزين مخصّصة استنادًا إليها.
أسباب إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا
المخاوف المتعلقة بالاستدامة والأمان
لا يمكن تنفيذ مواصفات Web SQL بشكل مستدام، ما يحدّ من الابتكار والميزات الجديدة. ينصّ الإصدار الأخير من المعيار على نحو دقيق على ما يلي: "يجب أن تُنفِّذ وكلاء المستخدمين لهجة SQL المتوافقة مع Sqlite 3.6.19".
لم يتم تصميم SQLite في الأساس للقيام بتنفيذ جُمل SQL ضارة، ولكن تنفيذ Web SQL يعني أنّه على المتصفّحات تنفيذ ذلك بالضبط. تتطلّب الحاجة إلى مواكبة إصلاحات الأمان والثبات تحديث SQLite في Chromium. يتعارض ذلك مباشرةً مع متطلبات Web SQL التي تقضي بأن يعمل بالطريقة نفسها تمامًا التي يعمل بها SQLite 3.6.19.
شكل واجهة برمجة التطبيقات
لغة SQL على الويب هي أيضًا واجهة برمجة تطبيقات تعرض عمرها. وبما أنّه من أواخر الألفية الثانية، يمثّل مثالاً رائعًا على "جحيم الاستدعاءات"، كما يوضّح نموذج الرمز البرمجي التالي (بإذن من "نولان لاوسون") . كما ترى، يتم تمرير عبارات SQL (باستخدام لهجة SQL في SQLite) كسلاسل ومقدَّمة إلى طرق قاعدة البيانات.
openDatabase(
// Name
'mydatabase',
// Version
1,
// Display name
'mydatabase',
// Estimated size
5000000,
// Creation callback
function (db) {
db.transaction(
// Transaction callback
function (tx) {
// Execute SQL statement
tx.executeSql(
// SQL statement
'create table rainstorms (mood text, severity int)',
// Arguments
[],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'insert into rainstorms values (?, ?)',
// Arguments
['somber', 6],
// Success callback
function () {
// Execute SQL statement
tx.executeSql(
// SQL statement
'select * from rainstorms where mood = ?',
// Arguments
['somber'],
// Success callback
function (tx, res) {
// Do something with the result
var row = res.rows.item(0);
console.log(
'rainstorm severity: ' +
row.severity +
', my mood: ' +
row.mood,
);
},
);
},
);
},
);
},
// Error callback
function (err) {
console.log('Transaction failed!: ' + err);
},
// Success callback);
function () {
console.log('Transaction succeeded!');
},
);
},
);
إذا أردت تشغيل هذا الرمز وفحص الجدول الذي تم إنشاؤه باستخدام "أدوات مطوري البرامج في Chrome"، هذه هي النتيجة:
عدم توفّر دعم للمنفّذين
بصرف النظر عن شكل واجهة برمجة التطبيقات غير الواضح (على الأقل من وجهة نظر اليوم)، كانت لدى Mozilla العديد من المخاوف بشأن لغة الاستعلامات البنيوية (SQL) على الويب التي تم إنشاؤها على SQLite:
"لا نعتقد أنّ [SQLite] هي الأساس الصحيح لواجهة برمجة التطبيقات التي تعرض محتوى الويب العام، على سبيل المثال لا الحصر، بسبب عدم توفّر معيار موثوق به ومقبول على نطاق واسع يعمل على جعل SQL (لغة الاستعلام البنيوية) فرعيًا بطريقة مفيدة. بالإضافة إلى ذلك، لا نريد أن تؤثر التغييرات التي تطرأ على SQLite في الويب لاحقًا، ولا نعتقد أنّ استخدام إصدارات المتصفّحات الرئيسية (ومعيار الويب) مع SQLite هو إجراء حكيم".
يمكنك القراءة بشأن مخاوف Mozilla في مشاركة المدونة السابقة "موزيلا فلاديمير فوكيفيتش". للاطّلاع على المزيد من المعلومات عن الإصدارات السابقة، يمكنك الاطّلاع على محاضر اجتماعات مجموعة عمل تطبيقات الويب في W3C (وإذا أردت الاطّلاع على التفاصيل، يمكنك قراءة سجلّات IRC) وأرشيف القائمة البريدية). بالإضافة إلى ذلك، تقدّم مشاركة المدونة التي نشرها "نولان لوسون" نظرة عامة جيدة حول ما حدث.
ملاحظات
إذا كان لديك أي مخاوف بشأن خطوات الإيقاف التي تم ذكرها في هذه المشاركة، يُرجى إعلامنا بها من خلال القائمة البريدية لمطوّري البرامج blink-dev. العضوية في هذه المجموعة مفتوحة للجميع، ويُسمح لأي شخص بالنشر.
روابط ذات صلة
- إدخال ChromeStatus: إيقاف WebSQL نهائيًا وإزالتها في سياقات الجهات الخارجية
- إدخال ChromeStatus: إيقاف WebSQL نهائيًا وإزالتها في السياقات غير الآمنة
- الغرض من الإيقاف النهائي والإزالة: WebSQL في سياقات الجهات الخارجية
- نيّة الإيقاف والإزالة: WebSQL في السياقات غير الآمنة
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها في سياقات تابعة لجهات خارجية
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها في سياقات غير آمنة
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها (Window#openDatabase)
- SQLite Wasm في المتصفّح مع الاحتفاظ بـ Origin Private File System