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

Bu sayfada, Sorgu sınıfı kullanan grafiklere veri göstermek 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ı olmadan kendi veri kaynağını oluşturacak geliştiricilere yöneliktir. Bu yardımcı kitaplığı veya başka bir yardımcı kitaplığı kullanıyorsanız önce kitaplığınızın belgelerini okuyun.

Bu sayfa ayrıca, istemci görselleştirme ile veri kaynağı arasındaki iletişimde kullanılan kablo protokolünü anlamak isteyen okuyucular için de hazırlanmıştır.

Görselleştirme oluşturuyor veya kullanıyorsanız bu sayfayı okumanıza gerek yoktur.

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

Not: Google, Grafik Araçları Veri Kaynağı protokolünü destekleyen Google dışı hiçbir veri kaynağını resmi olarak onaylamaz veya desteklemez.

Genel bakış

Kendi grafikleriniz veya diğer grafikleriniz için veri kaynağı sağlayıcısı olmak istiyorsanız Grafik Araçları Veri Kaynağı protokolünü uygulayabilirsiniz. Grafik Araçları Veri Kaynağı, bir grafiğin HTTP GET isteklerini gönderebileceği Veri Kaynağı URL'si adlı bir URL gösterir. Buna karşılık olarak veri kaynağı, grafiğin sayfada grafiği 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ı kablo protokolü olarak bilinir.

Bir veri kaynağı tarafından sunulan veriler, dosya veya veritabanı gibi çeşitli kaynaklardan çıkarılabilir. Tek kısıtlama, verileri türü yazılmış sütunlar içeren iki boyutlu bir tablo olarak biçimlendirebilmenizdir.

Grafik Araçları Veri Kaynağı olarak bir isteği belirli bir biçimde ayrıştırmanız ve yanıtı belirli bir biçimde döndürmeniz gerekir. Bunu iki genel yöntemden biriyle yapabilirsiniz:

  • İsteği ve yanıtı işlemek için aşağıdaki yardımcı kitaplıklardan birini kullanın ve döndürülecek DataTable'ı oluşturun. Bu kitaplıklardan birini kullanıyorsanız yalnızca verilerinizi tablo biçiminde kitaplığa sunmak için gereken kodu yazmanız gerekir.
  • İsteği işleyip 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 gösterir.
  2. İstemci, döndürülen veriler için hangi biçimin kullanılacağını açıklayan parametreler, isteğe bağlı bir sorgu dizesi ve isteğe bağlı özel parametrelerle bir HTTP GET isteği oluşturur.
  3. Veri Kaynağı, isteği İstek Biçimi bölümünde açıklandığı gibi 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ülasyon işlemlerini 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 Yanıt Biçimi'nde açıklandığı gibi istemciye geri gönderir.

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

Minimum gereksinimler

Grafik Araçları Veri Kaynağı işlevi görmek için minimum gereksinimler şunlardır:

  • Veri kaynağı, HTTP GET isteklerini kabul etmeli ve müşterilerinizin kullanımına sunulmalıdır.
  • Protokol değişebilir ve sürüm şemasını destekler (mevcut sürüm 0.6'dır). Bu nedenle veri kaynağınız, hem önceki sürümleri hem de mevcut sürümü kullanan istekleri desteklemelidir. En yeni sürüme hızlıca geçen istemcilerin bozulmalarını önlemek için yeni sürümleri yayınlanır yayınlanmaz desteklemeye çalışmalısınız.
  • İstek kapsamında bilinmeyen özellikler gönderilirse 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 sunsa da istek dizesinin tamamını körü körüne kabul etmeyin ve kullanmayın. Kendinizi kötü amaçlı saldırılara karşı korumak için yalnızca beklediğiniz özellikleri dikkatle ayrıştırıp kullanın.
  • Müşteri grafiklerini kendiniz kodlamıyorsanız veri kaynağı gereksinimlerinizi dikkatli bir şekilde belgeleyin. Buna aşağıdaki bilgilerin belgelenmesi de dahildir:
    • Kabul ettiğiniz tüm özel parametreler,
    • Google Görselleştirme API'si 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ırların ve sütunların neyi temsil ettiği ve etiketlemeler).
  • 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şı güvenliği sağlamaya yardımcı olmak için parametrelerinizde MD5, karma oluşturma ve diğer güvenlik mekanizmalarını makul bir şekilde destekleyebilir ve istemcilerin gereksinimlerinizi bilmelerini ve bunlara yanıt vermelerini bekleyebilirsiniz. Ancak grafikleri kendiniz kodlamıyorsanız tüm gereksinimlerinizi iyi belgelediğinizden emin olun. Aşağıdaki Güvenlikle İlgili Dikkat Edilmesi Gereken Noktalar bölümünü inceleyin.
  • Tüm istek ve yanıt dizeleri UTF-8 olarak kodlanmış olmalıdır.
  • En önemli yanıt biçimi JSON'dir. Çoğu grafik tarafından kullanılan biçim olduğu için öncelikle JSON'u uyguladığınızdan emin olun. Diğer yanıt türlerini daha sonra ekleyin.
  • Görselleştirme API'si sorgu dilini desteklemeniz zorunlu değildir ancak veri kaynağınız müşteriler için daha kullanışlı hale gelir.
  • Tüm grafik türlerinden gelen istekleri desteklemeniz zorunlu değildir 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. Sitenizde, basit şifre erişiminden güvenli çerez kimlik doğrulamasına kadar çeşitli güvenlik şemaları kullanabilirsiniz.

XSSI (siteler arası komut dosyası dahil etme) saldırıları, grafikler için risk teşkil eder. Bir kullanıcı, kötü amaçlı bir komut dosyası içeren bir sayfaya gidebilir. Daha sonra, mevcut kullanıcının kimlik bilgilerini kullanarak veri kaynağı URL'lerine sorgu göndermeye başlar. Kullanıcı bir siteden çıkış yapmadıysa komut dosyasının kimliği geçerli kullanıcı olarak doğrulanır ve o sitede gerekli izinlere sahip olur. <script src> etiketi kullanıldığında kötü amaçlı komut dosyası JSONP'ye benzer şekilde veri kaynağını içerebilir.

Ek bir güvenlik düzeyi olarak istekleri veri kaynağınızla aynı alandan gelen isteklerle kısıtlayabilirsiniz. Bu, veri kaynağınızın görünürlüğünü önemli ölçüde kısıtlar ancak alanınız dışından erişilmemesi gereken çok hassas verileriniz varsa bunu göz önünde bulundurmalısınız. Yalnızca aynı alandan gelen isteklere izin veren bir veri kaynağına, tüm alanlardan gelen sorguları kabul eden kısıtlanmamış veri kaynağı değil, kısıtlanmış veri kaynağı denir. Kısıtlanmış bir veri kaynağının nasıl uygulanacağıyla ilgili bazı ayrıntılar aşağıda verilmiştir:

Bir isteğin dış bir alandan (veya alan adının içinde bulunan XSRF saldırısı altındaki bir tarayıcıdan) değil, gerçekten alan adınızdan geldiğinden emin olmak için:

  • İstekte "X-DataSource-Auth" üstbilgisi olduğunu doğrulayın. Bu üst bilgi, Google Görselleştirme API'sı tarafından tanımlanır. Bu üst bilginin içeriğini incelemeniz gerekmez. Yalnızca sayfanın orada olduğunu doğrulamanız gerekir. Google Grafik Araçları Veri Kaynağı kitaplığını kullanıyorsanız kitaplığın bu işlemleri sizin için yapmasını sağlayabilirsiniz.
  • İstemcinin kimliğini doğrulamak için çerez kimlik doğrulamasını kullanın. Kimlik doğrulama çerezlerini yerinde tutarken web alanları arası isteğe özel üst bilgi eklemenin bilinen bir yolu yoktur.
  • Bir <script src> etiketiyle dahil edildiğinde JavaScript'in yürütülmemesini sağlayın. Bunu yapmak için JSON yanıtınızın önüne )]}' karakteri ve ardından yeni bir satır ekleyin. İstemcinizde ön eki yanıttan kaldırın. XmlHttpRequest için bu yalnızca istek aynı alandan geldiğinde mümkündür.

İstek Biçimi

Bir istemci özel öğeler, isteğe bağlı bir sorgu dizesi, imza ve diğer öğeler dahil olmak üzere çeşitli parametreler içeren bir HTTP GET isteği gönderir. Yalnızca bu bölümde açıklanan parametreleri ayrıştırma sorumluluğu size aittir ve kötü amaçlı saldırılardan kaçınmak için başka parametreler kullanmamaya dikkat etmelisiniz.

İsteğe bağlı parametreler (hem standart hem de özel) için varsayılan değerleriniz olduğundan emin olun ve tüm varsayılan ayarlarınızı site belgelerinizde belirtin.

Birkaç örnek isteği aşağıda bulabilirsiniz (Ö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 listesini burada bulabilirsiniz. Hem parametre adlarının (ör. "sürüm") hem de sabit dize değerlerinin ("ok", "uyarı" ve "not_modified") büyük/küçük harfe duyarlı olduğunu unutmayın. Tabloda, parametrenin gönderilmesinin gerekli olup olmadığı ve gönderilmesi durumunda bunu işlemeniz gerekip gerekmediği de açıklanmaktadır.

Parametre
İstekte Zorunlu mu?
İşlenecek Veri Kaynağı
Açıklama
tq
Hayır
Hayır

Google Görselleştirme API'si sorgu dilinde yazılmış ve döndürülen verilerin nasıl filtreleneceğini, sıralanacağını veya başka bir şekilde değiştirileceğini belirten 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 kümesi. Çiftler noktalı virgülle ayrılır. Görselleştirme protokolü tarafından tanımlanan standart parametrelerin listesini aşağıda görebilirsiniz:

  • reqId - [İstekte gereklidir; Veri kaynağı işlenmelidir] Bu istek için sayısal bir tanımlayıcı. Bu özellik, 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ıtta geri gönderin.
  • version - [İstekte isteğe bağlıdır; Veri kaynağı işlenmelidir] Google Görselleştirme protokolünün sürüm numarası. Şu anki sürüm 0.6'dır. Gönderilmezse en son sürümü kullanın.
  • sig - [İstekte bulunur; veri kaynağının işlenmesi için isteğe bağlı] Bu veri kaynağına daha önce yapılan tüm isteklerde bu istemciye gönderilen DataTable karma değeri. Bu, aynı verilerin bir istemciye iki kez gönderilmesini önlemeye yönelik bir optimizasyondur. Bunu nasıl kullanacağınızla ilgili bilgi için aşağıdaki İsteğinizi Optimize Etme bölümüne bakın.
  • out - [İstekte isteğe bağlıdır; Veri kaynağı işlenmelidir] 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ırsa döndürülmesi gereken tek veri, verileri içeren 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 yöntem kullanılırsa yalnızca CSV veri dizesi döndürülür. Yanıt başlıklarında outFileName parametresi belirterek dosya için özel bir ad isteyebilirsiniz.
    • tsv-excel - csv işlevine benzer ancak virgül yerine sekme kullanılır ve tüm veriler utf-16 olarak kodlanır.
    Google Görselleştirme API'sinde oluşturulan bir grafiğin yalnızca json isteyebileceğini unutmayın. Her türle ilgili ayrıntılar 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şlenmeli] Yanıtla birlikte çağrılacak istemci sayfasındaki JavaScript işleme işlevinin dize adı. İsteğe dahil edilmezse değer "google.Visualization.Query.setResponse" olur. Bu bilgi, yanıtın bir parçası olarak geri gönderilecektir. Nasıl yapılacağını öğrenmek için aşağıdaki Yanıt Biçimi bölümüne bakın.
  • outFileName - [İstekte bulunur; işlenecek veri kaynağı için isteğe bağlı] out:csv veya out:tsv-excel belirtirseniz burada belirtilen dosya adını isteğe bağlı olarak 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 yanıt türünü belirten out parametresine bağlıdır. Her istek türüne nasıl yanıt verileceğini öğrenmek için aşağıdaki bölümleri inceleyin:

  • JSON - Doldurmak için doğrudan bir DataTable oluşturucuya geçirilebilecek JavaScript nesnesindeki verileri içeren bir JSON yanıtı döndürür. Bu, açık arayla en yaygın istek türüdür ve düzgün şekilde uygulanması en önemlidir.
  • CSV - Tarayıcı tarafından işlenecek, virgülle ayrılmış düz bir değer listesi döndürür.
  • TSV - Tarayıcı tarafından işlenecek sekmeyle ayrılmış değer listesini döndürür.
  • HTML: Tarayıcı tarafından oluşturulacak bir HTML tablosu 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 bir "X-DataSource-Auth" üstbilgisi içeriyorsa varsayılan yanıt biçimi JSON, aksi takdirde JSONP olur. 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 bu kitaplıklar sizin için doğru kodu oluşturur. Yanıtları elle ayrıştırıyorsanız aşağıdaki JSON Değişiklikleri bölümüne göz atın.

Aynı alan adına yönelik istekleri zorunlu kılıyorsanı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 oluşturmak için Java veya Python yardımcı kitaplıklarını kullanabilirsiniz.

Bu yanıt biçimi, aşağıdaki tabloda yer alan özellikleri içeren (veriler table özelliğine atanır) UTF-8 kodlu bir JSON nesnesidir (her bir özellik virgülle ayrılmış şekilde ayraç { } ile sarmalanmış bir nesne). Bu JSON nesnesi, istekteki responseHandler parametre değerinin içine sarmalanmalıdır. Dolayısıyla, isteğin responseHandler değeri "myHandler" ise şuna benzer bir dize döndürmeniz gerekir (kısaca yalnızca bir özellik gösterilir):

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

İstek bir responseHandler değeri içermiyorsa varsayılan değer "google.Visualization.Query.setResponse" olur. Bu nedenle, şuna benzer bir dize döndürmeniz gerekir (kısaca yalnızca bir özellik gösterilir):

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

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

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

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

Örnek: version=0.6

reqId
Evet*
Bu istemci için isteğin kimliğini belirten dize numarası. İstekte bu belirtilmişse aynı değeri döndürün. Daha fazla bilgi için istek bölümündeki reqId açıklamasını inceleyin.

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

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

  • ok - İstek başarılı. table özelliğine tablo eklenmesi zorunludur.
  • warning - Başarılı ancak sorunları var. table özelliğine tablo eklenmesi zorunludur.
  • error - Bir sorun oluştu. Bunu iade ederseniz table değerini döndürmemeniz gerekir ve errors değerini döndürmeniz gerekir.

Örnek: status:'warning'

uyarılar
Yalnızca status=warning

Her biri önemli olmayan bir sorunu açıklayan bir veya daha fazla nesneden oluşan dizi. 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 dize açıklaması. Protokol, aşağıdaki değerleri tanımlar ancak gerekirse kendi değerlerinizi tanımlayabilirsiniz (ancak istemci, özel değerleri herhangi bir özel yöntemle işlemez). Yalnızca bir reason değeriniz olabilir:
    • data_truncated - Döndürülen DataTable öğesinde 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 bir nedenden dolayı tam sonuçları döndürmek istememesidir.
    • other - Belirtilmemiş genel bir uyarı.
  • message - [İsteğe bağlı] Sorunu açıklayan ve muhtemelen bir uyarı kutusunun başlığı olarak kullanılan, tırnak içine alınmış kısa bir dize. Bu, kullanıcıya gösterilebilir. HTML desteklenmez.
  • detailed_message - [İsteğe bağlı] Sorunu ve olası çözümleri açıklayan, tırnak işaretleri içinde ayrıntılı bir dize mesajı. Desteklenen tek HTML, tek href özelliğine sahip <a> öğesidir. Unicode kodlaması desteklenmektedir. Bu, kullanıcıya gösterilebilir.

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

hatalar
status=error ise zorunludur

Her biri bir hatayı açıklayan bir veya daha fazla nesneden oluşan dizi. status=error ise zorunludur, aksi takdirde izin verilmez. warnings değerine benzer. Bir hata olsa da not_modified hatasının 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ımlanmıştır:
    • not_modified - Veriler, son istekten bu yana değişmedi. Hatanın nedeni buysa table değeriniz olmamalıdır.
    • user_not_authenticated - Veri kaynağı için kimlik doğrulama gerekiyorsa ve işlem 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, belirtilmemiş hata.
  • message - [İsteğe bağlı] warnings.message ile aynıdır. Not: Kötü amaçlı bir kullanıcının ayrıntılı bir veri dizesini yetkisiz verilere erişmek, hatta verilerinize veya sitenize saldırmak için kullanması mümkündür. 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ürmeyin. Bunun yerine, "Hatalı sorgu dizesi" gibi genel bir mesaj verin.
  • detailed_message - [İsteğe bağlı] warnings.detailed_message ile aynıdır. Çok ayrıntılı message bilgileri 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 kullanışlıdır. İstediğiniz karma oluşturma algoritmasını seçebilirsiniz. Bu özelliği destekliyorsanız hiçbir veri döndürülmezse istemci tarafından iletilen değeri döndürmeniz veya yeni veriler döndürülürse yeni bir karma döndürmeniz gerekir.

Örnek: sig:'5982206968295329967'

masa
Hayır

Verilerinizi içeren JavaScript düz gösteriminde DataTable nesnesi. Bu nesnenin biçimiyle ilgili ayrıntılar için bağlantılı referans bölümüne bakın. Basit bir veri tablosu örneği:

{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 durumunda bulunmalıdır. Veri döndürmüyorsanız bu özelliği eklemeyin (yani boş bir dize değeriyle geri vermeyin).

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

 

Katı JSON gerekli

Google'ın yardımcı kitaplıkları ve Google'a gönderilen tüm sorgular katı JSON/JSONP döndürür. Döndürülen kodu kendiniz ayrıştırmıyorsanız bu durum sizin için önemli olmayacaktır. Bu durumda, JSON dizesini JavaScript nesnesine dönüştürmek için JSON.parse() kullanabilirsiniz. JSON'un API tarafından işlenme şekliyle ilgili tek fark, JSON'un JavaScript Tarih değerlerini desteklememesidir (örneğin, "new Date(2008,1,28,0,31,26)"; API, tarihlerin geçerli bir JSON gösterimini şu biçimde bir dize olarak destekler: Date(year, month, day[,hour, minute, second[, millisecond]]) Günden sonraki her şeyin isteğe bağlı olduğu ve ayların sıfır tabanlı olduğu biçim.

 

JSON Yanıtlarını Optimize Etme

Bir istemci iki istek gönderirse ve istekler arasında veriler değişmemişse verileri yeniden göndermemek mantıklıdır. Aksi takdirde bant genişliği boşa harcanır. Protokol, istekleri daha verimli hale getirmek için verilerin istemcide önbelleğe alınmasını ve son istekten bu yana veriler değişmediyse yanıtta bir sinyal gönderilmesini destekler. Hesaplama aşağıdaki şekilde yapılır:

  1. İstemci, veri kaynağına bir istek gönderir.
  2. Veri kaynağı, DataTable nesnesinin karmasını ve DataTable nesnesinin karmasını oluşturur ve yanıtında her ikisini de döndürür (karma, tqx.sig parametresinde döndürülür). Google Görselleştirme API'si istemcisi DataTable ve sig değerlerini önbelleğe alır.
  3. İstemci, önbelleğe alınan tqx.sig değerini de içeren başka bir veri isteği gönderir.
  4. Veri kaynağı, aşağıdaki iki yöntemden biriyle yanıt verebilir:
    • Önceki istekteki veriler değiştiyse veri kaynağı yeni DataTable ve yeni sig değer karmasını geri gönderir.
    • Veriler önceki isteğe göre değişmediyse veri kaynağı status=error, reason=not_modified ve sig=old_sig_value verilerini geri gönderir.
  5. Her iki durumda da grafiği barındıran sayfa başarılı bir yanıt alır ve QueryResponse.getDataTable() çağrısı yaparak DataTable öğesini alabilir. Veriler aynıysa yalnızca tablonun önbelleğe alınmış sürümü olur.

Bunun yalnızca Google Görselleştirme API'si üzerine oluşturulmuş grafiklerden gelen JSON istekleri için çalıştığını unutmayın.

CSV Yanıt Biçimi

İstekte out:csv belirtilirse yanıt, meta veri içermez, yalnızca verilerin CSV temsilini içerir. CSV tablosu genellikle virgülle ayrılmış bir listedir. Her veri satırı, UNIX yeni satır karakteriyle (\n) biten her bir veri satırının virgülle ayrılmış bir değer listesidir. Hücre değerleri, her sütun için aynı türde olmalıdır. İlk satır, sütun etiketleridir. Üç satırlı ve üç sütunlu bir tablo örneğini aşağıda bulabilirsiniz:

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

CSV biçimi bu protokol tarafından belirtilmemiştir. CSV biçiminin tanımlanmasından veri kaynağı sorumludur. Bununla birlikte yaygın biçim, virgülle (arada boşluk olmadan) ayrılmış bir değer grubu ve her satırın sonunda yeni satır (\n) şeklindedir. Tarayıcı bir 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ürme yöntemi sunar.

İstek, tqx parametresinin bir outFileName üyesini içeriyorsa belirtilen dosya adını yanıt başlıklarına dahil etmeyi denemeniz gerekir.

google.visualization.Query nesnesi, CSV yanıtı isteğini desteklemiyor. Bir müşteri CSV isteğinde bulunmak isterse sayfanıza bir Görselleştirme Araç Çubuğu widget'ı yerleştirebilir veya isteği oluşturmak için özel bir kod kullanabilir ya da aşağıdaki istek URL'sinde gösterildiği gibi, tqx öğesinin out:csv özelliğini açıkça 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

İstekte out:tsv-excel belirtilirse yanıtta meta veri bulunmaz. Bunun yerine, verilerin utf-16 olarak kodlanmış sekmeyle ayrılmış temsili bulunur. İstek, tqx parametresinin bir outFileName üyesini içeriyorsa belirtilen dosya adını yanıt başlıklarına dahil etmeyi denemeniz gerekir.

HTML Yanıtı Biçimi

İstekte out:html değeri belirtilirse yanıt, verilerle bir HTML tablosunu tanımlayan bir HTML sayfası olmalıdır. Tarayıcı, sonucunuzu doğrudan okunabilir bir biçimde oluşturabileceğinden bu yöntem, kodunuzda hata ayıklama konusunda faydalıdır. google.visualization.Query nesnesini kullanarak HTML yanıtı için sorgu gönderemezsiniz. Özel kod kullanarak veya tarayıcınızda şuna benzer bir URL yazarak 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 istekleri ve yanıtları aşağıda bulabilirsiniz. İsteklerin URL çıkışlı olmadığını unutmayın. Bu işlem genellikle tarayıcı veya google.visualization.Query nesnesi tarafından yapılır.

Basit istek: Üç sütun ve dört satırlık tablo içeren 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ürlerine sahip üç sütunlu ve üç 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 sorgu dizesine sahip sorgu: Tek sütun isteği, dört satırlı 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'}]}]}});

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

Veriler kısaltıldı uyarısı: data_truncated uyarısı örneği. İsteğin veri döndürmeye devam ettiğine 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ından ziyade 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 Datasource Library (Google'dan): İsteği ve yanıtı işler, ona verdiğiniz verilerden yanıt tablosunu oluşturur ve Google Chart Tools SQL sorgu dilini uygular.
  • Python Veri Kaynağı Kitaplığı (Google'dan) - Yanıt söz dizimini oluşturan bir yanıt tablosu oluşturur. İsteğin ayrıştırılması veya Google Grafik Araçları SQL sorgu dilinin uygulanması işlemlerini gerçekleştirmez.
  • MC-Google_Visualization (Üçüncü taraf): PDO kullanarak MySQL, SQLite ve PostgreSQL veritabanı motorları için Grafik Araçları veri kaynağı uygulamak üzere kullanabileceğiniz bir PHP sunucu tarafı kitaplığıdır.
  • bortosky-google-Visualization (Üçüncü taraf): .NET kullanıcıları için Google Görselleştirme API'sı Veri Tablosu oluşturmaya yönelik bir yardımcı kitaplıktır.
  • GV Streamer (Üçüncü taraf): GV Streamer, farklı kaynaklardan gelen verileri Google grafiklerine geçerli sorgu yanıtlarına dönüştürebilen sunucu tarafı bir araçtır. GV Streamer çeşitli dilleri (ör. PHP, Java, .NET) ve çeşitli ham veri kaynaklarını (ör. MySql) destekler.
  • TracGViz (Üçüncü taraf) - TracGViz, Trac'in grafik widget'larını kullanabilmesini sağlayan bileşenler sağlayan ücretsiz ve açık kaynak bir araçtır. Ayrıca, Trac tarafından yönetilen verileri Google Grafik Araçları veri kaynağı kaynağı olarak uygular.
  • vis-table (Üçüncü taraf) - PHP'de Google Chart Tools Veri Kaynağı kullanan kitaplık. Üç ana bölümden oluşur. Veri tablosu uygulamasının kendisi, sorgu dili ayrıştırıcı ve biçimlendiriciler.
  • Google Datasource Implementation in Oracle PL/SQL (Üçüncü taraf): Oracle'ın doğrudan veritabanından Veri Kaynakları'nı yayınlamasına olanak tanıyan Oracle PL/SQL paketi. Böylece herhangi bir Oracle sorgusunu Google Grafik Araçları Veri Kaynağı olarak kullanabilirsiniz (paket, verileri içeren bir JSON dosyası döndürür). Google Sorgu Dili için neredeyse tam destek sunar.