Bu dokümanda, uygulamanızın performansını artırmak için kullanabileceğiniz bazı teknikler açıklanmaktadır. Bazı durumlarda, sunulan fikirleri göstermek için diğer API'lerden veya genel API'lerden örnekler kullanılır. Ancak aynı kavramlar AdSense Management API için de geçerlidir.
Gzip kullanarak sıkıştırma
Her bir istek için gereken bant genişliğini azaltmanın kolay ve kullanışlı bir yolu da gzip sıkıştırmayı etkinleştirmektir. Sonuçları açmak için ek CPU zamanı gerektirse de ağ maliyetlerinin dengelenmesi genellikle buna çok değer.
gzip olarak kodlanmış bir yanıt almak için iki şey yapmanız gerekir: Bir Accept-Encoding
üstbilgisi ayarlayın ve kullanıcı aracınızı gzip
dizesini içerecek şekilde değiştirin. Burada, gzip sıkıştırmasını etkinleştirmek için düzgün şekilde biçimlendirilmiş bir HTTP üstbilgileri örneği verilmiştir:
Accept-Encoding: gzip User-Agent: my program (gzip)
Kısmi kaynaklarla çalışma
API çağrılarınızın performansını iyileştirmenin bir başka yolu da verilerin yalnızca ilgilendiğiniz bölümünü istemektir. Böylece uygulamanız, gerekli olmayan alanları aktarmaktan, ayrıştırmaktan ve depolamaktan kaçınabilir, böylece ağ, CPU ve bellek gibi kaynakları daha verimli bir şekilde kullanabilir.
Kısmi yanıt
Varsayılan olarak sunucu, istekleri işledikten sonra kaynağın tam temsilini geri gönderir. Daha iyi performans için sunucudan yalnızca gerçekten ihtiyacınız olan alanları göndermesini isteyip bunun yerine kısmi yanıt almasını isteyebilirsiniz.
Kısmi yanıt istemek için fields
istek parametresini kullanarak döndürülmesini istediğiniz alanları belirtin. Bu parametreyi, yanıt verilerini 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ği, fields
parametresini atlar ve tam kaynağı döndürür.
https://www.googleapis.com/demo/v1
Tam kaynak yanıtı: Tam kaynak verileri, aşağıdaki alanların yanı sıra kısa olması nedeniyle çıkarılan diğer birçok alanı 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 aşağıdaki istekte, döndürülen veri miktarını önemli ölçüde azaltmak için fields
parametresi kullanılı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ığı ve uzunluk karakteristik bilgilerini içeren ayrıştırılmış bir öğe dizisi geri 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ı çevreleyen üst nesnelerini içeren bir JSON nesnesi olduğunu unutmayın.
Sonraki bölümde, fields
parametresinin nasıl biçimlendirileceğiyle ilgili ayrıntılar, ardından yanıtta tam olarak nelerin döndürüldüğüne ilişkin ayrıntılar ele alınmıştır.
Alan parametresi söz dizimi özeti
fields
istek parametresi değerinin biçimi, genel olarak XPath söz dizimine dayalıdır. Desteklenen söz dizimi aşağıda özetlenmiş ve ek örnekler sonraki bölümde verilmiştir.
- Birden çok alan seçmek için virgülle ayrılmış liste kullanın.
a
alanı içine yerleştirilmiş birb
alanını seçmek içina/b
operatörünü,b
içine yerleştirilmiş birc
alanını seçmek içina/b/c
politikasını kullanın.
İstisna: Yanıtın
data: { ... }
gibi görünen birdata
nesnesinin içine yerleştirildiği "veri" sarmalayıcıları kullanan API yanıtları içinfields
spesifikasyonuna "data
" eklemeyin. Veri nesnesinindata/a/b
gibi bir alan spesifikasyonuyla eklenmesi hataya neden olur. Bunun yerine,a/b
gibi birfields
spesifikasyonu kullanın.- "
( )
" parantezine ifadeler yerleştirerek dizi veya nesnelerin belirli alt alanlarını istemek için alt seçici kullanın.Örneğin:
fields=items(id,author/email)
, items dizisindeki her öğe için yalnızca öğe kimliğini ve yazarın e-posta adresini döndürür. Ayrıca, tek bir alt alan da belirtebilirsiniz. Buradafields=items(id)
,fields=items/id
ile eşdeğerdir. - Gerekirse alan seçimlerinde joker karakterler kullanın.
Örneğin:
fields=items/pagemap/*
, sayfa haritasındaki tüm nesneleri seçer.
Alanlar parametresini kullanmaya ilişkin daha fazla örnek
Aşağıdaki örneklerde, fields
parametre değerinin yanıtı nasıl etkilediğiyle ilgili açıklamalar yer almaktadır.
Not: Tüm sorgu parametresi değerlerinde olduğu gibi fields
parametre değeri de URL kodlamalı olmalıdır. Daha kolay okunabilmesi için bu belgedeki örneklerde kodlamaya yer verilmemiştir.
- Döndürülmesini istediğiniz alanları belirleyin veya alan seçimleri yapın.
fields
istek parametresi değeri, virgülle ayrılmış bir alan listesidir ve her alan, yanıtın köküne göre belirtilir. Dolayısıyla, bir liste işlemi gerçekleştiriyorsanız yanıt bir koleksiyon olur ve genellikle bir dizi kaynak içerir. Tek bir kaynak döndüren bir işlem gerçekleştiriyorsanız alanlar söz konusu kaynağa göre belirtilir. Seçtiğiniz alan bir diziyse (veya bir dizinin parçasıysa) sunucu, dizideki tüm öğelerin seçilen kısmını döndürür.
Koleksiyon düzeyinde bazı örnekler:
Örnekler Etki items
Her bir öğedeki tüm alanlar dahil olmak üzere items dizisindeki tüm öğeleri döndürür, ancak diğer alanları döndürmez. etag,items
Hem etag
alanını hem de items dizisindeki tüm öğeleri döndürür.items/title
items 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, çevreleyen üst nesneleri içerir. Üst alanlar, açıkça seçilmediği sürece başka hiçbir alt alan içermez.context/facets/label
Kendisi context
nesnesinin altında bulunanfacets
dizisinin tüm üyeleri için yalnızcalabel
alanını döndürür.items/pagemap/*/title
items dizisindeki her bir öğe için pagemap
öğesinin alt öğesi olan tüm nesnelerin yalnızcatitle
alanını (varsa) döndürür.
Kaynak düzeyinde bazı örnekler:
Örnekler Etki title
İstenen kaynağın title
alanını döndürür.author/uri
İstenen kaynaktaki author
nesnesininuri
alt alanını döndürür.links/*/href
links
öğesinin alt öğesi 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ğiniz belirli alanları belirtiyorsa sunucu nesnelerin veya dizi öğelerinin tamamını döndürür. Yalnızca belirli alt alanları içeren bir yanıt belirtebilirsiniz. Bu işlemi, aşağıdaki örnekte olduğu gibi "
( )
" alt seçim söz dizimini kullanarak yaparsınız.Örnek Etki items(title,author/uri)
items dizisindeki her bir öğe için yalnızca title
ve yazarınuri
değerlerini döndürür.
Kısmi yanıtları işleme
Sunucu, fields
sorgu parametresini içeren geçerli bir isteği işledikten sonra, istenen verilerle birlikte bir HTTP 200 OK
durum kodu geri gönderir. fields
sorgu parametresinde bir hata varsa veya geçersizse sunucu, kullanıcıya alan seçimiyle ilgili sorunun ne olduğunu bildiren bir hata mesajıyla birlikte bir HTTP 400 Bad Request
durum kodu döndürür (örneğin, "Invalid field selection a/b"
).
Yukarıdaki giriş bölümünde gösterilen kısmi yanıt örneğini burada bulabilirsiniz. İstek, hangi alanların döndürüleceğini belirtmek için fields
parametresini kullanır.
https://www.googleapis.com/demo/v1?fields=kind,items(title,characteristics/length)
Kısmi yanıt aşağıdaki gibi görünür:
200 OK
{ "kind": "demo", "items": [{ "title": "First title", "characteristics": { "length": "short" } }, { "title": "Second title", "characteristics": { "length": "long" } }, ... ] }
Not: Verileri sayfalandırmaya yönelik sorgu parametrelerini (örneğin, 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 kazançları gerçekleşmeyebilir.