تم طرح واجهة برمجة التطبيقات Web SQL Database API في نيسان (أبريل) 2009، والتي تتيح لك تخزين البيانات بطريقة منظَّمة على كمبيوتر المستخدم (تستند داخليًا إلى محرك قاعدة بيانات SQLite)، ثم تم إيقافها نهائيًا في تشرين الثاني (نوفمبر) 2010. على الرغم من أنّه تم تنفيذ هذه الميزة في WebKit (الذي يشغّل Safari) وظلّت نشطة في محرك Blink (الذي يشغّل Chrome)، لم يتم تنفيذ هذه الميزة في Gecko (الذي يشغّل Firefox) وأزالها WebKit في عام 2019.
يشجّع اتحاد شبكة الويب العالمية (W3C)
مستخدمي قواعد بيانات الويب على استخدام تكنولوجيات
Web Storage API
مثل
localStorage
و
sessionStorage
،
أو
IndexedDB، إذا كانوا بحاجة إلى ذلك.
تُظهر هذه التقنيات نقاط قوتها عندما يتعلق الأمر بمخازن المفاتيح/القيم والبيانات
المنظَّمة، ولكن من المعروف أنّ لها أيضًا نقاط ضعف، مثل عدم توفّر
لغة استعلامات فعّالة. هناك سبب وراء رغبة المستخدمين في استخدام لغة SQL على الويب.
خطوات إيقاف Web SQL نهائيًا وإزالتها
- [ تم.] تم إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها من سياقات الجهات الخارجية في Chromium 97 ( 4 كانون الثاني (يناير) 2022).
- [ تم.] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في السياقات غير الآمنة نهائيًا اعتبارًا من Chromium 105 ( 4 كانون الثاني (يناير) 2022)، وفي ذلك الوقت، ظهرت رسالة تحذير في لوحة المشاكل في "أدوات مطوّري البرامج في Chrome".
- [ تم.] لم يعُد الوصول إلى لغة الاستعلامات البنيوية على الويب (Web SQL) في السياقات غير الآمنة متاحًا اعتبارًا من الإصدار 110 من Chromium ( 4 كانون الثاني (يناير) 2022). تتوفّر سياسة مؤسسة لمواصلة استخدام الميزة من Chromium 110 ( 4 كانون الثاني (يناير) 2022) إلى Chromium 123 ( 4 كانون الثاني (يناير) 2022).
- [ تم.] تم إيقاف إمكانية الوصول إلى Web SQL في جميع السياقات نهائيًا اعتبارًا من الإصدار 115 من Chromium ( 4 كانون الثاني (يناير) 2022)، ويتم عرض رسالة تحذير في لوحة المشاكل في "أدوات مطوّري البرامج في Chrome".
- [فترة تجريبية لإيقاف الميزة نهائيًا للحفاظ على استخدام Web SQL، وذلك من الإصدار 117 من Chromium ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022). لمعرفة مزيد من المعلومات عن الفترات التجريبية للإيقاف النهائي، يُرجى الاطّلاع على مقالة البدء في استخدام الفترات التجريبية للإصدارات الأصلية. تم.] كانت هناك
- [ تم.] لم يعُد الوصول إلى لغة الاستعلامات البنيوية على الويب (WebSQL) في جميع السياقات متاحًا بدءًا من الإصدار 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 في مقالة المدونة التي كتبها فلاديمير فوكويفيتش، أحد موظفي Mozilla السابقين. للاطّلاع على المزيد من المعلومات عن الإصدارات السابقة، يمكنك الاطّلاع على محاضر اجتماعات مجموعة عمل تطبيقات الويب في W3C (وإذا أردت الاطّلاع على التفاصيل، يمكنك قراءة سجلّات IRC) وأرشيف القائمة البريدية). بالإضافة إلى ذلك، تقدّم مدوّنة "نولان لاوسون" لمحة عامة جيدة عن ما حدث.
ملاحظات
إذا كانت لديك أي استفسارات حول خطوات إيقاف الميزة نهائيًا الموضّحة في هذا الردّ، يُرجى إعلامنا بها على قائمة blink-dev البريدية. يمكن لأي مستخدم الانضمام إلى هذه المجموعة، ويُسمح له بالنشر فيها.
روابط ذات صلة
- إدخال ChromeStatus: إيقاف WebSQL نهائيًا وإزالته في سياقات الجهات الخارجية
- إدخال ChromeStatus: إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها في السياقات غير الآمنة
- الغرض من الإيقاف النهائي والإزالة: WebSQL في سياقات الجهات الخارجية
- النيّة لإيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها: WebSQL في سياقات غير آمنة
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها في سياقات الجهات الخارجية
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها في السياقات غير الآمنة
- مشكلة في Chromium: إيقاف WebSQL نهائيًا وإزالتها (Window#openDatabase)
- SQLite Wasm في المتصفّح مع الاحتفاظ بـ Origin Private File System