Performansı Artırma

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ş bir b alanını seçmek için a/b kullanın; b içine yerleştirilmiş c alanını seçmek için a/b/c kullanın.

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

  • İfadeleri veya nesneleri parantez içine alarak bir dizi alt alan belirlemek için alt seçici kullanın.( )&quot.

    Ö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ıca fields=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 alan facets dizisinin tüm üyeleri için yalnızca label 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ızca title 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 nesnesinin uri alt alanını döndürür.
links/*/href
links öğesinin alt öğeleri olan tüm nesnelerin href 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;s uri 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.