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 Google Reklam Deneyimi Raporu API'si için geçerlidir.
gzip kullanarak sıkıştırma
Her istek için gereken bant genişliğini azaltmanın kolay ve kolay yolu gzip sıkıştırmayı etkinleştirmektir. Bu işlem, sonuçları ortaya çıkarmak için ek CPU süresi gerektirse de ağ maliyetlerinin dengelenmesi genellikle çok değerlidir.
Gzip kodlu bir yanıt almak için iki şey yapmanız gerekir: Bir Accept-Encoding
başlığı ayarlayın ve kullanıcı aracısını gzip
dizesini içerecek şekilde değiştirin. Aşağıda, gzip sıkıştırmasını etkinleştirmek için uygun şekilde biçimlendirilmiş 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, verilerin yalnızca ilgilendiğiniz bölümünü istemektir. Bu yaklaşım, uygulamanızın gereksiz alanları aktarmasını, ayrıştırmasını ve depolamasını önler. Böylece ağ, CPU ve bellek gibi kaynakları daha verimli bir şekilde kullanabilir.
Kısmi yanıt
Varsayılan olarak sunucu, istekleri işleme aldıktan sonra bir kaynağın tam temsilini geri gönderir. Daha iyi performans için sunucudan yalnızca gerçekten ihtiyacınız olan alanları göndermesini isteyebilir ve bunun yerine kısmi bir yanıt alabilirsiniz.
Kısmi yanıt istemek için fields
istek parametresini kullanarak döndürülmesini istediğiniz alanları belirtin. Bu parametreyi, yanıt verileri döndüren tüm isteklerle kullanabilirsiniz.
Örnek
Aşağıdaki örnekte, fields
parametresinin genel (kurgusal) &Demo" API'si ile kullanımı gösterilmektedir.
Basit istek: Bu HTTP GET
isteği, fields
parametresini çıkarır ve tam kaynağı döndürür.
https://www.googleapis.com/demo/v1
Tam kaynak yanıtı: Kısa veri, sadelik nedeniyle çıkarılan diğer alanları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 aşağıdaki istekte, döndürülen veri miktarını önemli ölçüde azaltmak üzere fields
parametresi kullanılmaktadı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ın yanı sıra her bir öğede yalnızca HTML başlığı ve uzunluk özelliği bilgilerini içeren ayrıştırılmış 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çili alanları ve çevresindeki üst nesneleri içeren bir JSON nesnesi olduğunu unutmayın.
fields
parametresinin biçimlendirilmesiyle ilgili ayrıntılara, ardından yanıtta tam olarak ne döndürüldüğüyle ilgili ayrıntılara değiniliyor.
Alanlar parametresi söz dizimi özeti
fields
istek parametresi değerinin biçimi, XPath söz dizimine dayanır. Desteklenen söz dizimi aşağıda özetlenmiştir ve aşağıdaki bölümde ek örnekler verilmiştir.
- Birden fazla alan seçmek için virgülle ayrılmış bir liste kullanın.
a
iç içe yerleştirilmiş birb
alanını seçmek içina/b
kullanın;b
içine yerleştirilmişc
alanını seçmek içina/b/c
kullanın.
İstisna: Yanıtın
data: { ... }
gibi görünen birdata
nesnesinin içine yerleştirilmiş olduğu ""sarmalayıcı" kullanan API yanıtları içinfields
spesifikasyonuna "data
" dahil etmeyin. Veri nesnesinindata/a/b
gibi bir alan spesifikasyonuyla eklenmesi hataya neden olur. Bunun yerine,a/b
gibi birfields
spesifikasyonu kullanın.- İfadeleri veya nesneleri parantez içine alarak bir dizi alt alan belirlemek için alt seçici kullanın.
( )
".Örneğin:
fields=items(id,author/email)
, öğe dizisindeki her bir öğe için yalnızca öğe kimliğini ve yazarın e-posta adresini döndürür. Ayrıcafields=items(id)
,fields=items/id
ile eşdeğer olan tek bir alt alan da belirtebilirsiniz. - Gerekirse alan seçimlerinde joker karakter kullanın.
Örneğin:
fields=items/pagemap/*
, sayfa haritasındaki tüm nesneleri seçer.
Alanlar parametresini kullanmaya ilişkin diğer örnekler
Aşağıdaki örnekler, fields
parametre değerinin yanıtı nasıl etkilediğini açıklayan açıklamalar içerir.
Not: Tüm sorgu parametresi değerlerinde olduğu gibi fields
parametre değeri de URL olarak kodlanmalıdır. Daha iyi okunabilirlik için bu dokümandaki örneklerde kodlama göz ardı edilir.
- Döndürülmesini istediğiniz alanları belirleyin veya alan seçimleri yapın.
fields
istek parametresi değeri alanların virgülle ayrılmış bir listesidir ve her alan, yanıtın köküne göre belirtilir. Dolayısıyla, bir liste işlemi yapıyorsanız yanıt bir koleksiyondur ve genellikle bir dizi kaynak içerir. Tek bir kaynağı döndüren bir işlem gerçekleştiriyorsanız alanlar bu kaynağa göre belirtilir. Seçtiğiniz alan bir diziyse (veya 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
Öğeler dizisindeki her bir öğe alanı dahil olmak üzere öğe 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 her döndürüldüğünde yanıt, çevreleyen üst nesneleri içerir. Üst alanlar, açıkça seçilmediği sürece diğer alt alanları içermez.context/facets/label
Kendisi context
nesnesinin altında yer alanfacets
dizisinin tüm üyeleri için yalnızcalabel
alanını döndürür.items/pagemap/*/title
Öğeler dizisindeki her bir öğe için, pagemap
öğesinin alt öğeleri olan tüm nesnelerin yalnızcatitle
alanını (varsa) döndürür.
Kaynak düzeyiyle ilgili bazı örnekleri aşağıda bulabilirsiniz:
Ö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 öğeleri olan tüm nesnelerinhref
alanını döndürür.- Alt seçimleri kullanarak belirli alanların yalnızca bölümlerini isteyin.
- Varsayılan olarak, isteğinizde belirli alanlar belirtiliyorsa sunucu, nesneleri veya dizi öğelerini bütünüyle döndürür. Yalnızca belirli alt alanları içeren bir yanıt belirtebilirsiniz. Bunun için aşağıdaki örnekte olduğu gibi "
( )
" alt seçim söz dizimini kullanırsınız.Örnek Etki items(title,author/uri)
items dizisindeki her bir öğe için yalnızca title
ve author\s39;suri
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, HTTP 400 Bad Request
durum kodunu ve kullanıcıya alan seçimiyle ilgili sorunun ne olduğunu (örneğin, "Invalid field selection a/b"
) belirten bir hata mesajı döndürür.
Yukarıdaki giriş bölümü bölümünde gösterilen kısmi yanıt örneği aşağıda verilmiştir. İstek, döndürülecek alanları belirtmek için fields
parametresini kullanı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: Verileri sayfalara ayırma için sorgu parametrelerini (ör. maxResults
ve nextPageToken
) destekleyen API'ler söz konusu olduğunda, her bir sorgunun sonuçlarını yönetilebilir bir boyuta indirmek için bu parametreleri kullanın. Aksi takdirde, kısmi yanıtın mümkün olduğu durumlarda performans artışı gerçekleşmeyebilir.