پیاده‌سازی پروتکل منبع داده ابزار نمودار (V0.6)

این صفحه توضیح می دهد که چگونه می توانید سرویسی را پیاده سازی کنید که از پروتکل Chart Tools Datasource پشتیبانی می کند تا داده ها را با استفاده از کلاس Query در معرض نمودارها قرار دهد.

فهرست

حضار

این صفحه عمدتاً برای توسعه دهندگانی است که منبع داده خود را بدون کمک کتابخانه منبع داده ابزار نمودار ایجاد می کنند. اگر از آن یا هر کتابخانه کمکی دیگری استفاده می کنید، ابتدا اسناد کتابخانه خود را بخوانید.

این صفحه همچنین برای خوانندگان علاقه مند به درک پروتکل سیم مورد استفاده برای ارتباط بین تجسم مشتری و منبع داده در نظر گرفته شده است.

اگر در حال ایجاد یا استفاده از تصویرسازی هستید، نیازی به خواندن این صفحه ندارید.

برای خواندن این سند، باید دستور اولیه JSON و HTTP درخواست را بدانید. همچنین باید درک کنید که نمودارها از دیدگاه کاربر چگونه کار می کنند.

توجه: Google رسماً هیچ منبع داده غیر Google را که از پروتکل Chart Tools Datasource پشتیبانی می کند، تأیید یا پشتیبانی نمی کند.

بررسی اجمالی

شما می توانید پروتکل Chart Tools Datasource را پیاده سازی کنید تا به یک ارائه دهنده منبع داده برای نمودارهای خود یا نمودارهای دیگر تبدیل شوید. یک منبع داده ابزار نمودار یک URL به نام URL منبع داده را نشان می دهد که نمودار می تواند درخواست های HTTP GET را به آن ارسال کند. در پاسخ، منبع داده، داده‌هایی با فرمت مناسب را برمی‌گرداند که نمودار می‌تواند از آن برای نمایش گرافیک در صفحه استفاده کند. این پروتکل درخواست-پاسخ به عنوان پروتکل سیمی Google Visualization API شناخته می شود.

داده هایی که توسط یک منبع داده ارائه می شود را می توان از منابع مختلفی مانند یک فایل یا پایگاه داده استخراج کرد. تنها محدودیت این است که می توانید داده ها را به صورت یک جدول دو بعدی با ستون های تایپ شده قالب بندی کنید.

به عنوان منبع داده ابزار نمودار، شما باید یک درخواست را در یک قالب خاص تجزیه و تحلیل کنید و یک پاسخ را در یک قالب خاص برگردانید. شما می توانید این کار را به یکی از دو روش کلی انجام دهید:

  • از یکی از کتابخانه های کمکی زیر برای رسیدگی به درخواست و پاسخ استفاده کنید و DataTable را برای بازگشت بسازید. اگر از یکی از این کتابخانه ها استفاده می کنید، فقط باید کد مورد نیاز برای در دسترس قرار دادن داده های خود را در قالب یک جدول در کتابخانه بنویسید.
    • کتابخانه منبع داده جاوا - درخواست و پاسخ را مدیریت می‌کند، جدول پاسخ را از داده‌هایی که به آن می‌دهید ایجاد می‌کند و زبان پرس و جو SQL ابزار نمودار Google را پیاده‌سازی می‌کند.
    • کتابخانه منبع داده پایتون - یک جدول پاسخ ایجاد می کند و دستور پاسخ را ایجاد می کند. تجزیه درخواست یا پیاده سازی زبان پرس و جو SQL Google Chart Tools را انجام نمی دهد .

      یا

  • با مدیریت درخواست، ساخت DataTable و ارسال پاسخ ، منبع داده خود را از ابتدا بنویسید .

چگونه کار می کند:

  1. منبع داده یک URL به نام URL منبع داده را نشان می دهد که نمودارها یک درخواست HTTP GET را برای آن ارسال می کنند.
  2. کلاینت یک درخواست HTTP GET با پارامترهایی ایجاد می کند که توصیف می کند از چه قالبی برای داده های برگشتی استفاده شود، یک رشته پرس و جو اختیاری و پارامترهای سفارشی اختیاری.
  3. منبع داده همانطور که در فرمت درخواست توضیح داده شده است، درخواست را دریافت و تجزیه می کند.
  4. منبع داده داده ها را در قالب درخواستی آماده می کند. به طور معمول، این یک جدول JSON است. فرمت های پاسخ در بخش قالب پاسخ پوشش داده شده است. منبع داده می تواند به صورت اختیاری از زبان پرس و جو Visualization API پشتیبانی کند که فیلتر کردن، مرتب سازی و سایر دستکاری داده ها را مشخص می کند.
  5. منبع داده یک پاسخ HTTP ایجاد می کند که شامل داده های سریال و سایر پارامترهای پاسخ است و همانطور که در Response Format توضیح داده شده است آن را به مشتری ارسال می کند.

توجه: تمام پارامترها و مقادیر ثابت رشته‌ای که در این سند برای درخواست‌ها و پاسخ‌ها فهرست شده‌اند (مانند responseHandler و "ok") به حروف کوچک و حساس هستند.

حداقل الزامات

اینها حداقل شرایط لازم برای خدمت به عنوان منبع داده ابزار نمودار هستند:

  • منبع داده باید درخواست های HTTP GET را بپذیرد و باید در دسترس مشتریان شما باشد.
  • این پروتکل می تواند یک طرح نسخه را تغییر دهد و از آن پشتیبانی می کند (نسخه فعلی 0.6 است)، بنابراین منبع داده شما باید از درخواست هایی با استفاده از نسخه های قبلی و همچنین نسخه فعلی پشتیبانی کند. شما باید سعی کنید به محض انتشار نسخه های جدید را پشتیبانی کنید تا از شکستن کلاینت هایی که به سرعت به جدیدترین نسخه ارتقا می یابند جلوگیری کنید.
  • اگر ویژگی های ناشناخته به عنوان بخشی از درخواست ارسال شود، شکست نخورید. این به این دلیل است که نسخه های جدید می توانند ویژگی های جدیدی را معرفی کنند که شما از آنها بی اطلاع هستید.
  • تنها خواصی را که انتظار دارید تجزیه کنید. اگرچه نسخه‌های جدید ممکن است ویژگی‌های جدیدی را معرفی کنند، کورکورانه آن را قبول نکنید و از کل رشته درخواست استفاده نکنید. برای محافظت از خود در برابر حملات مخرب، به دقت تجزیه و تحلیل کنید و فقط از ویژگی هایی که انتظار دارید استفاده کنید.
  • اگر خودتان نمودارهای مشتری را کدنویسی نمی کنید ، الزامات منبع داده خود را با دقت مستند کنید . این شامل مستندسازی اطلاعات زیر است:
    • هر پارامتر سفارشی که قبول می کنید،
    • اینکه آیا می توانید زبان پرس و جوی Google Visualization API را تجزیه کنید یا نه، و
    • چه نوع داده‌هایی را برمی‌گردانید، و ساختار آن داده‌ها (آنچه سطرها و ستون‌ها نشان می‌دهند و هر برچسب‌گذاری).
  • تمام اقدامات احتیاطی استاندارد امنیتی را برای سایتی که درخواست های مشتریان ناشناس را می پذیرد، انجام دهید . شما می توانید به طور منطقی از MD5، هش کردن و سایر مکانیسم های امنیتی در پارامترهای خود برای احراز هویت درخواست ها یا کمک به ایمن سازی در برابر حملات مخرب پشتیبانی کنید و از مشتریان انتظار داشته باشید که از نیازهای شما آگاه باشند و به آنها پاسخ دهند. با این حال، اگر خودتان نمودارها را کدنویسی نمی کنید، مطمئن شوید که تمام نیازهای خود را به خوبی مستند کنید. ملاحظات امنیتی را در زیر ببینید.
  • تمام رشته های درخواست و پاسخ باید با کد UTF-8 باشند.
  • مهمترین فرمت پاسخ JSON است. حتماً ابتدا JSON را پیاده سازی کنید، زیرا این فرمتی است که توسط اکثر نمودارها استفاده می شود. سپس انواع دیگر پاسخ را اضافه کنید.
  • شما نیازی به پشتیبانی از زبان پرس و جو Visualization API ندارید، اما منبع داده شما را برای مشتریان مفیدتر می کند.
  • شما نیازی به پشتیبانی از درخواست‌ها از هر نوع نموداری ندارید و می‌توانید از پارامترهای سفارشی برای نمودارهای سفارشی پشتیبانی کنید. اما شما باید پاسخ ها را در قالب استانداردی که در زیر توضیح داده شده است، برگردانید.

ملاحظات امنیتی

هنگام طراحی منبع داده خود، باید میزان امنیت داده های خود را در نظر بگیرید. شما می توانید از انواع طرح های امنیتی برای سایت خود استفاده کنید، از دسترسی ساده به رمز عبور تا احراز هویت امن کوکی.

حملات XSSI (شامل اسکریپت بین سایتی) خطری برای نمودارها هستند. یک کاربر ممکن است به صفحه‌ای بروید که دارای یک اسکریپت مخرب است و سپس با استفاده از اعتبار کاربر فعلی شروع به تلاش برای ایجاد پرس و جو در URLهای منبع داده می‌کند. اگر کاربر از سایتی خارج نشده باشد، اسکریپت به عنوان کاربر فعلی احراز هویت می شود و مجوزهایی در آن سایت دارد. با استفاده از تگ <script src>، اسکریپت مخرب می تواند منبع داده را، مشابه JSONP، شامل شود.

به عنوان یک سطح امنیتی اضافی، می‌توانید درخواست‌ها را به درخواست‌هایی که از همان دامنه منبع داده شما می‌آیند محدود کنید. این امر به طور قابل توجهی دید منبع داده شما را محدود می کند، اما اگر داده های بسیار حساسی دارید که نباید از خارج از دامنه خود به آنها دسترسی پیدا کنید، باید آن را در نظر بگیرید. منبع داده‌ای که فقط درخواست‌های یک دامنه را مجاز می‌کند ، منبع داده محدود نامیده می‌شود، برخلاف منبع داده نامحدود ، که درخواست‌های هر دامنه را می‌پذیرد. در اینجا جزئیاتی در مورد نحوه پیاده سازی منبع داده محدود آورده شده است:

برای اطمینان از اینکه یک درخواست واقعاً از داخل دامنه شما می‌آید و نه از یک دامنه خارجی (یا مرورگر داخل دامنه‌ای که تحت حمله XSRF است):

  • وجود هدر «X-DataSource-Auth» در درخواست را تأیید کنید. این هدر توسط Google Visualization API تعریف شده است. شما نیازی به بررسی محتویات این هدر ندارید، فقط بررسی کنید که وجود دارد. اگر از کتابخانه Google Chart Tools Datasource استفاده می‌کنید، می‌توانید کتابخانه این کار را برای شما انجام دهد.
  • از احراز هویت کوکی برای احراز هویت مشتری استفاده کنید. هیچ راه شناخته شده ای برای تزریق هدرهای سفارشی به یک درخواست متقابل دامنه وجود ندارد و در عین حال کوکی های احراز هویت را در جای خود نگه دارید.
  • اجرای جاوا اسکریپت را زمانی که همراه با تگ <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

در اینجا لیستی از تمام پارامترهای استاندارد در رشته درخواست وجود دارد. توجه داشته باشید که هم نام پارامترها (مانند "نسخه") و هم مقادیر رشته ثابت (مانند "ok"، "warning" و "not_modified") به حروف بزرگ و کوچک حساس هستند. جدول همچنین توضیح می دهد که آیا پارامتر مورد نیاز برای ارسال است یا خیر و در صورت ارسال، آیا شما باید آن را مدیریت کنید یا خیر.

پارامتر
در درخواست مورد نیاز است؟
منبع داده باید مدیریت شود؟
شرح
tq
خیر
خیر

درخواستی که به زبان پرس و جوی Google Visualization API نوشته شده است و نحوه فیلتر کردن، مرتب‌سازی یا دستکاری داده‌های برگشتی را مشخص می‌کند. رشته نیازی به نقل قول ندارد.

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

tqx
خیر
آره

مجموعه‌ای از جفت‌های کلید/مقدار محدود شده با کولون برای پارامترهای استاندارد یا سفارشی. جفت ها با نقطه ویرگول از هم جدا می شوند. در اینجا لیستی از پارامترهای استاندارد تعریف شده توسط پروتکل Visualization آمده است:

  • reqId - [ مورد نیاز در درخواست; منبع داده باید ] یک شناسه عددی برای این درخواست را مدیریت کند . این مورد استفاده قرار می گیرد تا اگر مشتری قبل از دریافت پاسخ چندین درخواست ارسال کند، منبع داده بتواند پاسخ را با درخواست مناسب شناسایی کند. این مقدار را در پاسخ ارسال کنید.
  • version - [ اختیاری در درخواست. منبع داده باید ] شماره نسخه پروتکل Google Visualization را کنترل کند . نسخه فعلی 0.6 است. اگر ارسال نشد، آخرین نسخه را فرض کنید.
  • sig - [ اختیاری در درخواست; اختیاری برای مدیریت منبع داده ] یک هش از DataTable در هر درخواست قبلی به این منبع داده برای این مشتری ارسال می شود. این یک بهینه سازی برای جلوگیری از ارسال دوبار داده های یکسان به مشتری است. برای اطلاعات در مورد نحوه استفاده از آن به بهینه سازی درخواست شما در زیر مراجعه کنید.
  • out - [ اختیاری در درخواست; منبع داده باید ] رشته ای را که فرمت داده های برگشتی را توصیف می کند، مدیریت کند . می تواند یکی از مقادیر زیر باشد:
    • json - [ مقدار پیش‌فرض ] یک رشته پاسخ JSON (در زیر توضیح داده شده است).
    • html - یک جدول اصلی HTML با سطرها و ستون ها. اگر از این استفاده شود، تنها چیزی که باید برگردانده شود یک جدول HTML با داده است. همانطور که در بخش Response Format در زیر توضیح داده شده است، برای اشکال زدایی مفید است.
    • csv - مقادیر جدا شده با کاما. اگر از این استفاده شود، تنها چیزی که برگردانده می شود یک رشته داده CSV است. با تعیین پارامتر outFileName می توانید یک نام سفارشی برای فایل در هدرهای پاسخ درخواست کنید.
    • tsv-excel - شبیه csv است، اما از تب ها به جای کاما استفاده می کند و همه داده ها با utf-16 کدگذاری می شوند.
    توجه داشته باشید که تنها نوع داده ای که نمودار ساخته شده بر روی Google Visualization API درخواست می کند json است. برای جزئیات بیشتر در مورد هر نوع ، قالب پاسخ را در زیر ببینید.
  • responseHandler - [ اختیاری در درخواست. منبع داده باید ] نام رشته تابع مدیریت جاوا اسکریپت در صفحه کلاینت که با پاسخ فراخوانی می‌شود. اگر در درخواست گنجانده نشود، مقدار "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 را برمی‌گرداند که شامل داده‌های موجود در یک شی جاوا اسکریپت است که می‌تواند مستقیماً به سازنده DataTable ارسال شود تا آن را پر کند. این تا حد زیادی رایج ترین نوع درخواست است و مهم ترین آن برای اجرای صحیح است.
  • CSV - یک لیست مقادیر مسطح جدا شده با کاما را برمی‌گرداند که باید توسط مرورگر مدیریت شود.
  • TSV - فهرست مقادیر جدا شده از برگه را برمی‌گرداند که باید توسط مرورگر مدیریت شود.
  • HTML - یک جدول HTML را برمی گرداند تا توسط مرورگر ارائه شود.

می توانید از کتابخانه منبع داده تجسم Google (جاوا) یا کتابخانه تجسم پایتون برای تولید این فرمت های خروجی برای شما استفاده کنید.

فرمت پاسخ JSON

اگر درخواست شامل سرصفحه "X-DataSource-Auth" باشد، فرمت پاسخ پیش فرض JSON است و در غیر این صورت JSONP است. توجه داشته باشید که کلاینت نمودار گوگل در واقع از نسخه اصلاح شده JSON و JSONP پشتیبانی می کند. اگر از کتابخانه های کمکی جاوا یا پایتون استفاده می کنید، آنها کد مناسب را برای شما قرار می دهند. اگر پاسخ‌ها را با دست تجزیه می‌کنید، به تغییرات JSON در زیر مراجعه کنید.

اگر درخواست‌های هم‌دامنه را اعمال می‌کنید، باید وجود هدر «X-DataSource-Auth» را در درخواست تأیید کنید و از کوکی‌های مجوز استفاده کنید.

این تنها قالب پاسخی است که توسط متد Google Visualization API google.visualization.Query.send() مشخص شده است. می‌توانید نمونه‌ای از درخواست‌ها و پاسخ‌های JSON را در انتهای این صفحه در Examples ببینید. می توانید از کتابخانه های کمکی جاوا یا پایتون برای ایجاد این رشته پاسخ برای شما استفاده کنید.

این فرمت پاسخ یک شی JSON با کد UTF-8 است (شئی که توسط پرانتزهای { } پیچیده شده و هر ویژگی با کاما از هم جدا شده است) که شامل ویژگی های جدول زیر است (داده ها به ویژگی table اختصاص داده می شوند). این شی JSON باید در داخل مقدار پارامتر responseHandler از درخواست پیچیده شود. بنابراین، اگر مقدار responseHandler درخواست «myHandler» بود، باید یک رشته مانند این را برگردانید (فقط یک ویژگی برای اختصار نشان داده شده است):

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

اگر درخواست شامل مقدار responseHandler نبود، مقدار پیش‌فرض «google.visualization.Query.setResponse» است، بنابراین باید رشته‌ای مانند این را برگردانید (فقط یک ویژگی برای اختصار نشان داده شده است):

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

در اینجا اعضای شی پاسخ موجود هستند:

ویژگی
ضروری؟
شرح
نسخه
خیر

شماره رشته ای که شماره نسخه پروتکل سیم Google Visualization را می دهد. اگر مشخص نشده باشد، مشتری آخرین نسخه را فرض می کند.

مثال: version=0.6

reqId
آره*
شماره رشته ای که شناسه این درخواست را برای این مشتری نشان می دهد. اگر این در درخواست بود، همان مقدار را برگردانید. برای جزئیات بیشتر به توضیحات reqId در بخش درخواست مراجعه کنید.

* اگر این پارامتر در درخواست مشخص نشده بود، لازم نیست آن را در پاسخ تنظیم کنید.
وضعیت
آره

رشته ای که موفقیت یا شکست این عملیات را توصیف می کند. باید یکی و تنها یکی از مقادیر زیر باشد:

  • 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:'5982206968295329967'

جدول
خیر

یک شی DataTable در نماد تحت اللفظی جاوا اسکریپت، همراه با داده های شما. برای جزئیات بیشتر در مورد قالب این شی به بخش مرجع پیوندی مراجعه کنید. در اینجا مثالی از یک جدول داده ساده آورده شده است:

{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 به یک شی جاوا اسکریپت استفاده کنید. یک تفاوت در نحوه پردازش JSON توسط API این است که، اگرچه JSON از مقادیر تاریخ جاوا اسکریپت پشتیبانی نمی کند (به عنوان مثال، "تاریخ جدید(2008,1,28,0,31,26)"؛ API از 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 معمولاً یک لیست جدا شده با کاما است، که در آن هر ردیف از داده ها یک لیست از مقادیر جدا شده با کاما است که به یک کاراکتر خط جدید یونیکس (\n) ختم می شود. مقادیر سلول باید برای هر ستون یک نوع باشد. ردیف اول برچسب های ستون است. در اینجا نمونه ای از جدول سه ردیفی و سه ستونی آورده شده است:

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

فرمت CSV توسط این پروتکل مشخص نشده است. منبع داده مسئول تعریف قالب CSV آن است. با این حال، یک قالب رایج مجموعه‌ای از مقادیر است که با کاما (بدون فاصله میانی) و یک خط جدید (\n) در انتهای هر سطر از هم جدا شده‌اند. هنگامی که یک مرورگر یک پاسخ رشته CSV دریافت می کند، ممکن است از کاربر بپرسد که از چه برنامه ای برای باز کردن رشته استفاده کند، یا ممکن است به سادگی آن را روی صفحه نمایش دهد. کتابخانه های منبع باز جاوا و پایتون روشی را برای تبدیل DataTable به رشته CSV ارائه می کنند.

اگر درخواست شامل یک عضو outFileName از پارامتر tqx باشد، باید سعی کنید نام فایل مشخص شده را در سرصفحه‌های پاسخ قرار دهید.

شی google.visualization.Query از درخواست پاسخ CSV پشتیبانی نمی کند. اگر مشتری بخواهد CSV درخواست کند، می‌توانید یک ابزار Visualization Toolbar را در صفحه خود جاسازی کنید، یا می‌تواند از کد سفارشی برای ایجاد درخواست استفاده کند، یا می‌توانید پیوندی ارائه دهید که ویژگی out:csv tqx را به صراحت، همانطور که در نشان داده شده است، ارائه دهید. آدرس درخواست زیر:

درخواست

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 را با داده ها تعریف می کند. این برای اشکال زدایی کد شما مفید است، زیرا مرورگر می تواند نتیجه شما را مستقیماً در قالبی قابل خواندن ارائه دهد. شما نمی توانید با استفاده از شی google.visualization.Query درخواستی برای پاسخ HTML ارسال کنید. شما باید با استفاده از کد سفارشی یا با تایپ یک URL مشابه این در مرورگر خود، یک پرس و جو برای پاسخ HTML ایجاد کنید:

درخواست

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>

مثال ها

در اینجا چند نمونه درخواست و پاسخ آورده شده است. توجه داشته باشید که درخواست‌ها از آدرس اینترنتی خارج نشده‌اند. که معمولاً توسط مرورگر یا شی 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'}]}]}});

Query with a query string ساده: درخواست برای یک ستون، یک ستون منفرد با چهار ردیف را برمی گرداند.

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: مثالی از یک خطای 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.'}]});

ابزارهای توسعه

  • کتابخانه منبع داده جاوا (از Google) - درخواست و پاسخ را مدیریت می‌کند، جدول پاسخ را از داده‌هایی که به آن می‌دهید ایجاد می‌کند، و زبان پرس‌وجو Google Chart Tools SQL را پیاده‌سازی می‌کند.
  • کتابخانه منبع داده پایتون (از Google) - یک جدول پاسخ ایجاد می کند و نحو پاسخ را ایجاد می کند. تجزیه درخواست یا پیاده سازی زبان پرس و جو SQL Google Chart Tools را انجام نمی دهد .
  • MC-Google_Visualization (شخص ثالث) - این یک کتابخانه سمت سرور PHP است که می توانید از آن برای پیاده سازی یک منبع داده نمودار نمودار برای موتورهای پایگاه داده MySQL، SQLite و PostgreSQL با استفاده از PDO استفاده کنید.
  • bortosky-google-visualization (شخص ثالث) - این یک کتابخانه کمکی برای ایجاد یک Google Visualization API Datatable برای کاربران دات نت است.
  • GV Streamer (شخص ثالث) - GV Streamer یک ابزار سمت سرور است که می تواند داده ها را از منابع مختلف به پاسخ های پرس و جو معتبر به نمودارهای گوگل تبدیل کند. GV Streamer از چندین زبان (به عنوان مثال، PHP، جاوا، دات نت) و چندین منبع داده خام (مثلاً MySql) پشتیبانی می کند.
  • TracGViz (شخص ثالث) - TracGViz یک ابزار رایگان و متن باز است که اجزایی را فراهم می کند تا Trac بتواند از ابزارهای نمودار استفاده کند و همچنین داده های مدیریت شده توسط Trac را به عنوان منبع داده Google Chart Tools پیاده سازی کند.
  • vis-table (شخص ثالث) - کتابخانه ای که منبع داده ابزار نمودار گوگل را در PHP پیاده سازی می کند. دارای سه بخش اصلی است. خود پیاده سازی جدول داده، تجزیه کننده زبان پرس و جو و فرمت کننده ها.
  • پیاده‌سازی منبع داده Google در Oracle PL/SQL (شخص ثالث) - یک بسته Oracle PL/SQL که Oracle را قادر می‌سازد منابع داده را مستقیماً از پایگاه داده سرور سرور کند. بنابراین اساساً می توانید از هر پرس و جوی Oracle به عنوان منبع داده ابزار نمودار Google استفاده کنید (این بسته یک فایل JSON را همراه با داده ها برمی گرداند). تقریباً از زبان پرس و جو گوگل پشتیبانی کامل دارد.