إيقاف لغة الاستعلامات البنيوية (SQL) على الويب وإزالتها

تم طرح واجهة برمجة التطبيقات Web SQL Database API، التي تسمح لك بتخزين البيانات بطريقة منظَّمة على جهاز كمبيوتر المستخدم (استنادًا داخليًا إلى محرك قاعدة بيانات SQLite)، وذلك في نيسان (أبريل) 2009 والتخلي عنها في تشرين الثاني (نوفمبر) 2010. وعلى الرغم من أنّ واجهة برمجة التطبيقات WebKit (التي تدير متصفّح Safari) وظلّت نشطة في محرّك Blink (الذي يشغّل Chrome)، لم تنفِّذ Gecko (الذي يشغّل Firefox) هذه الميزة مطلقًا وأزالت WebKit هذه الميزة في عام 2019.

يشجع اتحاد شبكة الويب العالمية (W3C) أولئك الذين يحتاجون إلى قواعد بيانات على الويب على تبني تقنيات Web Storage API مثل localStorage وsessionStorage أو IndexedDB. تُظهر هذه التكنولوجيات نقاط قوتها عندما يتعلق الأمر بمخازن المفاتيح/القيم والبيانات المنظَّمة، ومع ذلك، من المعترف به أيضًا أن فيها نقاط ضعف مثل عدم وجود لغة استعلام قوية. يريد الأشخاص استخدام SQL على الويب لسبب ما.

خطوات إيقاف لغة الاستعلامات البنيوية (SQL) على الويب وإزالتها

  • [تم .] تم إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا وإزالتها بسبب سياقات الجهات الخارجية في Chromium 97 ( 4 كانون الثاني (يناير) 2022).
  • [تم .] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في السياقات غير الآمنة اعتبارًا من Chromium 105 ( 4 كانون الثاني (يناير) 2022) حيث ظهرت رسالة تحذير في لوحة مشاكل "أدوات مطوري البرامج في Chrome".

تم نهائيًا إيقاف لوحة مشاكل "أدوات مطوري البرامج في Chrome" التي تعرض تحذيرًا يشير إلى أنّ لغة الاستعلامات البنيوية (SQL) على الويب في سياقات غير آمنة.

  • [تم .] لن تتوفّر إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في السياقات غير الآمنة اعتبارًا من Chromium 110 ( 4 كانون الثاني (يناير) 2022). تتوفَّر سياسة مؤسسة لمواصلة استخدام الميزة من Chromium 110 ( 4 كانون الثاني (يناير) 2022) إلى الإصدار 123 من Chromium ( 4 كانون الثاني (يناير) 2022).
  • [تم .] تم إيقاف إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في جميع السياقات نهائيًا اعتبارًا من Chromium 115 ( 4 كانون الثاني (يناير) 2022) وستظهر رسالة تحذير في لوحة مشاكل "أدوات مطوري البرامج في Chrome".
  • [تم .] ّر فترة تجريبية للإيقاف النهائي لمواصلة استخدام لغة الاستعلامات البنيوية (SQL) على الويب من Chromium 117 ( 4 كانون الثاني (يناير) 2022) إلى Chromium 123 ( 4 كانون الثاني/يناير 2022) لمزيد من المعلومات عن تجارب الإيقاف النهائي، يُرجى الاطّلاع على بدء استخدام مراحل التجربة والتقييم.
  • [تم .] لن تتوفّر إمكانية الوصول إلى لغة الاستعلامات البنيوية (SQL) على الويب في جميع السياقات من Chromium 119.

الخطوات التالية

كما أشرنا في المقدمة، تُعدّ تقنيات Web Storage API، مثل: localStorage وsessionStorage أو معيار IndexedDB، بدائل جيدة في العديد من الحالات، ولكنها ليست في جميع الحالات.

أسباب ترك مساحة التخزين لمطوّري البرامج على الويب

مع ظهور Wasm، يمكن أن تأتي حلول SQL أو NoSQL إلى الويب. أحد الأمثلة على ذلك هو DuckDB-Wasm، والثاني هو absurd-sql. استنادًا إلى هذه الابتكارات، نشعر أنّه بإمكان منتدى المطوّرين العمل على حلول جديدة لسعة التخزين وإنشاءها بشكل أسرع وأفضل من مورّدي المتصفحات.

ولا نخطّط لإزالة لغة الاستعلامات البنيوية (SQL) على الويب فقط. في الواقع، تم استبدالها بشيء يحتفظ به منتدى البرامج المفتوحة المصدر ويكون عبارة عن حزمة يمكن تحديثها عند الحاجة بدون الحاجة إلى إدخال إصلاحات وميزات جديدة مباشرةً في المتصفحات. هدفنا هو السماح للمطورين بجلب قاعدة بياناتهم الخاصة إلى الويب.

بالإضافة إلى ذلك، نأمل أن يساعد هذا المثال في ازدهار منظومة متكاملة جديدة من قواعد البيانات المفتوحة المصدر. أخيرًا، يوفّر إصدار أرقام تعريف الوصول إلى نظام الملفات الطريقة الأساسية الجديدة التي يمكن إنشاء حلول تخزين مخصّصة استنادًا إليها.

أسباب إيقاف لغة الاستعلامات البنيوية (SQL) على الويب نهائيًا

المخاوف المتعلقة بالاستدامة والأمان

لا يمكن تطبيق مواصفات لغة الاستعلامات البنيوية (SQL) على الويب بشكل مستدام، ما يحدّ من الابتكار والميزات الجديدة. يشير هذا المصطلح إلى آخر إصدار من الصيغة العادية يُذكر حرفيًا "يجب على برامج وكيل المستخدم تنفيذ لغة SQL التي تتوافق مع إصدار Sqlite 3.6.19".

لم يتم تصميم SQLite في البداية لتشغيل عبارات SQL الضارة، ومع ذلك فإن تنفيذ SQL Web يعني أن المتصفحات يجب أن تفعل ذلك بالضبط. تتطلب الحاجة لمواكبة إصلاحات الأمان والثبات تحديث SQLite في Chromium. وهذا يتعارض بشكل مباشر مع متطلبات لغة الاستعلامات البنيوية (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"، هذه هي النتيجة:

يؤدي فحص قسم Web SQL (لغة الاستعلامات البنيوية) على الويب في Chrome DevTools إلى إظهار قاعدة بيانات تسمى mydatabase مع جدول يسمى "العواصف المطيرة" مع حالة العمود (نصي) ومستوى الخطورة (عدد صحيح) ويحتوي على إدخال واحد يحمل حالة حزينة وشدة ستة.

عدم توفّر الدعم المتعلّق بأداة التنفيذ

بصرف النظر عن شكل واجهة برمجة التطبيقات الغامضة (من وجهة نظر اليوم على الأقل)، كان لدى Mozilla العديد من المخاوف بشأن إنشاء لغة SQL على الويب استنادًا إلى SQLite:

"لا نعتقد أنّ [SQLite] هي الأساس الصحيح لواجهة برمجة التطبيقات التي تعرض محتوى الويب العام، وليس على الأقل بسبب عدم توفّر معيار موثوق به ومقبول على نطاق واسع يجعل مجموعات SQL الفرعية بطريقة مفيدة. بالإضافة إلى ذلك، لا نريد أن تؤثر التغييرات التي يتم إجراؤها على SQLite على الويب لاحقًا، ولا نعتقد أنّ الاستفادة من إصدارات المتصفحات الرئيسية (ومعيار الويب) لاستخدام SQLite هو أمر حكيم".

يمكنك القراءة بشأن مخاوف Mozilla في مشاركة المدونة السابقة "موزيلا فلاديمير فوكيفيتش". للاطّلاع على مزيد من المعلومات حول سجلّ العمل، يُرجى الاطّلاع على محاضر مجموعة عمل تطبيقات الويب W3C (وإذا أردت معرفة التفاصيل، يُرجى الاطّلاع على سجلات IRC) وأرشيفات القوائم البريدية. بالإضافة إلى ذلك، تقدّم مشاركة المدونة التي نشرها "نولان لوسون" نظرة عامة جيدة حول ما حدث.

ملاحظات

إذا كان لديك أي مخاوف بشأن خطوات الإيقاف التي تم ذكرها في هذه المشاركة، يُرجى إعلامنا بها من خلال القائمة البريدية لمطوّري البرامج blink-dev. العضوية في هذه المجموعة مفتوحة للجميع، ويُسمح لأي شخص بالنشر.

شكر وتقدير

تمت مراجعة هذه المقالة بواسطة جو ميدلي وبن مورس وجوشوا بيل.