Grafik Araçları Veri Kaynağı Protokolü'nü (V0.6) Uygulama

Bu sayfada, Sorgu sınıfı kullanılarak grafiklere erişilmesi için Grafik Araçları Veri Kaynağı protokolünü destekleyen bir hizmeti nasıl uygulayabileceğiniz açıklanmaktadır.

İçindekiler

Kitle

Bu sayfa öncelikle Grafik Araçları Veri Kaynağı Kitaplığı'nın yardımıyla kendi veri kaynağını oluşturacak geliştiricilerin kullanımına yöneliktir. Bunu veya başka bir yardımcı kitaplığı kullanıyorsanız önce kitaplığınızın dokümanlarını okuyun.

Bu sayfa, istemci görselleştirme ile veri kaynağı arasındaki iletişim için kullanılan kablo protokolünü anlamak isteyen okuyuculara da yöneliktir.

Görselleştirme oluşturuyorsanız veya kullanıyorsanız bu sayfayı okumanız gerekmez.

Bu belgeyi okumak için temel JSON ve HTTP isteği söz dizimini anlamanız gerekir. Grafiklerin kullanıcı açısından nasıl çalıştığını da anlamanız gerekir.

Not: Google, Chart Tools Veri Kaynağı protokolünü destekleyen Google dışı Veri Kaynaklarını resmi olarak desteklemez veya desteklemez.

Genel bakış

Kendi grafikleriniz veya diğer grafikler için veri kaynağı sağlayıcısı olmak amacıyla Chart Tools Datasource protokolünü uygulayabilirsiniz. Bir Grafik Araçları Veri Kaynağı, Veri Kaynağı URL'si adı verilen ve bir grafiğin HTTP GET istekleri gönderebileceği bir URL'yi açığa çıkarır. Buna karşılık veri kaynağı, grafiğin sayfada oluşturmak için kullanabileceği doğru biçimlendirilmiş verileri döndürür. Bu istek-yanıt protokolü Google Görselleştirme API'sı ağ protokolü olarak bilinir.

Veri kaynağı tarafından sunulan veriler, dosya veya veritabanı gibi çeşitli kaynaklardan çıkarılabilir. Tek kısıtlama, türetilmiş sütunların bulunduğu verileri iki boyutlu bir tablo olarak biçimlendirebilmenizdir.

Chart Tools Veri Kaynağı olarak bir isteği belirli bir biçimde ayrıştırıp belirli bir biçimde yanıt döndürmeniz gerekir. Bu sayfaya iki genel şekilde ulaşabilirsiniz:

  • İsteği ve yanıtı ele almak ve DataTable'ı döndürülecek şekilde oluşturmak için aşağıdaki yardımcı kitaplıklardan birini kullanın. Bu kitaplıklardan birini kullanıyorsanız yalnızca verilerinizin bir tablo biçiminde kitaplıkta kullanılabilir olması için gereken kodu yazmanız gerekir.
  • İsteği işleyerek, DataTable oluşturarak ve yanıtı göndererek kendi veri kaynağınızı sıfırdan yazın.

İşleyiş şekli:

  1. Veri kaynağı, grafiklerin bir HTTP GET isteği gönderdiği veri kaynağı URL'si adlı bir URL'yi açığa çıkarır.
  2. İstemci döndürülen veriler için hangi biçimin kullanılacağını, isteğe bağlı bir sorgu dizesini ve isteğe bağlı özel parametreleri açıklayan parametrelerle bir HTTP GET isteğinde bulunur.
  3. Veri Kaynağı, İstek Biçimi bölümünde açıklandığı gibi isteği alır ve ayrıştırır.
  4. Veri Kaynağı, verileri istenen biçimde hazırlar. Bu genellikle bir JSON tablosudur. Yanıt biçimleri, Yanıt Biçimi bölümünde ele alınmıştır. Veri kaynağı; isteğe bağlı olarak filtreleme, sıralama ve diğer veri manipülasyonlarını belirten Görselleştirme API'sı sorgu dilini destekleyebilir.
  5. Veri Kaynağı, serileştirilmiş verileri ve diğer yanıt parametrelerini içeren bir HTTP yanıtı oluşturur ve bu yanıtı Yanıt Biçimi'nde açıklandığı gibi istemciye geri gönderir

Not: İstekler ve yanıtlar (responseHandler ve "ok" gibi) için bu belgede listelenen tüm parametreler ve dize sabit değerleri küçük harf olup büyük/küçük harfe duyarlıdır.

Minimum Gereksinimler

Grafik Araçları Veri Kaynağı olarak yayınlanması için gereken minimum gereksinimler şunlardır:

  • Veri kaynağı, HTTP GET isteklerini kabul etmeli ve müşterileriniz tarafından kullanılabilmelidir.
  • Protokol değişebilir ve bir sürüm şemasını destekleyebilir (geçerli sürüm 0.6'dır). Bu nedenle, veri kaynağınız mevcut sürümün yanı sıra önceki sürümleri kullanan istekleri de desteklemelidir. En yeni sürüme geçiş yapan istemcilerin bozulmasını önlemek için yeni sürümleri yayınlanır yayınlanmaz desteklemeye çalışmalısınız.
  • İsteğin bir parçası olarak bilinmeyen özellikler gönderilirse bu işlem başarısız olmaz. Bunun nedeni, yeni sürümlerin farkında olmadığınız yeni özellikler sunabilmesidir.
  • Yalnızca beklediğiniz özellikleri ayrıştırın. Yeni sürümler yeni özellikler sunabilir, ancak istek dizesinin tamamını körü körüne kabul edip kullanmayın. Kötü amaçlı saldırılara karşı kendinizi korumak için yalnızca beklediğiniz özellikleri ayrıştırıp kullanın.
  • İstemci grafiklerini kendiniz kodlamıyorsanız veri kaynağı gereksinimlerinizi dikkatlice belgeleyin. Buna aşağıdaki bilgilerin belgelenmesi de dahildir:
    • Kabul ettiğiniz tüm özel parametreler,
    • Google Görselleştirme API'sı sorgu dilini ayrıştırıp ayrıştıramayacağınız ve
    • Ne tür veriler döndürdüğünüz ve bu verilerin yapısı (satır ve sütunların neyi temsil ettiği ve tüm etiketler).
  • Bilinmeyen istemcilerden gelen istekleri kabul eden bir site için tüm standart güvenlik önlemlerini alın. İsteklerin kimliğini doğrulamak veya kötü amaçlı saldırılara karşı korunmanıza yardımcı olmak için MD5, karma oluşturma ve parametrelerinizdeki diğer güvenlik mekanizmalarını makul ölçüde destekleyebilir ve müşterilerin gereksinimlerinizden haberdar olmasını ve bunlara yanıt vermesini bekleyebilirsiniz. Ancak, grafikleri kendiniz kodlamazsanız tüm gereksinimlerinizi iyice belgelediğinizden emin olun. Aşağıdaki Güvenlikle İlgili Dikkat Edilmesi Gerekenler bölümünü inceleyin.
  • Tüm istek ve yanıt dizeleri UTF-8 olarak kodlanmalıdır.
  • En önemli yanıt biçimi JSON'dır. Çoğu grafik tarafından kullanılan biçim olduğundan, önce JSON'i uyguladığınızdan emin olun. Ardından başka yanıt türleri ekleyin.
  • Görselleştirme API'sı sorgu dilini desteklemeniz zorunlu değildir ancak veri kaynağınızı müşteriler için daha kullanışlı hale getirir.
  • Tüm grafik türlerinden gelen istekleri desteklemeniz gerekmez ve özel grafikler için özel parametreleri destekleyebilirsiniz. Ancak yanıtları aşağıda açıklanan standart biçimde döndürmeniz gerekir.

Güvenlikle İlgili Dikkat Edilmesi Gereken Noktalar

Veri kaynağınızı tasarlarken verilerinizin ne kadar güvenli olması gerektiğini göz önünde bulundurmanız gerekir. Siteniz için basit şifre erişiminden güvenli çerez kimlik doğrulamasına kadar çeşitli güvenlik şemalarını kullanabilirsiniz.

XSSI (siteler arası komut dosyası dahil) saldırıları, grafikler açısından risk teşkil eder. Kullanıcı, kötü amaçlı bir komut dosyası içeren sayfaya gidebilir ve ardından geçerli kullanıcının kimlik bilgilerini kullanarak veri kaynağı URL'lerine sorgu yapmaya başlayabilir. Kullanıcı bir siteden çıkış yapmadıysa komut dosyasının kimliği geçerli kullanıcı olarak doğrulanır ve söz konusu sitede izinlere sahip olur. Kötü amaçlı komut dosyası, <script src> etiketini kullanarak JSONP'ye benzer şekilde veri kaynağını dahil edebilir.

Ek bir güvenlik düzeyi olarak, istekleri veri kaynağınızla aynı alandan gelen isteklerle kısıtlamayı düşünebilirsiniz. Bu durumda veri kaynağınızın görünürlüğü önemli ölçüde kısıtlanır ancak alanınız dışında erişilmemesi gereken son derece hassas verileriniz varsa bu özelliği değerlendirmelisiniz. Herhangi bir alandan gelen sorguları kabul edecek kısıtlanmamış veri kaynağı yerine yalnızca aynı alandan gelen isteklere izin veren veri kaynağına kısıtlanmış veri kaynağı adı verilir. Kısıtlanmış veri kaynağını nasıl uygulayacağınıza dair bazı ayrıntılar aşağıda verilmiştir:

Bir isteğin gerçekten alanınız dışından geldiğinden emin olmak için, (harici bir alandan (veya XSRF saldırısı altındaki alanın içinden bir tarayıcıdan) gelmediğinden emin olmak için):

  • İstekte "X-DataSource-Auth" üstbilgisinin olduğunu doğrulayın. Bu başlık, Google Görselleştirme API'sı tarafından tanımlanır; bu başlığın içeriğini incelemeniz gerekmez, yalnızca orada olduğunu doğrulayın. Google Grafik Araçları Veri Kaynağı kitaplığını kullanıyorsanız kitaplık bu işleme sizin için hazırlanabilir.
  • İstemcinin kimliğini doğrulamak için çerez kimlik doğrulamasını kullanın. Web alanları arası isteğe özel üstbilgi eklemenin, kimlik doğrulama çerezlerini kullanmaya devam etmenin bilinen bir yolu yoktur.
  • Bir <script src> etiketiyle birlikte sunulan JavaScript'in yürütülmemesini sağlayın. Bunu yapmak için JSON yanıtınızın önüne )]} yazın ve ardından yeni satır ekleyin. İstemcinizde öneki öne çıkarın. XmlHttpRequest için bu, yalnızca isteğin aynı alandan kaynaklanması durumunda mümkündür.

İstek Biçimi

Bir istemci özel öğeler, isteğe bağlı sorgu dizesi, imza ve diğer öğeleri de içeren çeşitli parametreleri içeren bir HTTP GET isteği gönderir. Yalnızca bu bölümde açıklanan parametreleri ayrıştırmaktan sorumlusunuz ve kötü amaçlı saldırılardan kaçınmak için başkalarını yapmamaya dikkat edin.

İsteğe bağlı parametreler için varsayılan değerlerin (hem standart hem de özel) olduğundan emin olun ve tüm varsayılanlarınızı site dokümanlarınıza ekleyin.

Aşağıda birkaç örnek istek verilmiştir (Örnekler bölümünde bu dokümanın sonunda daha fazla istek ve yanıt örneği görebilirsiniz):

Not: Aşağıdaki istek dizeleri ve Örnekler bölümünde gösterilenler, gönderilmeden önce URL çıkışlı olmalıdır.

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

İstek dizesindeki tüm standart parametrelerin listesi aşağıda verilmiştir. Hem parametre adlarının (ör. "sürüm") hem de sabit dize değerlerinin ("ok", "warning" ve "not_modified gibi") büyük/küçük harfe duyarlı olduğunu unutmayın. Tabloda, parametrenin gönderilmesi gerekip gerekmediği ve gönderildiyse bunu yapmanız gerekip gerekmediği de açıklanmaktadır.

Parametre
İstekte zorunlu mu?
Veri Kaynağı Kullanmalı mı?
Açıklama
tq
Hayır
Hayır

Döndürülen verilerin nasıl filtreleneceğini, sıralanacağını veya değiştirileceğini belirten, Google Görselleştirme API'sı sorgu dilinde yazılmış bir sorgu. Dizenin tırnak içine alınması gerekmez.

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

tqx
Hayır
Evet

Standart veya özel parametreler için iki nokta üst üste işaretiyle ayrılmış anahtar/değer çifti grubudur. Çiftler noktalı virgülle ayrılır. Görselleştirme protokolü tarafından tanımlanan standart parametrelerin listesi aşağıda verilmiştir:

  • reqId - [İstekte gerekli; veri kaynağında işlem yapılmalı] Bu istek için sayısal bir tanımlayıcı. Bu, bir istemci yanıt almadan önce birden fazla istek gönderirse veri kaynağının uygun istekle yanıtı tanımlayabilmesi için kullanılır. Bu değeri yanıta geri gönderin.
  • version - [İstekte isteğe bağlıdır; Veri kaynağı işlemelidir] Google Görselleştirme protokolünün sürüm numarası. Mevcut sürüm 0.6'dır. Gönderilmezse en son sürümü varsayın.
  • sig - [İstekte isteğe bağlıdır; Veri kaynağının işleyebilmesi için isteğe bağlıdır] Bu veri kaynağına önceki isteklerde bu istemciye gönderilen DataTable karması. Bu, bir müşteriye aynı verilerin iki kez gönderilmesini önlemek için bir optimizasyondur. Bunu nasıl kullanacağınızla ilgili bilgi edinmek için aşağıdaki İsteğinizi Optimize Etme bölümüne bakın.
  • out - [İsteğe bağlı; veri kaynağı işlemelidir] Döndürülen verilerin biçimini açıklayan bir dize. Aşağıdaki değerlerden herhangi biri olabilir:
    • json - [Varsayılan değer] Bir JSON yanıt dizesi (aşağıda açıklanmıştır).
    • html: Satır ve sütunlar içeren temel bir HTML tablosu. Bu kullanılıyorsa döndürülmesi gereken tek şey, verilerin bulunduğu bir HTML tablosudur. Bu, aşağıdaki Yanıt Biçimi bölümünde açıklandığı gibi hata ayıklama için yararlıdır.
    • csv - Virgülle ayrılmış değerler. Bu işlev kullanılıyorsa döndürülen tek şey bir CSV veri dizesidir. Bir outFileName parametresi belirterek, yanıt başlıklarında dosya için özel bir ad isteyebilirsiniz.
    • tsv-excel: csv özelliğine benzer, ancak virgül yerine sekme kullanımı ve tüm verilerin utf-16 olarak kodlanması.
    Google Görselleştirme API'sında oluşturulmuş bir grafiğin yalnızca json dosyası olarak talep edeceğini unutmayın. Her tür hakkında ayrıntılı bilgi için aşağıdaki Yanıt Biçimi bölümüne bakın.
  • responseHandler - [İstekte isteğe bağlıdır; Veri kaynağı işlemelidir] İstemci sayfasında yanıtla çağrılacak JavaScript işleme işlevinin dize adı. İstekte yer almıyorsa değer "google.visualization.Query.setResponse" olur. Bu, yanıtın parçası olarak geri gönderilecektir. Nasıl yapılacağını öğrenmek için aşağıdaki Yanıt Biçimi'ne bakın.
  • outFileName - [İstekte isteğe bağlıdır; Veri kaynağının işleyebilmesi için isteğe bağlıdır] out:csv veya out:tsv-excel belirtirseniz isteğe bağlı olarak burada belirtilen dosya adını isteyebilirsiniz. Örnek: outFileName=results.csv.

Örnek: tqx=version:0.6;reqId:1;sig:5277771;out:json; responseHandler:myQueryHandler

tqrt
Hayır
Hayır

Ayrılmış: Bu parametreyi yoksayın. Sorguyu göndermek için kullanılan yöntem.

Yanıt Biçimi

Yanıtın biçimi isteğin beklenen türünü belirten out parametresine bağlıdır. Her bir istek türüne nasıl yanıt verileceğini öğrenmek için aşağıdaki bölümlere bakın:

  • JSON: Doldurmak için doğrudan DataTable oluşturucuya iletilebilen JavaScript nesnesindeki verileri içeren bir JSON yanıtı döndürür. Bu, açık farkla en yaygın istek türüdür ve doğru şekilde uygulanması en önemlidir.
  • CSV - Tarayıcı tarafından işlenecek düz virgülle ayrılmış bir değer listesi döndürür.
  • TSV - Tarayıcı tarafından işlenecek sekmeyle ayrılmış değer listesi döndürür.
  • HTML - Tarayıcı tarafından oluşturulacak HTML tablosunu döndürür.

Bu çıkış biçimlerini sizin için oluşturmak üzere Google Görselleştirme Veri Kaynağı Kitaplığı'nı (java) veya görselleştirme Python kitaplığını kullanabilirsiniz.

JSON Yanıt Biçimi

İstek "X-DataSource-Auth" başlığı içeriyorsa varsayılan yanıt biçimi JSON, aksi takdirde JSONP'dir. Google grafik istemcisinin aslında JSON ve JSONP'nin değiştirilmiş bir sürümünü desteklediğini unutmayın. Java veya Python yardımcı kitaplıklarını kullanıyorsanız sizin için doğru kodu yerleştirirler. Yanıtları manuel olarak ayrıştırıyorsanız aşağıdaki JSON Değişiklikleri bölümüne bakın.

Aynı alan isteklerini uyguluyorsanız istekte "X-DataSource-Auth" başlığının bulunduğunu doğrulamanız ve yetkilendirme çerezlerini kullanmanız gerekir.

Bu, Google Görselleştirme API'sı yöntemi google.visualization.Query.send() tarafından belirtilen tek yanıt biçimidir. Bazı örnek JSON isteklerini ve yanıtlarını bu sayfanın sonunda Örnekler bölümünde görebilirsiniz. Bu yanıt dizesini sizin için oluşturmak üzere Java veya Python yardımcı kitaplıklarını kullanabilirsiniz.

Bu yanıt biçimi, aşağıdaki tabloda bulunan özellikleri içeren UTF-8 olarak kodlanmış JSON nesnesidir (süreli ayraçla { } sarmalanmış bir nesne). Veriler aşağıdaki tablodaki özellikleri içerir (veriler table özelliğine atanır). Bu JSON nesnesi, istekten responseHandler parametresi değerinin içine sarmalanmalıdır. Bu durumda, isteğin responseHandler değeri "myHandler" ise şöyle bir dize döndürmelisiniz (kısa olması için yalnızca bir özellik gösterilir):

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

İstek responseHandler değeri içermiyorsa varsayılan değer "google.visualization.Query.setResponse" şeklindedir. Bu nedenle, bunun gibi bir dize döndürmelisiniz (kısa olması için yalnızca bir özellik gösterilir):

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

Kullanılabilen yanıt nesnesi üyeleri şunlardır:

Özellik
Gerekli mi?
Açıklama
sürüm
Hayır

Google Görselleştirme bankası protokol sürümü numarasını veren bir dize numarası. Belirtilmezse istemci en son sürümü varsayar.

Örnek: version=0.6

istek kimliği
Evet*
Bu istemci için bu isteğin kimliğini belirten bir dize numarası. Bu, istekte bulunduysa aynı değeri döndürün. Daha fazla ayrıntı için istek bölümündeki reqId açıklamasına bakın.

* Bu parametre istekte belirtilmemişse yanıtı yanıtta ayarlamanız gerekmez.
durum
Evet

Bu işlemin başarısını veya başarısızlığını açıklayan bir dize. Aşağıdaki değerlerden yalnızca biri olmalıdır:

  • ok - Başarılı istek. table mülküne bir tablo dahil edilmesi zorunludur.
  • warning - Başarılı, ancak sorunları var. table mülküne bir tablo dahil edilmesi zorunludur.
  • error - Bir sorun oluştu. Bu iadeyi kabul ederseniz table etiketini döndürmemeniz ve errors iade etmeniz gerekir.

Örnek: status:'warning'

uyarılar
Yalnızca status=warning

Her biri önemli olmayan bir sorunu açıklayan bir veya daha fazla nesne dizisi. status=warning ise zorunludur, aksi takdirde izin verilmez. Her nesne aşağıdaki dize özelliklerine sahiptir (her özellik için yalnızca bir değer döndürür):

  • reason - [Zorunlu] Uyarının tek kelimelik bir dizedeki açıklaması. Protokol aşağıdaki değerleri tanımlar ancak gerekirse kendi değerlerinizi de tanımlayabilirsiniz (ancak istemci özel değerleri hiçbir şekilde işlemez). Yalnızca bir reason değeriniz olabilir:
    • data_truncated - Döndürülen DataTable satırından bazı satırlar kaldırıldı. Bunun nedeni, kullanıcının sonuç listesini kırpan bir sorgu dizesi içermesi veya veri kaynağının herhangi bir nedenle tam sonuçları döndürmesini istememesiydi.
    • other - Belirtilmemiş genel bir uyarı.
  • message - [İsteğe bağlı] Sorunu açıklayan, muhtemelen bir uyarı kutusu başlığı olarak kullanılan kısa bir dize. Bu bilgi kullanıcıya gösterilebilir. HTML desteklenmiyor.
  • detailed_message - [İsteğe bağlı] Sorunu ve olası çözümleri açıklayan ayrıntılı, alıntılanmış bir dize mesajı. Tek HTML özelliği, tek bir href özelliğine sahip <a> öğesidir. Unicode kodlama desteklenir. Bu bilgi, kullanıcıya gösterilebilir.

Örnek: warnings:[{reason:'data_truncated',message:'Retrieved data was truncated'}]

errors
status=error için zorunludur

Her biri bir hatayı açıklayan bir veya daha fazla nesne dizisi. status=error zorunluysa aksi takdirde izin verilmez. Bu, warnings değerine benzer. not_modified hatasının (hata olsa bile) aslında istemci için bir hata olmadığını unutmayın.

Dizide aşağıdaki dize üyeleri bulunur (her üye için yalnızca bir değer döndürür):

  • reason - [Zorunlu] warnings.reason ile aynıdır, ancak aşağıdaki değerler tanımlanır:
    • not_modified - Son istekten bu yana veriler değişmedi. Hatanın nedeni buysa table için bir değeriniz olmamalıdır.
    • user_not_authenticated - Veri kaynağı için kimlik doğrulama gerekiyorsa ve yapılmadıysa bu değeri belirtin. Ardından istemci, message değerine sahip bir uyarı gösterir.
    • unknown_data_source_id
    • access_denied
    • unsupported_query_operation
    • invalid_query
    • invalid_request
    • internal_error
    • not_supported
    • illegal_formatting_patterns
    • other - Genel ve belirtilmemiş bir hata.
  • message - [İsteğe bağlı] warnings.message ile aynıdır. Not: Kötü amaçlı bir kullanıcı, yetkisiz verilere erişmek için, hatta verilerinize ya da sitenize saldırmak için ayrıntılı veri dizesi kullanabilir. Güvenli olması gereken verileri depoluyorsanız veya kullanıcı sorgularını doğrudan işliyorsanız saldırgana bilgi sağlayabilecek ayrıntılı bir hata mesajı döndürmeyip bunun yerine "Kötü sorgu dizesi" gibi genel bir mesaj verebilirsiniz.
  • detailed_message - [İsteğe bağlı] warnings.detailed_message ile aynıdır. Aşırı ayrıntılı message bilgisi için uyarıya bakın.

Örnek: status:'error',errors:[{reason:'not_modified',message:'Data not modified'}]

sig
Hayır

Tablo nesnesinin karma değeri. İstemci ile veri kaynağı arasındaki veri aktarımını optimize etmek için yararlıdır. Dilediğiniz karma algoritmasını seçebilirsiniz. Bu özelliği destekliyorsanız herhangi bir veri döndürülmezse istemci tarafından iletilen değeri, yeni veri döndürülürse yeni bir karma döndürmeniz gerekir.

Örnek: sig:'5982206968295329967'

tablo
Hayır

Verilerinizle birlikte JavaScript değişmez gösteriminde bir DataTable nesnesi. Bu nesnenin biçimiyle ilgili ayrıntılar için bağlı referans bölümüne bakın. Aşağıda basit bir veri tablosu örneği verilmiştir:

{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 özelliği yalnızca status=ok veya status=warning varsa bulunmalıdır. Veri döndürmüyorsanız bu özelliği eklemeyin (yani özelliği boş dize değeri ile geri iletmeyin).

Örnek: Aşağıdaki Örnekler bölümüne bakın.

 

Katı JSON gerekiyor

Google'ın yardımcı kitaplıkları ve Google'a gönderilen tüm sorgular katı JSON/JSONP bilgileri döndürür. Döndürülen kodu kendiniz ayrıştırmıyorsanız bu durum sizin için önemli değildir. Bu durumda JSON dizesini bir JavaScript nesnesine dönüştürmek için JSON.parse() işlevini kullanabilirsiniz. JSON dosyasının API tarafından işlenmesiyle ilgili bir fark, JSON'nin JavaScript Tarih değerlerini desteklememesidir (örneğin, "new Date(2008,1,28,0,31,26)"); API, tarihlerin dize olarak şu biçimde bir geçerli JSON gösterimini destekler: Date(year, month, day[,hour, minute, second[, millisecond]])

 

JSON yanıtlarını optimize etme

Bir istemci iki istek yaparsa ve veriler istekler arasında değişmediyse verileri yeniden göndermemek mantıklıdır. Bunu yapmak bant genişliğinin boşa harcanmasına neden olur. İstekleri daha verimli hale getirmek için protokol, istemcideki verilerin önbelleğe alınmasını ve veriler son istekten bu yana değişmediyse yanıtta sinyal gönderilmesini destekler. Hesaplama aşağıdaki şekilde yapılır:

  1. İstemci, veri kaynağına bir istek gönderir.
  2. Veri kaynağı, hem DataTable nesnesinin hem de DataTable nesnesinin karmasını oluşturur ve her ikisini de yanıtında döndürür. (Karma değeri, tqx.sig parametresinde döndürülür.) Google Görselleştirme API'sı istemcisi, DataTable ve sig değerini önbelleğe alır.
  3. İstemci, önbelleğe alınan tqx.sig değeri dahil olmak üzere başka bir veri isteği gönderir.
  4. Veri kaynağı iki şekilde yanıt verebilir:
    • Veriler önceki istekten farklı ise veri kaynağı yeni DataTable ve yeni sig değer karmasını gönderir.
    • Veriler önceki istekten değişmediyse veri kaynağı status=error, reason=not_modified, sig=old_sig_value değerini geri gönderir.
  5. Her iki durumda da grafiği barındıran sayfa başarılı bir yanıt alır ve DataTable öğesini QueryResponse.getDataTable() çağrısı yaparak alabilir. Veriler aynıysa tablonun önbelleğe alınan sürümü olacaktır.

Bunun yalnızca Google Görselleştirme API'sında oluşturulan grafiklerden gelen JSON istekleri için çalıştığını unutmayın.

CSV Yanıt Biçimi

İstek out:csv değerini belirtiyorsa yanıtta meta veri değil, verilerin yalnızca CSV gösterimi bulunur. CSV tablosu genellikle virgülle ayrılmış bir listedir. Burada her veri satırı, UNIX yeni satır karakteriyle (\n) biten virgülle ayrılmış bir değer listesidir. Hücre değerleri her sütun için aynı türe sahip olmalıdır. İlk satır, sütun etiketleridir. Aşağıda üç satırlık, üç sütunlu tablo örneği verilmiştir:

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

CSV biçimi bu protokol tarafından belirtilmez; CSV biçiminin belirlenmesinden veri kaynağı sorumludur. Bununla birlikte, ortak biçim, virgülle ayrılmış değer grubudur (ara boşluk bırakmadan) ve her satırın sonunda yeni satır (\n) bulunur. Bir tarayıcı CSV dizesi yanıtı aldığında kullanıcıya dizeyi açmak için hangi uygulamanın kullanılacağını sorabilir veya dizeyi ekranda oluşturabilir. Java ve Python açık kaynak kitaplıkları, DataTable'ı CSV dizesine dönüştürmek için bir yöntem sunar.

İstek tqx parametresinin bir outFileName öğesini içeriyorsa belirtilen dosya adını yanıt başlıklarına eklemeye çalışmalısınız.

google.visualization.Query nesnesi, bir CSV yanıtı isteğini desteklemez. Bir CSV dosyası için istekte bulunmak isteyen bir müşteri, sayfanıza bir Görselleştirme Araç Çubuğu gadget'ı yerleştirebilir veya isteği oluşturmak için özel kod kullanabilir ya da aşağıdaki istek URL'sinde gösterildiği gibi, tqx özelliğinin out:csv özelliğini açık bir şekilde ayarlayan bir bağlantı sağlayabilirsiniz:

İstek

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

Yanıt

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

TSV Yanıt Biçimi

İstek out:tsv-excel değerini belirtiyorsa yanıtta meta veri bulunmaz. utf-16 kodlu verilerin sekmeyle ayrılmış bir temsili sunulur. İstek tqx parametresinin bir outFileName öğesini içeriyorsa belirtilen dosya adını yanıt başlıklarına eklemeye çalışmalısınız.

HTML Yanıt Biçimi

İstek out:html değerini belirtiyorsa yanıt, verileri içeren bir HTML tablosu tanımlayan bir HTML sayfası olmalıdır. Tarayıcı, sonucunuzu okunabilir bir biçimde doğrudan oluşturabileceğinden bu, kodunuzdaki hata ayıklama için yararlıdır. google.visualization.Query nesnesini kullanarak bir HTML yanıtı için sorgu gönderemezsiniz. Özel bir kod kullanarak veya tarayıcınızda aşağıdakine benzer bir URL yazarak bir HTML yanıtı için sorgu oluşturmanız gerekir:

İstek

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

Yanıt

<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>

Örnekler

Bazı örnek istekler ve yanıtlar. İsteklerin URL çıkış karaktersiz kodlanmadığını, genellikle tarayıcı veya google.visualization.Query nesnesi tarafından yapıldığını unutmayın.

Basit istek: Üç sütunlu ve dört satırlı tabloyla temel bilgileri döndürür.

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'}]}]}});

Yanıt işleyicili basit istek: Farklı veri türleri içeren üç sütunlu, üç satırlı tablo döndürür.

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'}]}]}});

Basit bir sorgu dizesi içeren sorgu: Tek bir sütun için istek, dört satırdan oluşan tek bir sütun döndürür.

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'}]}]}});

Veri değiştirilmedi hatası: not_modified hatası örneği.

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'}]});

Veri kesimi uyarısı: data_truncated uyarısı örneği. İsteğin hâlâ veri döndürdüğüne dikkat edin.

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'}]}]}});

Erişim reddedildi hatası: access_denied hatası örneği.

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'}]});

Geçersiz sorgu dizesi: Geçersiz sorgu dizesi içeren bir istek örneği. Ayrıntılı mesajın gerçek hata mesajı yerine genel bir mesaj olduğunu unutmayın.

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.'}]});

Geliştirme Araçları

  • Java Veri Kaynağı Kitaplığı - İsteği ve yanıtı yönetir, verdiğiniz verilerden yanıt tablosunu oluşturur ve Google Grafik Araçları SQL sorgu dilini uygular.
  • Python Datasource Library (Google'dan) - Yanıt tablosu oluşturur, yanıt söz dizimi oluşturulur. İsteği ayrıştırma veya Google Chart Tools SQL sorgu dilini uygulama işlemlerini yapmaz.
  • MC-Google_Visualization (Üçüncü taraf) - Bu, PDO kullanarak MySQL, SQLite ve PostgreSQL veritabanı motorları için Chart Tools Veri Kaynağı uygulamak amacıyla kullanabileceğiniz bir PHP sunucu tarafı kitaplığıdır.
  • bortosky-google-visualization (Üçüncü taraf): Bu, .NET kullanıcıları için Google Görselleştirme API'sı Veri Tablosu oluşturmaya yardımcı olan bir yardımcı kitaplıktır.
  • GV Streamer (Üçüncü taraf) - GV Streamer, farklı kaynaklardan gelen verileri geçerli sorgu yanıtlarına Google grafiklerine dönüştürebilen bir sunucu tarafı araçtır. GV Streamer birkaç dili (örneğin, PHP, Java, .NET) ve çeşitli ham veri kaynaklarını (örneğin, MySql) destekler.
  • TracGViz (Üçüncü taraf) - TracGViz, bileşenleri sağlayan ücretsiz ve açık kaynaklı bir araçtır. Bu sayede Trac, grafik gadget'larını da kullanabilir ve Trac tarafından yönetilen verileri Google Grafik Araçları Veri Kaynağı kaynağı olarak uygulayabilir.
  • vis-table (Üçüncü taraf) - PHP'de bir Google Chart Tools Veri Kaynağı uygulayan kitaplık. Üç ana bölümden oluşur. Veri tablosunun kendisi, sorgu dili ayrıştırıcısı ve biçimlendiriciler.
  • Oracle PL/SQL'de Google Veri Kaynağı Uygulaması (Üçüncü taraf) - Oracle'ın, Veri Kaynaklarını doğrudan veritabanından işlemesini sağlayan bir Oracle PL/SQL paketi. Temel olarak herhangi bir Oracle sorgusunu Google Chart Tools Veri Kaynağı olarak kullanabilirsiniz (paket, verilerin olduğu bir JSON dosyası döndürür). Google Sorgu Dili için neredeyse tam destek sunar.