Bu belgede, uygulamanızın performansını artırmak için kullanabileceğiniz bazı teknikler ele alınmaktadır. Bazı durumlarda, sunulan fikirleri açıklamak için diğer API'lerden veya genel API'lerden örnekler kullanılır. Ancak aynı kavramlar Google E-Tablolar API'si için de geçerlidir.
gzip ile sıkıştırma
Her istek için gereken bant genişliğini azaltmanın kolay ve rahat bir yolu gzip sıkıştırma yöntemini etkinleştirmektir. Bu işlem, sıkıştırılmış sonuçları açmak için ek CPU süresi gerektirse de ağ maliyetleriyle ilgili avantajları sayesinde genellikle çok faydalıdır.
Gzip ile kodlanmış bir yanıt almak için iki işlem yapmanız gerekir: Accept-Encoding
üstbilgisini ayarlamak ve kullanıcı aracınızı gzip
dizesini içerecek şekilde değiştirmek. Gzip sıkıştırma yöntemini etkinleştirmek için uygun şekilde oluşturulmuş HTTP üstbilgilerine dair bir örneği aşağıda bulabilirsiniz:
Accept-Encoding: gzip User-Agent: my program (gzip)
Kısmi kaynaklarla çalışma
API çağrılarınızın performansını artırmanın bir diğer yolu da yalnızca ilgilendiğiniz veri kısmını istemektir. Bu sayede uygulamanız gereksiz alanları aktarmak, ayrıştırmak ve depolamak zorunda kalmaz; ağ, CPU, bellek gibi kaynakları daha verimli kullanabilir.
Kısmi yanıt
Varsayılan olarak, sunucu istekleri işledikten sonra bir kaynağın tam gösterimini geri gönderir. Daha iyi performans için sunucudan yalnızca gerçekten ihtiyacınız olan alanları göndermesini isteyebilir ve sadece kısmi yanıt alabilirsiniz.
Kısmi yanıt istemek için, döndürülmesini istediğiniz alanları belirtmek üzere fields
istek parametresini kullanın Bu parametreyi, yanıt verileri döndüren tüm isteklerle kullanabilirsiniz.
Örnek
Aşağıdaki örnekte fields
parametresinin, genel (kurgusal) bir "Demo" API ile kullanımı gösterilmektedir.
Basit istek: Bu HTTP GET
isteğinde fields
parametresi atlanır ve kaynağın tamamı döndürülür.
https://www.googleapis.com/demo/v1
Tam kaynak yanıtı: Tam kaynak verileri, kısa olması için çıkarılan diğer birçok alanın yanı sıra aşağıdaki alanları içerir.
{ "kind": "demo", ... "items": [ { "title": "First title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }, { "title": "Second title", "comment": "Second comment.", "characteristics": { "length": "long", "accuracy": "medium" "followers": [ ], }, "status": "pending", ... }, ... ] }
Kısmi yanıt isteği: Aynı kaynak için yapılan aşağıdaki istekte, döndürülen veri miktarını önemli ölçüde azaltmak için fields
parametresi kullanılmıştır.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
Kısmi yanıt: Yukarıdaki isteğe yanıt olarak sunucu, yalnızca tür bilgilerini içeren bir yanıt ve her öğede yalnızca HTML başlığı ile uzunluk özelliği bilgilerini içeren, sadeleştirilmiş bir öğe dizisi gönderir.
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
Yanıtın, yalnızca seçilen alanları ve bunları barındıran üst nesneleri içeren bir JSON nesnesi olduğunu unutmayın.
fields
parametresinin nasıl biçimlendirileceğiyle ilgili ayrıntılar bir sonraki bölümde, yanıtın tam olarak ne içerdiğine dair daha fazla bilgi ise ondan sonraki bölümde ele alınmaktadır.
Alanlar parametresi söz dizimi özeti
fields
istek parametresi değerinin biçimi temel olarak XPath söz dizimine benzer. Desteklenen söz dizimi aşağıda özetlenmiştir. Ek örnekler ise sonraki bölümde verilmiştir.
- Birden fazla alan seçmek için virgülle ayrılmış bir liste kullanın.
a
alanı içine yerleştirilmiş birb
alanı seçmek içina/b
öğesini,b
alanı içine yerleştirilmişc
alanını seçmek için isea/b/c
öğesini kullanın.
İstisna: Yanıtın
data: { ... }
gibi görünen birdata
nesnesinin içine yerleştirildiği, "data" sarmalayıcılarını kullanan API yanıtları içinfields
spesifikasyonuna "data
" öğesini eklemeyin. Veri nesnesinindata/a/b
gibi bir alan spesifikasyonuyla eklenmesi hataya neden olur. Bunun yerine,a/b
gibi birfields
spesifikasyonu kullanın.- Dizilerin veya nesnelerin belirli bir alt alan grubunu istemek için bir alt seçici kullanın. İfadeleri parantez içine yazın ("
( )
").Örneğin:
fields=items(id,author/email)
, öğe dizisindeki her öğe için yalnızca öğe kimliğini ve yazarın e-posta adresini döndürür. Ayrıca,fields=items(id)
ilefields=items/id
aynı anlama gelecek şekilde tek bir alt alan da belirtebilirsiniz. - Gerekirse alan seçimlerinde joker karakterler kullanın.
Örneğin:
fields=items/pagemap/*
, bir sayfa haritasındaki tüm nesneleri seçer.
Alanlar parametresinin kullanımıyla ilgili daha fazla örnek
Aşağıdaki örneklerde, fields
parametre değerinin yanıtı nasıl etkilediği açıklanmaktadır.
Not: Tüm sorgu parametresi değerlerinde olduğu gibi, fields
parametre değeri de URL olarak kodlanmalıdır. Daha kolay anlaşılması için bu belgedeki örneklerde kodlama kısmı atlanmıştır.
- Döndürülmesini istediğiniz alanları belirleyin veya alan seçimlerini yapın.
fields
istek parametresinin değeri, virgülle ayrılmış bir alan listesidir ve her alan, yanıtın köküne göre belirtilir. Bu nedenle, list işlemi gerçekleştiriyorsanız yanıt bir koleksiyondur ve genellikle bir kaynak dizisi içerir. Tek bir kaynak döndüren bir işlem gerçekleştiriyorsanız alanlar bu kaynağa göre belirtilir. Seçtiğiniz alan bir dizi ise (veya dizinin bir parçasıysa) sunucu, dizideki tüm öğelerin seçilen kısmını döndürür.
Aşağıda, koleksiyon düzeyinde bazı örnekler verilmiştir:
Örnekler Efekt items
Öğe dizisindeki tüm öğeleri (her öğedeki tüm alanlar dahil) döndürür ancak başka alan döndürmez. etag,items
Hem etag
alanını hem de öğe dizisindeki tüm öğeleri döndürür.items/title
Öğe dizisindeki tüm öğeler için yalnızca title
alanını döndürür.
İç içe yerleştirilmiş bir alan döndürüldüğünde yanıt, kapsayan üst nesneleri içerir. Üst alanlar, yalnızca açıkça seçilmiş olan alt alanları içerir, seçilmeyenleri içermez.context/facets/label
facets
dizisinin tüm üyeleri için yalnızcalabel
alanını döndürür. Bu alan,context
nesnesinin altında yer alır.items/pagemap/*/title
Öğe dizisindeki her öğe için, pagemap
öğesinin alt öğeleri olan tüm nesnelerin yalnızcatitle
alanı (varsa) döndürülür.
Aşağıda, kaynak düzeyinde bazı örnekler verilmiştir:
Örnekler Efekt title
İstenen kaynağın title
alanını döndürür.author/uri
İstenen kaynakta author
nesnesininuri
alt alanını döndürür.links/*/href
links
öğesinin alt öğeleri olan tüm nesnelerinhref
alanını döndürür.- Alt seçimleri kullanarak belirli alanların yalnızca bazı bölümlerini isteyin.
- Varsayılan olarak, isteğinizde belirli alanlar belirtiliyorsa sunucu, nesneleri veya dizi öğelerini tamamen döndürür. Yalnızca belirli alt alanları içeren bir yanıt belirtebilirsiniz. Bunu, aşağıdaki örnekte gösterildiği gibi "
( )
" alt seçim söz dizimini kullanarak yapabilirsiniz.Örnek Efekt items(title,author/uri)
Öğe dizisindeki her öğe için yalnızca title
ve yazarınuri
değerlerini döndürür.
Kısmi yanıtları işleme
Bir sunucu, fields
sorgu parametresini içeren geçerli bir isteği işledikten sonra istenen verilerle birlikte bir HTTP 200 OK
durum kodu gönderir. fields
sorgu parametresinde bir hata varsa veya parametre herhangi bir şekilde geçersizse sunucu, HTTP 400 Bad Request
durum koduyla birlikte, kullanıcıya alan seçimiyle ilgili neyin yanlış olduğunu açıklayan bir hata mesajı döndürür (ör. "Invalid field selection a/b"
).
Yukarıdaki giriş bölümünde gösterilen kısmi yanıt örneğini aşağıda bulabilirsiniz. Hangi alanların döndürüleceğini belirtmek için istekte fields
parametresi kullanılır.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
Kısmi yanıt şu şekilde görünür:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
Not: Verilerin sayfalara ayrılması için sorgu parametrelerini (ör. maxResults
ve nextPageToken
) destekleyen API'lerde, her sorgunun sonuçlarını yönetilebilir bir boyuta indirmek için bu parametreleri kullanın. Aksi takdirde, kısmi yanıtla elde edilebilecek performans artışları gerçekleşmeyebilir.