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 Drive 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ı artırmanın bir başka yolu da verilerin yalnızca ilgilendiğiniz bölümünü gönderip almaktır. 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.
İki tür kısmi istek vardır:
- Kısmi yanıt: Yanıta hangi alanların dahil edileceğini belirttiğiniz bir istek (
fields
istek parametresini kullanın). - Yama: Yalnızca değiştirmek istediğiniz alanları gönderdiğiniz bir güncelleme isteği (
PATCH
HTTP fiilini kullanın).
Kısmi isteklerde bulunmayla ilgili daha ayrıntılı bilgiyi aşağıdaki bölümlerde bulabilirsiniz.
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.
fields
parametresinin yalnızca yanıt verilerini etkilediğini, varsa göndermeniz gereken verileri etkilemediğini unutmayın. Kaynakları değiştirirken gönderdiğiniz veri miktarını azaltmak için yama isteği kullanın.
Ö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.
Yama (kısmi güncelleme)
Ayrıca, kaynakları değiştirirken gereksiz veri göndermekten de kaçınabilirsiniz. Yalnızca değiştirdiğiniz belirli alanlar için güncellenmiş verileri göndermek isterseniz HTTP PATCH
fiilini kullanın. Bu belgede açıklanan yama semantiği, eski GData kısmi güncelleme uygulamasına göre farklı (ve daha basittir).
Aşağıdaki kısa örnek, yama kullanmanın küçük bir güncelleme yapmak için göndermeniz gereken verileri nasıl en aza indirdiğini göstermektedir.
Örnek
Bu örnekte, yalnızca genel (kurgusal) bir "Demo" API kaynağının başlığını güncellemek için basit bir yama isteği gösterilmektedir. Kaynakta ayrıca bir yorum, bir dizi özellik, durum ve daha birçok alan bulunur. Ancak bu istek, değiştirilen tek alan olduğu için yalnızca title
alanını gönderir:
PATCH https://www.googleapis.com/demo/v1/324 Authorization: Bearer your_auth_token Content-Type: application/json { "title": "New title" }
Yanıt:
200 OK
{ "title": "New title", "comment": "First comment.", "characteristics": { "length": "short", "accuracy": "high", "followers": ["Jo", "Will"], }, "status": "active", ... }
Sunucu, güncellenen kaynağın tam temsiliyle birlikte bir 200 OK
durum kodu döndürür. Yama isteğine yalnızca title
alanı dahil edildiği için öncekinden farklı olan tek değer budur.
Not: Yama ile birlikte kısmi yanıt fields
parametresini kullanırsanız güncelleme isteklerinizin verimliliğini daha da artırabilirsiniz. Yama isteği yalnızca isteğin boyutunu küçültür. Kısmi yanıt, yanıtın boyutunu küçültür. Dolayısıyla, her iki yönde gönderilen veri miktarını azaltmak için fields
parametresiyle bir yama isteği kullanın.
Yama isteğinin anlamı
Yama isteğinin gövdesinde yalnızca değiştirmek istediğiniz kaynak alanları yer alır. Bir alan belirttiğinizde, çevreleyen üst nesneleri kısmi yanıtla döndürüldüğü gibi çevreleyen tüm üst nesneleri de eklemeniz gerekir. Gönderdiğiniz değiştirilen veriler, varsa üst nesnenin verileriyle birleştirilir.
- Ekle: Mevcut olmayan bir alanı eklemek için yeni alanı ve değerini belirtin.
- Değiştir: Mevcut bir alanın değerini değiştirmek için alanı belirtin ve yeni değere ayarlayın.
- Sil: Bir alanı silmek için alanı belirtin ve
null
olarak ayarlayın. Örneğin,"comment": null
. Ayrıca, bir nesneyinull
olarak ayarlayarak tamamen silebilirsiniz (değişebilirse). Java API İstemci Kitaplığı kullanıyorsanız bunun yerineData.NULL_STRING
kullanın. Ayrıntılar için JSON null bölümüne bakın.
Diziler hakkında not: Dizi içeren yama istekleri, mevcut diziyi sizin sağladığınız diziyle değiştirir. Bir dizideki öğeleri parçalı bir şekilde değiştiremez, ekleyemez veya silemezsiniz.
Yamayı okuma-değiştirme-yazma döngüsünde kullanma
Değiştirmek istediğiniz verileri içeren kısmi bir yanıt alarak başlamak faydalı olabilir. Bu, kaynağı başarılı bir şekilde güncellemek için If-Match
HTTP başlığında geçerli ETag değerini sağlamanız gerektiğinden, ETag kullanan kaynaklar için özellikle önemlidir. Verileri aldıktan sonra, değiştirmek istediğiniz değerleri değiştirebilir ve değiştirilmiş kısmi gösterimi bir yama isteğiyle geri gönderebilirsiniz. Aşağıda, Demo kaynağının ETag kullandığını varsayan bir örnek verilmiştir:
GET https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics Authorization: Bearer your_auth_token
Bu, kısmi yanıttır:
200 OK
{ "etag": "ETagString" "title": "New title" "comment": "First comment.", "characteristics": { "length": "short", "level": "5", "followers": ["Jo", "Will"], } }
Aşağıdaki yama isteği bu yanıta dayalıdır. Aşağıda gösterildiği gibi, yama yanıtında döndürülen verileri sınırlandırmak için fields
parametresini de kullanır:
PATCH https://www.googleapis.com/demo/v1/324?fields=etag,title,comment,characteristics Authorization: Bearer your_auth_token Content-Type: application/json If-Match: "ETagString"
{ "etag": "ETagString" "title": "", /* Clear the value of the title by setting it to the empty string. */ "comment": null, /* Delete the comment by replacing its value with null. */ "characteristics": { "length": "short", "level": "10", /* Modify the level value. */ "followers": ["Jo", "Liz"], /* Replace the followers array to delete Will and add Liz. */ "accuracy": "high" /* Add a new characteristic. */ }, }
Sunucu, 200 OK HTTP durum kodu ve güncellenen kaynağın kısmi temsili ile yanıt verir:
200 OK
{ "etag": "newETagString" "title": "", /* Title is cleared; deleted comment field is missing. */ "characteristics": { "length": "short", "level": "10", /* Value is updated.*/ "followers": ["Jo" "Liz"], /* New follower Liz is present; deleted Will is missing. */ "accuracy": "high" /* New characteristic is present. */ } }
Doğrudan yama isteği oluşturma
Bazı yama istekleri için, daha önce aldığınız verileri temel almanız gerekir. Örneğin, diziye bir öğe eklemek ve mevcut dizi öğelerinin hiçbirini kaybetmek istemiyorsanız önce mevcut verileri almanız gerekir. Benzer şekilde, bir API ETags kullanıyorsa kaynağı başarıyla güncellemek için isteğinizle birlikte önceki ETag değerini göndermeniz gerekir.
Not: ETag'ler kullanımdayken bir yamayı uygulamaya zorlamak için "If-Match: *"
HTTP üst bilgisi kullanabilirsiniz. Bunu yaparsanız yazmadan önce okuma işlemini yapmanız gerekmez.
Ancak diğer durumlarda yama isteğini, önce mevcut verileri almadan doğrudan oluşturabilirsiniz. Örneğin, bir alanı yeni bir değerle güncelleyen veya yeni bir alan ekleyen bir yama isteğini kolayca ayarlayabilirsiniz. Örnek:
PATCH https://www.googleapis.com/demo/v1/324?fields=comment,characteristics Authorization: Bearer your_auth_token Content-Type: application/json { "comment": "A new comment", "characteristics": { "volume": "loud", "accuracy": null } }
Bu istekle birlikte, yorum alanında mevcut bir değer varsa yeni değer bunun üzerine yazılır; aksi takdirde yeni değere ayarlanır. Benzer şekilde, bir hacim özelliği varsa değerinin üzerine yazılır; değilse bu özellik oluşturulur. Ayarlanırsa doğruluk alanı kaldırılır.
Yamaya verilen yanıtı işleme
API, geçerli bir yama isteğini işledikten sonra değiştirilen kaynağın tam temsiliyle birlikte bir 200 OK
HTTP yanıt kodu döndürür. API tarafından ETag'ler kullanılıyorsa sunucu, yama isteğini başarıyla işlediğinde (PUT
'de olduğu gibi) ETag değerlerini günceller.
Yama isteği, döndürdüğü veri miktarını azaltmak için fields
parametresini kullanmadığınız sürece tüm kaynak gösterimini döndürür.
Bir yama isteği söz dizimsel veya semantik olarak geçersiz yeni bir kaynak durumuyla sonuçlanırsa sunucu bir 400 Bad Request
veya 422 Unprocessable Entity
HTTP durum kodu döndürür ve kaynak durumu değişmeden kalır. Örneğin, zorunlu bir alanın değerini silmeye çalışırsanız sunucu bir hata döndürür.
YAMA HTTP fiili desteklenmediğinde alternatif gösterim
Güvenlik duvarınız HTTP PATCH
isteklerine izin vermiyorsa aşağıda gösterildiği gibi bir HTTP POST
isteği yapın ve geçersiz kılma başlığını PATCH
olarak ayarlayın:
POST https://www.googleapis.com/... X-HTTP-Method-Override: PATCH ...
Yama ve güncelleme arasındaki fark
Pratikte, HTTP PUT
fiilini kullanan bir güncelleme isteği için veri gönderirken, yalnızca zorunlu veya isteğe bağlı olan alanları göndermeniz gerekir. Sunucu tarafından ayarlanan alanlar için değer gönderirseniz bu alanlar yoksayılır. Bu yöntem kısmi güncelleme yapmanın başka bir yoluymuş gibi görünse de, bu yaklaşımda bazı sınırlamalar vardır. HTTP PUT
fiilini kullanan güncellemelerde, gerekli parametreleri sağlamazsanız istek başarısız olur ve isteğe bağlı parametreleri sağlamazsanız önceden ayarlanmış verileri temizler.
Bu nedenle, yama kullanmak çok daha güvenlidir. Yalnızca değiştirmek istediğiniz alanlar için veri sağlarsınız; atladığınız alanlar temizlenmez. Bu kuralın tek istisnası, tekrarlanan öğeler veya dizilerle ilgilidir: Bunların tümünü atlarsanız oldukları gibi kalırlar; bunlardan herhangi birini sağlarsanız, tüm grup, sağladığınız kümeyle değiştirilir.
Toplu istekler
Bu belgede, istemcinizin kurması gereken HTTP bağlantılarının sayısını azaltmak için API çağrılarını nasıl toplu hale getireceğiniz gösterilmektedir.
Bu belge özellikle bir HTTP isteği göndererek toplu istek oluşturmakla ilgilidir. Bunun yerine, toplu istek yapmak için bir Google istemci kitaplığı kullanıyorsanız istemci kitaplığının dokümanlarına bakın.
Genel bakış
İstemcinizin oluşturduğu her HTTP bağlantısı belirli bir miktarda ek yüke neden olur. Google Drive API'sı, istemcinizin tek bir HTTP isteğine birkaç API çağrısı koymasına olanak tanımak için toplu işlemi destekler.
Gruplandırmayı kullanmak isteyebileceğiniz durumlara örnekler:
- Çok sayıda dosya için meta verileri alma.
- Meta verileri veya özellikleri toplu olarak güncelleme.
- Çok sayıda dosyanın izinlerini değiştirme (ör. yeni bir kullanıcı veya grup ekleme).
- Yerel istemci verilerini ilk kez veya uzun süre çevrimdışı olduktan sonra senkronize etme.
Her durumda, her bir çağrıyı ayrı ayrı göndermek yerine bunları tek bir HTTP isteğinde gruplayabilirsiniz. Dahili istekler aynı Google API'ye yönlendirilmelidir.
Tek bir toplu istekte en fazla 100 çağrı yapabilirsiniz. Bundan daha fazla çağrı yapmanız gerekiyorsa birden çok toplu istek kullanın.
Not: Google Drive API için toplu işlem sistemi, OData toplu işleme sistemiyle aynı söz dizimini kullanır ancak anlamlar farklıdır.
Not: 100'den fazla çağrı içeren toplu istekler hatayla sonuçlanabilir.
Not: Her dahili istek için URL uzunluğu 8.000 karakterle sınırlıdır.
Not: Google Drive şu anda medya için yükleme veya indirme toplu işlemleri desteklememektedir.
Grup ayrıntıları
Toplu istek, API keşif belgesinde belirtilen batchPath
öğesine gönderilebilen bir HTTP isteğinde birleştirilen birden fazla API çağrısından oluşur. Varsayılan yol /batch/api_name/api_version
şeklindedir. Bu bölümde toplu söz dizimi ayrıntılı olarak açıklanmaktadır; daha sonra bir örnek vardır.
Not: Toplu olarak toplanan bir n istek kümesi, kullanım sınırınıza tek bir istek olarak değil, n istekleri olarak dahil edilir. Toplu istek, işlenmeden önce bir istek grubuna ayrılır.
Toplu isteğin biçimi
Toplu istek, multipart/mixed
içerik türünü kullanan, birden çok Google Drive API çağrısı içeren tek bir standart HTTP isteğidir. Bu ana HTTP isteğinde, parçaların her biri iç içe yerleştirilmiş bir HTTP isteği içerir.
Her bölüm kendi Content-Type: application/http
HTTP başlığıyla başlar. Ayrıca, isteğe bağlı bir Content-ID
başlığı da içerebilir. Bununla birlikte, parça başlıkları yalnızca bölümün başlangıcını işaretlemek için yer alır; iç içe yerleştirilmiş istekten ayrıdır. Sunucu, toplu isteğin sarmalamasını ayrı istekler şeklinde açtıktan sonra parça başlıkları yok sayılır.
Her bölümün gövdesi, kendi yüklemi, URL'si, başlıkları ve gövdesi ile birlikte eksiksiz bir HTTP isteğidir. HTTP isteği, yalnızca URL'nin yol kısmını içermelidir. Toplu isteklerde tam URL'lere izin verilmez.
Content-Type
gibi Content-
üstbilgileri hariç olmak üzere dış toplu isteğin HTTP üstbilgileri, toplu işteki her isteğe uygulanır. Hem dış istekte hem de tek bir çağrıda belirli bir HTTP başlığı belirtirseniz bağımsız çağrı başlığının değeri, dış toplu istek başlığının değerini geçersiz kılar. Tek bir aramanın üstbilgileri yalnızca söz konusu arama için geçerlidir.
Örneğin, belirli bir çağrı için bir Yetkilendirme başlığı sağlarsanız bu üstbilgi yalnızca söz konusu çağrı için geçerli olur. Dış istek için bir Yetkilendirme üst bilgisi sağlarsanız bu başlık, kendi Yetkilendirme başlıklarıyla geçersiz kılınmadığı sürece tüm çağrılar için geçerli olur.
Sunucu toplu isteği aldığında, dış isteğin sorgu parametrelerini ve başlıklarını (uygun olduğu şekilde) her bir parçaya uygular ve ardından her bölümü ayrı bir HTTP isteğiymiş gibi ele alır.
Toplu isteğe yanıt verme
Sunucunun yanıtı, multipart/mixed
içerik türüne sahip tek bir standart HTTP yanıtıdır. Her bir parça, isteklerle aynı sırayla toplu istekteki isteklerden birine verilen yanıttır.
İstekteki bölümler gibi, her yanıt bölümü de durum kodu, başlıklar ve gövdeyi içeren eksiksiz bir HTTP yanıtı içerir. İstekteki bölümlerde olduğu gibi her yanıt bölümünün önünde, bölümün başlangıcını belirten bir Content-Type
başlığı bulunur.
İsteğin belirli bir bölümünde Content-ID
başlığı varsa yanıtın ilgili bölümü, aşağıdaki örnekte gösterildiği gibi önünde response-
dizesinden önce gelen orijinal değer ile eşleşen bir Content-ID
başlığına sahiptir.
Not: Sunucu, çağrılarınızı herhangi bir sırada gerçekleştirebilir. Bu kodların sizin belirttiğiniz sırayla yürütüldüğüne güvenin. Belirli bir sırada iki çağrının gerçekleşmesini istiyorsanız bunları tek bir istekte gönderemezsiniz. Bunun yerine, ilki tek başına gönderin, ardından ikinciyi göndermeden önce ilkinin yanıtını bekleyin.
Örnek
Aşağıdaki örnekte, Google Drive API ile toplu işlemenin kullanımı gösterilmektedir.
Örnek toplu istek
POST https://www.googleapis.com/batch/drive/v3 Accept-Encoding: gzip User-Agent: Google-HTTP-Java-Client/1.20.0 (gzip) Content-Type: multipart/mixed; boundary=END_OF_PART Content-Length: 963--END_OF_PART Content-Length: 337 Content-Type: application/http content-id: 1 content-transfer-encoding: binary
POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id Authorization: Bearer authorization_token Content-Length: 70 Content-Type: application/json; charset=UTF-8
{ "emailAddress":"example@appsrocks.com", "role":"writer", "type":"user" } --END_OF_PART Content-Length: 353 Content-Type: application/http content-id: 2 content-transfer-encoding: binary
POST https://www.googleapis.com/drive/v3/files/fileId/permissions?fields=id&sendNotificationEmail=false Authorization: Bearer authorization_token Content-Length: 58 Content-Type: application/json; charset=UTF-8
{ "domain":"appsrocks.com", "role":"reader", "type":"domain" } --END_OF_PART--
Örnek toplu yanıt
Bu, önceki bölümde yer alan örnek isteğin yanıtıdır.
HTTP/1.1 200 OK Alt-Svc: quic=":443"; p="1"; ma=604800 Server: GSE Alternate-Protocol: 443:quic,p=1 X-Frame-Options: SAMEORIGIN Content-Encoding: gzip X-XSS-Protection: 1; mode=block Content-Type: multipart/mixed; boundary=batch_6VIxXCQbJoQ_AATxy_GgFUk Transfer-Encoding: chunked X-Content-Type-Options: nosniff Date: Fri, 13 Nov 2015 19:28:59 GMT Cache-Control: private, max-age=0 Vary: X-Origin Vary: Origin Expires: Fri, 13 Nov 2015 19:28:59 GMT--batch_6VIxXCQbJoQ_AATxy_GgFUk Content-Type: application/http Content-ID: response-1
HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Date: Fri, 13 Nov 2015 19:28:59 GMT Expires: Fri, 13 Nov 2015 19:28:59 GMT Cache-Control: private, max-age=0 Content-Length: 35
{ "id": "12218244892818058021i" }
--batch_6VIxXCQbJoQ_AATxy_GgFUk Content-Type: application/http Content-ID: response-2
HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Date: Fri, 13 Nov 2015 19:28:59 GMT Expires: Fri, 13 Nov 2015 19:28:59 GMT Cache-Control: private, max-age=0 Content-Length: 35
{ "id": "04109509152946699072k" }
--batch_6VIxXCQbJoQ_AATxy_GgFUk--
İstekteki belirli alanları döndür
Varsayılan olarak, sunucu kullanılan yönteme özgü varsayılan bir dizi kaynak alanını geri gönderir. Örneğin, files.list
yöntemi yalnızca id
, name
ve mimeType
döndürebilir. Bu alanlar, tam olarak ihtiyacınız olan alanlar olmayabilir. Diğer alanları döndürmeniz gerekiyorsa Bir dosya için belirli alanları döndürme konusuna bakın.