تطبيق بروتوكول مصدر بيانات أدوات المخططات (الإصدار 0.6)

توضّح هذه الصفحة كيف يمكنك تنفيذ خدمة تتوافق مع بروتوكول مصدر البيانات لأدوات الرسوم البيانية لعرض البيانات في الرسوم البيانية باستخدام فئة طلب البحث.

المحتويات

الجمهور

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

هذه الصفحة مخصّصة أيضًا للقرّاء المهتمين بفهم بروتوكول الأسلاك المستخدَم للتواصل بين العرض المرئي للعميل ومصدر البيانات.

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

لقراءة هذا المستند، يجب أن تفهم البنية الأساسية لطلبات JSON وHTTP. يجب عليك أيضًا أن تفهم كيفية عمل المخططات من منظور المستخدم.

ملاحظة: لا تدعم Google أو تدعم رسميًا أي مصادر بيانات غير تابعة لـ Google ومتوافقة مع بروتوكول مصدر بيانات أدوات المخططات.

نظرة عامة

يمكنك تنفيذ بروتوكول مصدر بيانات أدوات المخططات لتصبح موفر مصدر بيانات للمخططات الخاصة بك أو المخططات الأخرى. يعرض مصدر بيانات أدوات الرسوم البيانية عنوان URL يُسمّى عنوان URL لمصدر البيانات والذي يمكن للرسم البياني إرسال طلبات HTTP GET إليه. استجابةً لذلك، يعرض مصدر البيانات بيانات منسّقة بشكل صحيح يمكن أن يستخدمها الرسم البياني لعرض الرسم على الصفحة. ويُعرف بروتوكول استجابة الطلب هذا باسم البروتوكول السلكي لواجهة برمجة التطبيقات Google Visualization API.

يمكن استخراج البيانات التي يعرضها مصدر بيانات من مصادر مختلفة، مثل ملف أو قاعدة بيانات. الشرط الوحيد هو أنّه يمكنك تنسيق البيانات كجدول ثنائي الأبعاد يتضمّن أعمدة مكتوبة.

كمصدر بيانات لأدوات المخططات، يجب تحليل الطلب بتنسيق معين وعرض رد بتنسيق معين. يمكنك إجراء ذلك بإحدى الطريقتين العامتين:

  • استخدِم إحدى المكتبات المساعدة التالية للتعامل مع الطلب والاستجابة، وأنشئ DataTable لعرضه. إذا كنت تستخدم إحدى هذه المكتبات، عليك كتابة الرمز المطلوب فقط لإتاحة بياناتك للمكتبة على شكل جدول.
    • مكتبة مصدر بيانات Java: لمعالجة الطلب والاستجابة وإنشاء جدول الردود من البيانات التي تقدّمها وتنفيذ لغة طلب البحث بلغة الاستعلامات البنيوية (SQL) في أدوات الرسومات البيانية من Google.
    • مكتبة مصدر بيانات Python: يؤدي هذا الخيار إلى إنشاء جدول ردود يؤدي إلى إنشاء بنية الاستجابة. لا يعالج تحليل الطلب أو تنفيذ لغة طلب بحث SQL لأدوات الرسوم البيانية من Google.

      أو

  • كتابة مصدر بياناتك الخاص من البداية من خلال معالجة الطلب وإنشاء جدول بيانات وإرسال الرد

طريقة عمل هذا المقياس:

  1. يعرض مصدر البيانات عنوان URL يُسمى عنوان URL لمصدر البيانات الذي ترسل إليه الرسوم البيانية طلب HTTP GET.
  2. يقدّم العميل طلب HTTP GET باستخدام مَعلمات تصف التنسيق الذي يجب استخدامه للبيانات المعروضة وسلسلة طلب بحث اختيارية ومَعلمات مخصَّصة اختيارية.
  3. يتلقّى مصدر البيانات الطلب ويحلّله، كما هو موضّح في تنسيق الطلب.
  4. ويحضّر مصدر البيانات البيانات بالتنسيق المطلوب، ويكون عادةً جدول JSON. يتم تناول تنسيقات الردود في القسم تنسيق الرد. يمكن أن يتيح مصدر البيانات اختياريًا استخدام لغة طلب البحث في واجهة برمجة التطبيقات Visualization API التي تحدد التصفية والترتيب وغير ذلك من أساليب معالجة البيانات.
  5. ينشئ مصدر البيانات استجابة HTTP تتضمن البيانات المتسلسلة ومَعلمات الاستجابة الأخرى، ويُعيد إرسالها إلى العميل كما هو موضّح في تنسيق الاستجابة.

ملاحظة: جميع المعلَمات والقيم الثابتة للسلاسل المدرَجة في هذا المستند للطلبات والاستجابات (مثل responseHandler و "OK") تكون صغيرة وحسّاسة لحالة الأحرف.

الحد الأدنى من المتطلبات

في ما يلي الحد الأدنى من المتطلبات لتكون مصدر بيانات أدوات الرسم البياني:

  • يجب أن يقبل مصدر البيانات طلبات HTTP GET، ويجب أن يكون متاحًا لعملائك.
  • يمكن أن يتغيّر البروتوكول وأن يتوافق مع مخطَّط الإصدار (الإصدار الحالي هو 0.6)، لذا يجب أن يتيح مصدر بياناتك الطلبات التي تستخدم الإصدارات السابقة بالإضافة إلى الإصدار الحالي. عليك محاولة إتاحة الإصدارات الجديدة فور طرحها لتجنُّب تعطُّل أي برامج تتم ترقيتها إلى أحدث إصدار بسرعة.
  • ولا تفشل إذا تم إرسال خصائص غير معروفة كجزء من الطلب. ويرجع ذلك إلى أنّ الإصدارات الجديدة يمكن أن تقدّم سمات جديدة لست على عِلم بها.
  • تحليل السمات التي تتوقّعها فقط: وعلمًا أنّ الإصدارات الجديدة قد تقدّم سمات جديدة، لا تتجاهل سلسلة الطلب بالكامل وتستخدم سلسلة الطلبات بأكملها. لحماية نفسك من الهجمات الضارّة، عليك تحليل واستخدام السمات التي تتوقعها فقط.
  • وثِّق متطلبات مصدر البيانات بعناية إذا كنت لا تُرمّز الرسوم البيانية الخاصة بالعميل بنفسك. ويشمل ذلك توثيق المعلومات التالية:
    • وأي معلمات مخصصة تقبلها
    • ما إذا كان بإمكانك تحليل لغة طلب البحث في Google Visualization API أم لا
    • نوع البيانات التي تعرضها وبنية تلك البيانات (ما تمثّله الصفوف والأعمدة، وأي تصنيفات)
  • اتّخاذ جميع احتياطات الأمان العادية للمواقع الإلكترونية التي تقبل الطلبات من العملاء غير المعروفين. يمكنك توفير خوارزمية MD5 والتجزئة وآليات أمان أخرى بشكل معقول في المَعلمات لمصادقة الطلبات أو المساعدة في الحماية من الهجمات الضارّة، وتوقّع أن يكون العملاء على عِلم بمتطلباتك وأن يردّوا عليها. مع ذلك، احرص على توثيق جميع متطلباتك جيدًا إذا كنت لا تعمل على ترميز الرسومات البيانية بنفسك. يُرجى الاطّلاع على اعتبارات الأمان أدناه.
  • يجب أن تكون جميع سلاسل الطلبات والاستجابة بترميز UTF-8.
  • تنسيق الردّ الأهم هو JSON. واحرص على تنفيذ تنسيق JSON أولاً، لأنّه التنسيق المستخدَم في معظم الرسومات البيانية. ويمكنك إضافة أنواع أخرى من الردود بعد ذلك.
  • لست ملزمًا بتوفير لغة طلبات البحث في واجهة برمجة التطبيقات Visualization، ولكنها تجعل مصدر بياناتك أكثر فائدة للعملاء.
  • أنت لست مطلوبًا لإتاحة الطلبات من أي نوع من أنواع الرسوم البيانية، ويمكنك إتاحة استخدام المعلَمات المخصّصة للرسومات البيانية المخصّصة. ولكن يجب عرض الردود بالتنسيق العادي الموضّح أدناه.

اعتبارات الأمان

عند تصميم مصدر بياناتك، ننصحك بالتفكير في مدى أمان بياناتك. يمكنك استخدام مجموعة متنوعة من حيل الأمان لموقعك الإلكتروني، بدءًا من الوصول البسيط إلى كلمة المرور ووصولاً إلى المصادقة الآمنة على ملفات تعريف الارتباط.

تشكّل هجمات XSSI (تضمين النصوص البرمجية على المواقع الإلكترونية) خطرًا بسبب الرسومات البيانية. قد ينتقل المستخدم إلى صفحة تتضمن نصًا برمجيًا ضارًا ويبدأ بعد ذلك في محاولة إجراء طلبات بحث حول عناوين URL لمصدر البيانات، وذلك باستخدام بيانات اعتماد المستخدم الحالي. إذا لم يسجّل المستخدم خروجه من موقع إلكتروني، ستتم المصادقة على النص البرمجي بصفته المستخدم الحالي وسيتم منحه أذونات على هذا الموقع الإلكتروني. يمكن أن يؤدي استخدام علامة <script src> إلى إمكانية تضمين مصدر البيانات، على غرار JSONP.

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

لضمان أنّ الطلب صادر من نطاقك وليس من نطاق خارجي (أو من متصفّح داخل النطاق خاضع لهجوم XSRF):

  • تأكَّد من توفُّر عنوان X-DataSource-Auth في الطلب. يتم تحديد هذا العنوان من خلال Google Visualization API. لا تحتاج إلى فحص محتوى هذا العنوان، ولكن تأكد من وجوده فقط. إذا كنت تستخدم مكتبة مصادر بيانات أدوات الرسوم البيانية من Google، يمكنك أن تجعل المكتبة تتولى هذا الإجراء نيابةً عنك.
  • استخدِم مصادقة ملفات تعريف الارتباط لمصادقة العميل. ما مِن طريقة معروفة لإدخال عناوين مخصّصة في طلب على مستوى عدة نطاقات مع الاحتفاظ بملفات تعريف ارتباط المصادقة في مكانها.
  • تجنَّب تنفيذ JavaScript عند تضمينها مع علامة <script src>. ولإجراء ذلك، عليك إضافة البادئة )]}" متبوعة بسطر جديد في استجابة JSON. وفي برنامجك، أزِل البادئة من الردّ. وبالنسبة إلى XmlHttpRequest، لا يمكن تنفيذ ذلك إلا عندما ينشأ الطلب من النطاق نفسه.

تنسيق الطلب

يرسل العميل طلب HTTP GET مع عدة معلَمات، بما في ذلك العناصر المخصّصة وسلسلة طلب بحث اختيارية وتوقيع وعناصر أخرى. وتتحمل فقط مسؤولية تحليل المعلَمات الموضّحة في هذا القسم، ويجب الانتباه إلى عدم التعامل مع المعلَمات الأخرى لتجنُّب الهجمات الضارة.

تأكَّد من استخدام قيم تلقائية للمَعلمات الاختيارية (العادية والمخصَّصة)، ووثِّق جميع قيمك التلقائية في مستندات موقعك الإلكتروني.

في ما يلي بعض نماذج الطلبات (يمكنك الاطّلاع على المزيد من نماذج الطلبات والردّ في نهاية هذا المستند في أمثلة):

ملاحظة: يجب استخدام أحرف الإلغاء في عنوان URL قبل الإرسال، بالإضافة إلى سلاسل الطلبات التالية التي تظهر في قسم الأمثلة.

Basic request, no parameters:
http://www.example.com/mydatasource

Request with the tqx parameter that contains two properties:
http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168

Request with a query string:
http://www.example.com/mydatasource?tq=limit 1

في ما يلي قائمة بجميع المَعلمات العادية في سلسلة الطلب. يُرجى العِلم أنّ أسماء المَعلمات (مثل "version") وقيم السلسلة الثابتة (مثل "ok" و"تحذير" و "not_modified") تكون حسّاسة لحالة الأحرف. ويوضّح الجدول أيضًا ما إذا كان يجب إرسال المَعلمة وما إذا كان مطلوبًا منك التعامل معها أم لا في حال إرسالها.

المَعلمة
هل هو مطلوب في الطلب؟
هل يجب التعامل مع مصدر البيانات؟
الوصف
tq
لا
لا

طلب مكتوب لغة طلب البحث في Google Visualization API، ويحدد كيفية فلترة البيانات المعروضة أو ترتيبها أو معالجتها بأي شكل آخر. ولا يلزم وضع اقتباس للسلسلة.

مثال: http://www.example.com/mydatasource?tq=select Col1

TQx
لا
نعم

مجموعة من أزواج المفتاح/القيمة مفصولة بنقطتين للمعلمات العادية أو المخصّصة. يتم فصل الأزواج بفواصل منقوطة. وفي ما يلي قائمة بالمعلَمات العادية المحدّدة في بروتوكول التمثيل البصري:

  • reqId - [يجب توفيره في الطلب، يجب أن يتعامل مصدر البيانات مع] معرّف رقمي لهذا الطلب. وتُستخدم هذه السمة بحيث إذا أرسل العميل طلبات متعددة قبل تلقّي ردّ، يمكن لمصدر البيانات تحديد الردّ من خلال الطلب المناسب. أرسِل هذه القيمة مرة أخرى في الردّ.
  • version - [اختياري في الطلب، يجب أن يتعامل مصدر البيانات] مع رقم إصدار بروتوكول مؤثرات عرض التصور في Google. الإصدار الحالي هو 0.6. وإذا لم يتم إرسال الرسالة، يمكنك استخدام أحدث إصدار.
  • sig - [اختيارية في الطلب، اختيارية لمعالجة مصدر البيانات] تجزئة لسمة DataTable المرسَلة إلى هذا العميل في أي طلبات سابقة لمصدر البيانات هذا وهذا الإجراء تحسين لتجنُّب إرسال بيانات متطابقة إلى العميل مرتين. يمكنك الاطّلاع على تحسين طلبك أدناه للحصول على معلومات حول كيفية الاستفادة من هذه الأداة.
  • out - [اختيارية في الطلب، يجب أن يعالج مصدر البيانات] سلسلة تصف تنسيق البيانات المعروضة يمكن أن تكون القيمة أيًا من القيم التالية:
    • json - [القيمة التلقائية] سلسلة استجابة JSON (على النحو الموضّح أدناه)
    • html - جدول HTML أساسي يحتوي على صفوف وأعمدة. في حال استخدام هذه الطريقة، يجب عرض جدول HTML الوحيد الذي يتضمّن بيانات، وهو مفيد لتصحيح الأخطاء كما هو موضّح في القسم تنسيق الاستجابة أدناه.
    • csv - قيم مفصولة بفواصل. في حال استخدام هذه الطريقة، يكون العنصر الوحيد الذي يتم عرضه هو سلسلة بيانات بتنسيق CSV. يمكنك طلب اسم مخصّص للملف في عناوين الاستجابة من خلال تحديد معلَمة outFileName.
    • tsv-excel - يشبه هذا التنسيق csv، ولكن باستخدام علامات التبويب بدلاً من الفواصل، ويتمّ ترميز جميع البيانات باستخدام utf-16.
    يُرجى العلم أنّ نوع البيانات الوحيد الذي سيطلبه الرسم البياني المبني على Google Visualization API هو json. راجِع تنسيق الردود أدناه للحصول على تفاصيل عن كل نوع.
  • responseHandler - [اختيارية في الطلب، يجب معالجة مصدر البيانات] اسم السلسلة لدالة معالجة JavaScript على صفحة العميل التي سيتم طلبها مع الردّ. وإذا لم يتم تضمينه في الطلب، ستكون القيمة هي "google.visualization.Query.setResponse". وسيتم إرسال هذه المعلومات مرة أخرى كجزء من الرد. يُرجى الاطّلاع على تنسيق الرد أدناه لمعرفة كيفية إجراء ذلك.
  • outFileName - [اختيارية في الطلب، اختيارية لمعالجة مصدر البيانات] إذا حدّدت out:csv أو out:tsv-excel، يمكنك اختياريًا طلب اسم الملف المحدّد هنا. مثال: outFileName=results.csv.

مثال: tqx=version:0.6;reqId:1;sig:5277771;out:json، responseHandler:myQueryHandler

Tqrt
لا
لا

محجوزة: تجاهل هذه المعلمة تمثّل هذه السمة الطريقة المستخدمة لإرسال طلب البحث.

تنسيق الردّ

يعتمد تنسيق الاستجابة على معلَمة out الخاصة بالطلب، والتي تحدد نوع الاستجابة المتوقّعة. يمكنك الاطّلاع على الأقسام التالية لمعرفة كيفية الردّ على كل نوع من أنواع الطلبات:

  • JSON: تعرض استجابة JSON تتضمّن البيانات المتوفّرة في كائن JavaScript والتي يمكن تمريرها مباشرةً إلى دالة إنشاء DataTable لتعبئتها. هذا النوع من الطلبات هو الأكثر شيوعًا إلى حدّ كبير، وهو الأكثر أهمية بالنسبة إلى عمليات التنفيذ الصحيحة.
  • CSV - يعرض قائمة قيم مسطحة مفصولة بفواصل ليعالجها المتصفّح.
  • TSV: يعرض قائمة قيم مفصولة بعلامات جدولة ليعالجها المتصفّح.
  • HTML - تعرض جدول HTML لعرضه من خلال المتصفح.

يمكنك استخدام مكتبة مصدر بيانات المرئيات من Google (Java) أو مكتبة Python المتعلقة بالمرئيات لإنشاء تنسيقات الإخراج هذه لك.

تنسيق استجابة JSON

تنسيق الاستجابة التلقائي هو JSON إذا كان الطلب يتضمّن عنوان X-DataSource-Auth، وJSONP في الحالات الأخرى. يُرجى العلم أنّ برنامج رسم بياني من Google متوافق مع نسخة معدَّلة من JSON وJSONP. وإذا كنت تستخدم مكتبات مساعد Java أو Python، ستضع الرموز المناسبة لك. أما إذا كنت تحلل الردود يدويًا، فيمكنك الاطّلاع على تعديلات JSON أدناه.

إذا كنت تفرض طلبات النطاق نفسه، عليك التأكّد من توفُّر العنوان "X-DataSource-Auth" في الطلب واستخدام ملفات تعريف ارتباط التفويض.

هذا هو تنسيق الاستجابة الوحيد المحدّد من خلال طريقة Google Visualization API google.visualization.Query.send() . يمكنك الاطّلاع على بعض الأمثلة على طلبات JSON واستجاباتها في نهاية هذه الصفحة ضمن الأمثلة. يمكنك استخدام مكتبات المساعدة في Java أو Python لإنشاء سلسلة الاستجابة هذه نيابةً عنك.

تنسيق الاستجابة هذا هو كائن JSON بالترميز UTF-8 (كائن ملفوف بالأقواس { } مع فصل كل سمة بفاصلة) ويتضمّن السمات الواردة في الجدول أدناه (يتم تخصيص البيانات للسمة table). ويجب أن يكون كائن JSON هذا داخل قيمة المعلَمة responseHandler من الطلب. وبالتالي، إذا كانت قيمة responseHandler للطلب هي myHandler، عليك عرض سلسلة مثل هذه (تظهر سمة واحدة فقط للإيجاز):

"myHandler({status:ok, ...})"

إذا لم يتضمّن الطلب القيمة responseHandler، تكون القيمة التلقائية هي "google.visualization.Query.setResponse"، وبالتالي عليك عرض سلسلة مثل هذه (تظهر سمة واحدة فقط للإيجاز):

"google.visualization.Query.setResponse({status:ok, ...})"

في ما يلي أعضاء كائن الاستجابة المتاح:

الموقع
مطلوبة؟
الوصف
إصدار
لا

تمثّل هذه السمة رقم سلسلة يعرض رقم إصدار بروتوكول سلك التمثيل المرئي من Google. في حال عدم تحديد هذه السمة، يفترض العميل استخدام أحدث إصدار.

مثال: version=0.6

reqId
نعم*
رقم سلسلة يشير إلى رقم تعريف هذا الطلب لهذا العميل. وإذا كان الأمر كذلك، عليك عرض القيمة نفسها. يمكنك الاطّلاع على وصف reqId في قسم الطلبات للحصول على مزيد من التفاصيل.

* إذا لم يتم تحديد هذه المعلمة في الطلب، لن تحتاج إلى ضبطها في الاستجابة.
status
نعم

سلسلة تصف مدى نجاح هذه العملية أو فشلها. ويجب أن تكون قيمة واحدة من القيم التالية فقط:

  • ok - طلب ناجح. يجب تضمين جدول في السمة table.
  • warning - تم الإجراء بنجاح ولكن مع بعض المشاكل. يجب تضمين جدول في السمة table.
  • error - حدثت مشكلة. في حال إرجاع هذه السلعة، يجب عدم إرجاع table ويجب إرجاع errors.

مثال: status:'warning'

تحذيرات
فقط في حالة status=warning

يشير ذلك المصطلح إلى مصفوفة مكوّنة من كائن واحد أو أكثر يصف كل منها مشكلة غير مميتة. مطلوبة إذا كانت السمة status=warning، غير مسموح بها في الحالات الأخرى. ويتضمّن كل كائن سمات السلسلة التالية (إرجاع قيمة واحدة فقط لكل سمة):

  • reason - [مطلوبة] وصف سلسلة مؤلفة من كلمة واحدة للتحذير. ويحدّد البروتوكول القيم التالية، ولكن يمكنك تحديد القيم الخاصة بك إذا احتجت إلى ذلك (ومع ذلك، لن يعالج البرنامج القيم المخصّصة بأي طريقة خاصة). يمكنك استخدام قيمة reason واحدة فقط:
    • data_truncated - تمت إزالة بعض الصفوف في DataTable المعروض، إما لأنّ المستخدم أدرج سلسلة طلب بحث اقتطعت قائمة النتائج، أو لم يريد مصدر البيانات عرض النتائج الكاملة لسبب ما.
    • other - تحذير عام غير محدَّد.
  • message - [اختيارية] سلسلة قصيرة مُقتبَسة تشرح المشكلة، ويمكن استخدامها كعنوان لمربّع تنبيه ويمكن أن يتم عرض هذه المعلومات للمستخدم. HTML غير متاح.
  • detailed_message - [اختيارية] رسالة نصية مقتبَسة تفصيلية توضّح المشكلة وأي حلول ممكنة ويمكن استخدام رمز HTML الوحيد هذا في العنصر <a> مع سمة href واحدة. يُسمح باستخدام ترميز يونيكود. ويمكن أن يتم عرض هذا الاسم للمستخدم.

مثال: warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}]

الأخطاء
مطلوبة إذا كانت status=error

يشير ذلك المصطلح إلى مصفوفة مكوّنة من كائن واحد أو أكثر يصف كل منها خطأً. مطلوبة إذا status=error، غير مسموح بها في الحالات الأخرى. وهي مماثلة لقيمة warnings. ويُرجى العِلم أنّ خطأ not_modified لا يمثّل في الواقع خطأً للعميل.

تضم المصفوفة أعضاء السلسلة التالية (تعرض قيمة واحدة فقط لكل عضو):

  • reason - [مطلوبة] مثل warnings.reason، ولكن يتم تحديد القيم التالية:
    • not_modified - لم تتغيّر البيانات منذ آخر طلب. إذا كان هذا هو سبب الخطأ، يجب ألا تكون لديك قيمة في table.
    • user_not_authenticated - إذا كان مصدر البيانات يتطلب المصادقة ولم يتم تنفيذه، حدِّد هذه القيمة. وسيعرِض العميل بعد ذلك تنبيهًا بقيمة message.
    • unknown_data_source_id
    • access_denied
    • unsupported_query_operation
    • invalid_query
    • invalid_request
    • internal_error
    • not_supported
    • illegal_formatting_patterns
    • other - خطأ عام غير محدَّد
  • message - [اختيارية] مثل warnings.message ملاحظة: من الممكن أن يستخدم مستخدم ضار سلسلة بيانات تفصيلية كوسيلة للوصول إلى البيانات غير المصرّح بها، أو حتى استخدامها لمهاجمة بياناتك أو موقعك الإلكتروني. في حال تخزين بيانات يجب أن تكون آمنة أو معالجة طلبات بحث المستخدمين مباشرةً، ننصحك بعدم عرض رسالة خطأ مفصّلة قد توفّر معلومات للمهاجم، بدلاً من ذلك، أرسِل رسالة عامة، مثل "سلسلة طلب بحث غير صحيحة".
  • detailed_message - [اختيارية] مثل warnings.detailed_message راجِع التحذير للاطّلاع على معلومات message مفصّلة للغاية.

مثال: status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]

sig
لا

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

مثال: sig:'5982206968295329967'

جدول
لا

كائن DataTable بتدوين JavaScript الحرفي مع بياناتك. يُرجى الانتقال إلى قسم المرجع المرتبط للاطّلاع على تفاصيل حول تنسيق هذا العنصر. في ما يلي مثال على جدول بيانات بسيط:

{cols:[{id:'Col1',label:'',type:'number'}],
 rows:[{c:[{v:1.0,f:'1'}]},
       {c:[{v:2.0,f:'2'}]},
       {c:[{v:3.0,f:'3'}]},
       {c:[{v:1.0,f:'1'}]}
      ]
} 

يجب استخدام السمة table فقط في حال استخدام السمة status=ok أو السمة status=warning. إذا كنت لا تعرض بيانات، لا تضمِّن هذه السمة (أي لا تمرِّر السمة باستخدام قيمة سلسلة فارغة).

مثال: راجِع أمثلة أدناه.

 

يجب توفُّر تنسيق JSON الصارم

تعرض مكتبات مساعد Google وجميع طلبات البحث المرسلة إلى Google تنسيق JSON/JSONP الصارم. إذا كنت لا تحلِّل الرمز الذي تم عرضه بنفسك، لن يكون لذلك أي تأثير من جانبك. إذا كان الأمر كذلك، يمكنك استخدام JSON.parse() لتحويل سلسلة JSON إلى كائن JavaScript. ويتمثل أحد الاختلافات في طريقة معالجة JSON بواسطة واجهة برمجة التطبيقات في أنّ تنسيق JSON لا يتيح استخدام قيم تاريخ JavaScript (على سبيل المثال، "new Date(2008,1,28,0,31,26)" إلا أنّ واجهة برمجة التطبيقات تتيح تمثيل JSON صالحًا للتواريخ كسلسلة بالتنسيق التالي: Date(year, month, day[,hour, minute, second[, millisecond]]) حيث تكون جميع القيم بعد اليوم اختيارية، والأشهر تعتمد على الصفر.

 

تحسين استجابات JSON

إذا قدَّم العميل طلبَين، ولم تتغير البيانات بين الطلبات، من المنطقي عدم إعادة إرسال البيانات لأنّ ذلك سيؤدي إلى إهدار معدل نقل البيانات. ولجعل الطلبات أكثر كفاءة، يتيح البروتوكول التخزين المؤقت للبيانات على الجهاز العميل، وإرسال إشارة في الاستجابة في حال لم تتغيّر البيانات منذ آخر طلب. وإليك كيفية العمل:

  1. يرسل العميل طلبًا إلى مصدر البيانات.
  2. ينشئ مصدر البيانات DataTable بالإضافة إلى تجزئة للعنصر DataTable، ويعرض كلاهما في استجابته (يتم عرض التجزئة في المعلمة tqx.sig). يخزِّن برنامج Google Visualization API القيمة DataTable وsig مؤقتًا.
  3. يرسل العميل طلبًا آخر للبيانات، بما في ذلك قيمة tqx.sig المخزّنة مؤقتًا.
  4. يمكن أن يستجيب مصدر البيانات بإحدى الطريقتين التاليتين:
    • في حال تغيير البيانات من الطلب السابق، يُرسِل مصدر البيانات مرة أخرى تجزئة قيمة DataTable الجديدة وقيمة sig الجديدة.
    • إذا لم يتم تغيير البيانات من الطلب السابق، يرسل مصدر البيانات status=error أو reason=not_modified أو sig=old_sig_value مرة أخرى.
  5. في كلتا الحالتين، تحصل الصفحة التي تستضيف الرسم البياني على استجابة ناجحة، ويمكنها استرداد DataTable من خلال استدعاء QueryResponse.getDataTable(). إذا كانت البيانات متطابقة، فستكون ببساطة النسخة المخزنة مؤقتًا من الجدول.

يُرجى العلم أنّ هذه الطريقة لا تعمل إلا مع طلبات JSON من الرسوم البيانية التي تم إنشاؤها باستخدام Google Visualization API.

تنسيق الاستجابة بتنسيق CSV

إذا كان الطلب يحدّد out:csv، لن تتضمّن الاستجابة أي بيانات وصفية، بل تتضمّن فقط تمثيلاً بتنسيق CSV للبيانات. يكون جدول CSV عادةً عبارة عن قائمة مفصولة بفواصل، يكون فيها كل صف من البيانات عبارة عن قائمة قيم مفصولة بفواصل، وتنتهي بحرف سطر جديد في نظام التشغيل UNIX (\n). ويجب أن يكون لقيم الخلايا النوع نفسه لكل عمود. الصف الأول هو تسميات الأعمدة. في ما يلي مثال على جدول مؤلف من ثلاثة صفوف من ثلاثة أعمدة:

A, B, C
1.0, "yes", true
2.0, "no", false
3.0, "maybe", true

لم يتم تحديد تنسيق CSV بواسطة هذا البروتوكول، فمصدر البيانات هو المسؤول عن تحديد تنسيق CSV. ومع ذلك، التنسيق الشائع عبارة عن مجموعة من القيم مفصولة بفواصل (بدون مسافات متداخلة) وسطر جديد (\n) في نهاية كل صف. عندما يتلقّى المتصفّح ردًّا من سلسلة CSV، قد يسأل المستخدم عن التطبيق الذي يجب استخدامه لفتح السلسلة أو قد يعرضها على الشاشة. توفر المكتبات المفتوحة المصدر Java وPython طريقة لتحويل DataTable إلى سلسلة CSV.

إذا كان الطلب يتضمّن عضو outFileName في المعلَمة tqx ، ننصحك بمحاولة تضمين اسم الملف المحدّد في عناوين الاستجابة.

لا يدعم كائن google.visualization.Query طلب استجابة ملف CSV. إذا أراد العميل طلب ملف CSV، يمكنك تضمين أداة شريط أدوات العرض المرئي على صفحتك أو استخدام رمز مخصّص لإنشاء الطلب، أو يمكنك تقديم رابط يضبط السمة out:csv في tqx بشكل واضح، كما هو موضّح في عنوان URL للطلب التالي:

طلب

http://www.example.com/mydatasource?tqx=reqId:1;out:csv

الردّ

Label 1,Label2\n1,a\n2,b\n3,c\n4,d

تنسيق استجابة TSV

إذا كان الطلب يحدّد out:tsv-excel، لن يتضمن الرد أي بيانات وصفية، بل يتضمن فقط تمثيلاً للبيانات، مفصولًا بعلامات جدولة، utf-16 بترميز. إذا كان الطلب يتضمّن عضو outFileName في المعلَمة tqx ، ننصحك بمحاولة تضمين اسم الملف المحدّد في عناوين الاستجابة.

تنسيق استجابة HTML

إذا كان الطلب يحدّد out:html، يجب أن تكون الاستجابة صفحة HTML تحدّد جدول HTML بالبيانات. وتكمن أهمية ذلك في تصحيح أخطاء الرمز البرمجي لأنّ المتصفّح يمكنه عرض نتيجتك بتنسيق قابل للقراءة مباشرةً. ولا يمكنك إرسال طلب بحث عن استجابة HTML باستخدام الكائن google.visualization.Query. يجب إجراء طلب بحث عن استجابة HTML باستخدام رمز مخصّص أو من خلال كتابة عنوان URL مشابه لهذا في المتصفّح:

طلب

http://www.example.com/mydatasource?tqx=reqId:1;out:html

الردّ

<html><body><table border='1' cellpadding='2' cellspacing='0'><tr style='font-weight: bold; background-color: #aaa;'><td>label 1</td><td>label 2</td></tr><tr bgcolor='#f0f0f0'><td align='right'>1</td><td>a</td></tr><tr bgcolor='#ffffff'><td align='right'>2</td><td>b</td></tr><tr bgcolor='#f0f0f0'><td align='right'>3</td><td>c</td></tr><tr bgcolor='#ffffff'><td align='right'>4</td><td>d</td></tr></table></body></html>

أمثلة

إليك بعض الأمثلة على الطلبات والردود. يُرجى العِلم أنّ الطلبات لم يتم تخطيها من خلال عنوان URL، ويتم ذلك عادةً من خلال المتصفّح أو الكائن google.visualization.Query.

طلب بسيط: تعرض المعلومات الأساسية من خلال جدول من أربعة صفوف.

Request:
http://www.example.com/mydatasource

Response
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'5982206968295329967',table:{cols:[{id:'Col1',label:'',type:'number'},{id:'Col2',label:'',type:'number'},{id:'Col3',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]},{c:[{v:2.0,f:'2'},{v:3.0,f:'3'},{v:4.0,f:'4'}]},{c:[{v:3.0,f:'3'},{v:4.0,f:'4'},{v:5.0,f:'5'}]},{c:[{v:1.0,f:'1'},{v:2.0,f:'2'},{v:3.0,f:'3'}]}]}});

طلب بسيط باستخدام معالج الاستجابة: تعرض جدولاً من ثلاثة أعمدة مؤلفًا من ثلاثة صفوف بأنواع بيانات مختلفة.

Request:
http://www.example.com/mydatasource?tqx=responseHandler:myHandlerFunction

Response
myHandlerFunction({version:'0.6',reqId:'0',status:'ok',sig:'4641982796834063168',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]},{c:[{v:'b'},{v:2.0,f:'2'},{v:new Date(2008,2,30,0,31,26),f:'3/30/08 12:31 AM'}]},{c:[{v:'c'},{v:3.0,f:'3'},{v:new Date(2008,3,30,0,31,26),f:'4/30/08 12:31 AM'}]}]}});

طلب بحث باستخدام سلسلة طلب بحث بسيطة: يؤدي هذا الطلب إلى عرض عمود واحد، ويعرض عمودًا واحدًا يحتوي على أربعة صفوف.

Request:
http://www.example.com/mydatasource?tq=select Col1

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'ok',sig:'6099996038638149313',table:{cols:[{id:'Col1',label:'',type:'number'}],rows:[{c:[{v:1.0,f:'1'}]},{c:[{v:2.0,f:'2'}]},{c:[{v:3.0,f:'3'}]},{c:[{v:1.0,f:'1'}]}]}});

خطأ لم يتم تعديل البيانات: مثال على خطأ not_modified.

Request:
http://www.example.com/mydatasource?tqx=reqId:0;sig:4641982796834063168

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]});

تحذير بشأن اقتطاع البيانات: مثال على تحذير data_truncated. لاحظ أن الطلب لا يزال يعرض البيانات.

Request:
http://www.example.com/mydatasource?tq=limit 1

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'warning',warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}],sig:'1928724788649668508',table:{cols:[{id:'A',label:'NEW A',type:'string'},{id:'B',label:'B-label',type:'number'},{id:'C',label:'C-label',type:'datetime'}],rows:[{c:[{v:'a'},{v:1.0,f:'1'},{v:new Date(2008,1,28,0,31,26),f:'2/28/08 12:31 AM'}]}]}});

خطأ تم رفض الوصول: مثال على خطأ access_denied.

Request:
http://www.example.com/mydatasource

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'access_denied',message:'Access denied',detailed_message:'Access Denied'}]});

سلسلة طلب بحث غير صالحة: مثال على طلب يحتوي على سلسلة طلب بحث غير صالحة. يُرجى العِلم أنّ الرسالة المفصَّلة هي رسالة عامة وليست رسالة الخطأ الفعلية.

Request:
http://www.example.com/mydatasource?tq=select A

Response:
google.visualization.Query.setResponse({version:'0.6',reqId:'0',status:'error',errors:[{reason:'invalid_query',message:'Invalid query',detailed_message:'Bad query string.'}]});

أدوات تطوير

  • Java Datasource Library (من Google) : لمعالجة الطلب والاستجابة وإنشاء جدول الاستجابة استنادًا إلى البيانات التي تقدِّمها، وتطبيق لغة طلب البحث بلغة الاستعلامات البنيوية (SQL) في أدوات الرسومات البيانية من Google.
  • مكتبة مصادر البيانات في Python (من Google): تنشئ جدول الردود الذي ينشئ بنية الردود. لا يعالج تحليل الطلب أو تنفيذ لغة طلب بحث SQL لأدوات الرسوم البيانية من Google.
  • MC-Google_Visualization (جهة خارجية): هذه مكتبة من جهة الخادم بلغة PHP يمكنك استخدامها لتنفيذ "مصدر بيانات أدوات الرسوم البيانية" لمحركات قاعدة بيانات MySQL وSQLite وPostgreSQL باستخدام PDO.
  • bortosky-google-visualization (جهة خارجية) - هي مكتبة مساعدة لإنشاء جدول بيانات Google Visualization API لمستخدمي .NET.
  • GV Streamer (جهة خارجية): GV Streamer هي أداة من جهة الخادم يمكنها تحويل البيانات من مصادر مختلفة إلى ردود صالحة لطلبات البحث في الرسوم البيانية في Google. يتوافق GV Streamer مع عدة لغات (على سبيل المثال، PHP وJava و .NET) والعديد من مصادر البيانات الأولية (على سبيل المثال، MySql).
  • TracGViz (جهة خارجية) - TracGViz هي أداة مجانية ومفتوحة المصدر توفّر المكونات بحيث يكون بإمكان Trac استخدام أدوات الرسم البياني، بالإضافة إلى تنفيذ البيانات التي يديرها Trac كمصدر بيانات لـ "أدوات الرسوم البيانية في Google".
  • vis-table (جهة خارجية) - مكتبة تنفِّذ مصدر بيانات لأدوات الرسوم البيانية من Google بلغة PHP. وهي تتكوّن من ثلاثة أجزاء رئيسية. عملية تنفيذ جدول البيانات نفسها والمحلل اللغوي للغة الاستعلام وأدوات التنسيق.
  • تنفيذ مصدر بيانات Google في Oracle PL/SQL (جهة خارجية): يشير هذا المصطلح إلى حزمة Oracle PL/SQL التي تمكِّن Oracle من خادم Oracle لخادم "مصادر البيانات" مباشرةً من قاعدة البيانات. لذلك، يمكنك بشكل أساسي استخدام أي طلب بحث Oracle كمصدر بيانات لأدوات الرسم البياني من Google (ستعرض الحزمة ملف JSON بالبيانات). وهي متوافقة بالكامل تقريبًا مع لغة طلب البحث من Google.