إيقاف لغة الاستعلامات البنيوية (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) على الويب في السياقات غير الآمنة اعتبارًا من الإصدار 105 من Chromium ( 4 كانون الثاني (يناير) 2022) حيث ظهرت رسالة تحذير ضمن لوحة مشاكل "أدوات مطوري البرامج في Chrome".

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

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

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

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

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

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

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

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

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

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

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

لم يتم تصميم SQLite في البداية لتشغيل عبارات SQL ضارة، ومع ذلك فإن تنفيذ لغة الاستعلامات البنيوية (SQL) على الويب يعني أن المتصفحات يجب أن تفعل ذلك بالضبط. إن الحاجة إلى مواكبة إصلاحات الأمان والثبات تفرض تحديث SQLite في Chromium. يأتي هذا في تضارب مباشر مع مطلب Web SQL الخاص بالتصرف تمامًا مثل SQLite 3.6.19.

شكل واجهة برمجة التطبيقات

لغة SQL على الويب هي أيضًا واجهة برمجة تطبيقات تعرض العمر. ونظرًا لكونك طفلاً في أواخر العقد الأول من القرن الحادي والعشرين، فهذا مثال رائع على عبارة "جحيم معاودة الاتصال"، كما يتضح من نموذج الرمز التالي (courtesy of Nolan Lawson). فكما ترى، يتم تمرير عبارات 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"، هذه هي النتيجة:

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

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

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

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

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

إضافة ملاحظات

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

شكر وتقدير

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