Performans İpuçları

Bu dokümanda, uygulamanızın performansını artırmak için kullanabileceğiniz bazı teknikler anlatılmaktadı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 Analytics API için de geçerlidir.

gzip ile sıkıştırma

Her bir istek için gereken bant genişliğini azaltmanın kolay ve rahat bir yolu gzip sıkıştırmasını etkinleştirmektir. Sıkıştırılmış sonuçların açılması için ek CPU zamanı gerekse de, ağ maliyetlerinin dengelenmesi genellikle çok değerlidir.

gzip kodlamalı 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 oluşturulmuş bir HTTP üst bilgisi ö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 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 isteğinde bulunmak 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ğ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ı ve 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: Bu 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 sadece tür bilgilerini içeren bir yanıt ve her bir öğede sadece HTML başlığı ve uzunluk karakteristik bilgilerini içeren ayrıştırılmış bir items 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ı çevreleyen üst nesneleri içeren bir JSON nesnesi olduğunu unutmayın.

Bir 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 dair 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 bağlıdır. Desteklenen söz dizimi aşağıda özetlenmiş ve ek örnekler aşağıdaki bölümde verilmiştir.

  • Birden çok alan seçmek için virgülle ayrılmış bir liste kullanın.
  • a alanının içine yerleştirilmiş bir b alanını seçmek için a/b tuşunu kullanın. b alanının içine yerleştirilmiş bir c alanını seçmek için a/b/c değerini kullanın.

    İstisna: Yanıtın data: { ... } gibi görünen bir data nesnesinin içine yerleştirildiği "data" sarmalayıcıları kullanan API yanıtları için fields spesifikasyonuna "data" ifadesini eklemeyin. Veri nesnesini data/a/b gibi bir alan spesifikasyonuyla eklemek hataya neden olur. Bunun yerine, a/b gibi bir fields spesifikasyonu kullanın.

  • "( )" parantezine ifadeler yerleştirerek dizi veya nesnelerin belirli bir alt alan kümesini istemek için bir 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-postasını döndürür. Ayrıca, tek bir alt alan da belirtebilirsiniz; burada fields=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 parametresinin kullanımıyla ilgili daha fazla örnek

Aşağıdaki örneklerde, fields parametre değerinin yanıtı nasıl etkilediğiyle ilgili açıklamalar bulunmaktadır.

Not: Tüm sorgu parametresi değerlerinde olduğu gibi fields parametre değeri URL kodlamalı olmalıdır. Daha iyi okunabilirlik için bu belgedeki örneklerde kodlama kullanılmamaktadır.

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. Bu nedenle, bir liste işlemi gerçekleştiriyorsanız yanıt bir koleksiyondur 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.

Aşağıda, koleksiyon düzeyinde bazı örnekler verilmiştir:
Örnekler Etki
items Öğeler dizisindeki her bir öğedeki tüm alanlar dahil olmak üzere tüm öğeleri döndürür ancak başka hiçbir alan 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 geçmiş bir alan döndürüldüğünde, yanıt, ilişkili ü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 context nesnesinin altında iç içe yerleştirilmiş olan facets dizisinin tüm üyeleri için yalnızca label alanını döndürür.
items/pagemap/*/title items dizisindeki her bir öğe için pagemap alt öğesi olan tüm nesnelerin yalnızca title 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 nesnesinin uri alt alanını döndürür.
links/*/href
links alt öğesi olan tüm nesnelerin href alanını döndürür.
Alt seçimler kullanarak belirli alanların yalnızca bazı bölümlerini isteyin.
Varsayılan olarak, isteğiniz belirli alanları belirtiyorsa sunucu, nesneleri 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 öğe için yalnızca title değerlerini ve yazarın uri değerini 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 gönderir. fields sorgu parametresinde hata varsa veya geçersizse sunucu, kullanıcıya alan seçimiyle ilgili sorunu bildiren bir hata mesajıyla (örneğin, "Invalid field selection a/b") birlikte bir HTTP 400 Bad Request durum kodu döndürür.

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 sayfalara ayırmaya yönelik sorgu parametrelerini (örneğin, maxResults ve nextPageToken) destekleyen API'lerde bu parametreleri kullanarak her sorgunun sonuçlarını yönetilebilir bir boyuta indirin. Aksi takdirde kısmi yanıt ile olası performans kazanımları fark edilmeyebilir.