Bu dokümanda, uygulamanızın performansını iyileştirmek için kullanabileceğiniz bazı teknikler açıklanmaktadır. Bazı durumlarda, sunulan fikirleri örneklendirmek 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 istek için gereken bant genişliğini azaltmanın kolay ve kullanışlı bir yolu, gzip sıkıştırmasını etkinleştirmektir. Bu, sonuçların sıkıştırmasını açmak için ek CPU süresi gerektirse de ağ maliyetleriyle başa çıkmak genellikle çok zaman alır.
gzip kodlu bir yanıt almak için iki şey yapmanız gerekir: Accept-Encoding
üstbilgisi ayarlayın ve kullanıcı aracınızı gzip
dizesini içerecek şekilde değiştirin. gzip sıkıştırmasını etkinleştirmek için düzgün şekilde oluşturulmuş bir HTTP üstbilgileri örneğini burada bulabilirsiniz:
Accept-Encoding: gzip User-Agent: my program (gzip)
Kısmi kaynaklarla çalışma
API çağrılarınızın performansını iyileştirmenin diğer bir yolu, verilerin yalnızca ilgilendiğiniz bölümünü göndermek ve almaktır. Bu sayede uygulamanız gereksiz alanları aktarmak, ayrıştırmak ve depolamaktan kaçınarak ağ, CPU ve bellek gibi kaynakları daha verimli bir şekilde kullanabilir.
İki tür kısmi talep vardır:
- Kısmi yanıt: Yanıta dahil edilecek alanları belirttiğiniz 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 talepte bulunmayla ilgili daha ayrıntılı bilgi aşağıdaki bölümlerde verilmiştir.
Kısmi yanıt
Varsayılan olarak sunucu, istekleri işlendikten sonra kaynağın tam temsilini geri gönderir. Daha iyi performans için sunucudan yalnızca gerçekten ihtiyaç duyduğunuz alanları göndermesini isteyebilir ve bunun yerine kısmi bir yanıt alabilirsiniz.
Kısmi bir 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 herhangi bir istekle kullanabilirsiniz.
fields
parametresinin yalnızca yanıt verilerini etkilediğini unutmayın; göndermeniz gereken verileri (varsa) etkilemez. 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 (kurmaca) "Demo" ile kullanımı gösterilmektedir API'ye gidin.
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ısaltılması için atlanan diğer 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 gönderilen aşağıdaki istek, döndürülen veri miktarını önemli ölçüde azaltmak amacıyla fields
parametresini kullanı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 ve her öğede sadece HTML başlığı ile uzunluk karakteristik bilgilerini içeren sadeleştirilmiş bir öğe dizisi içeren bir yanıt 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ı kapsayan üst nesnelerini 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 ve yanıtta tam olarak neyin döndürüleceği hakkında ayrıntılı bilgi verilmiştir.
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ştir ve daha fazla örnek aşağıda 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
öğesini kullanın;b
içine iç içe yerleştirilmiş birc
alanını seçmek içina/b/c
kullanın.
İstisna: "data" (veri) kullanan API yanıtları için Yanıtın
data: { ... }
gibi görünen birdata
nesnesinin içine yerleştirildiği sarmalayıcılar "data
" içermezfields
spesifikasyonunda. Veri nesnesinidata/a/b
gibi bir alan spesifikasyonuyla eklemek hataya neden olur. Bunun yerine,a/b
gibi birfields
spesifikasyonu kullanın.- İfadeleri parantez içine yerleştirerek dizi veya nesnelerin belirli bir alt alanını istemek için bir alt seçici kullanın "
( )
".Örneğin:
fields=items(id,author/email)
, items dizisindeki her bir öğ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 (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.
Domains parametresini kullanmayla ilgili diğer örnekler
Aşağıdaki örneklerde, fields
parametre değerinin yanıtı nasıl etkilediğine dair 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. Okunabilirliği artırmak 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, alanların virgülle ayrılmış bir listesidir ve her alan, yanıtın köküne göre belirtilir. Bu nedenle, bir list 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 bu kaynağa göre belirtilir. Seçtiğiniz alan bir diziyse (veya dizinin parçasıysa) sunucu, dizideki tüm öğelerin seçilen bölümünü döndürür.
.
. Koleksiyon düzeyinden 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 kendilerini ç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
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 yalnızca pagemap
öğesinin alt öğesi olan tüm nesnelerintitle
alanını (varsa) döndürür.
. Kaynak düzeyinden 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 öğeleri olan tüm nesnelerinhref
alanını döndürür.- Alt seçimleri kullanarak yalnızca belirli alanların belirli kısımlarını isteyin.
- Varsayılan olarak, isteğinizde belirli alanlar belirtilmişse sunucu, nesneleri veya dizi öğelerini olduğu gibi döndürür. Yalnızca belirli alt alanları içeren bir yanıt belirtebilirsiniz. Bu işlemi "
( )
" kullanarak yaparsınız alt seçim söz dizimini kullanabilirsiniz.Ö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
Bir 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 başka bir şekilde geçersizse sunucu, kullanıcıya alan seçimiyle ilgili sorunun ne olduğunu bildiren bir hata mesajıyla birlikte 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 sayfalara ayırma sorgu parametrelerini destekleyen API'lerde (örneğin, maxResults
ve nextPageToken
) her sorgunun sonuçlarını yönetilebilir bir boyuta küçültmek için bu parametreleri kullanın. Aksi takdirde, kısmi yanıtta elde edilecek performans artışı gerçekleşmeyebilir.
Yama (kısmi güncelleme)
Ayrıca kaynakları değiştirirken gereksiz verilerin gönderilmesini önleyebilirsiniz. Yalnızca değiştirdiğiniz belirli alanlar için güncellenmiş verileri göndermek istiyorsanız HTTP PATCH
fiilini kullanın. Bu dokümanda açıklanan yama anlamları, eski kısmi güncelleme GData uygulaması olan GData uygulamasından farklı (ve daha basittir).
Aşağıdaki kısa örnekte, yama kullanmanın küçük bir güncelleme yapmak için göndermeniz gereken verileri nasıl en aza indirdiği gösterilmektedir.
Örnek
Bu örnekte, yalnızca genel (kurmaca) bir "Demo"nun başlığının güncellenmesi için basit bir yama isteği gösterilmektedir API kaynağı. Kaynakta bir yorum, bir dizi özellik, durum ve daha birçok alan da 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ğinden öncekinden farklı olan tek değer budur.
Not: kısmi yanıt fields
parametresini yama ile birlikte 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. Bu nedenle, 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ı bulunur. Bir alan belirttiğinizde, kapsayan üst öğelerin kısmi bir yanıtla döndürülmesi gibi, onu kapsayan üst nesneleri de eklemeniz gerekir. Gönderdiğiniz değiştirilmiş 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ı belirtip
null
olarak ayarlayın. Örneğin,"comment": null
. Ayrıca, bir nesneyinull
değerine ayarlayarak tüm nesneyi (değişebilirse) silebilirsiniz. Java API İstemci Kitaplığı yerineData.NULL_STRING
kullanın; şunun için: ayrıntıları için JSON null sayfasına bakın.
Diziler hakkında not: Dizi içeren yama istekleri, mevcut diziyi sağladığınız diziyle değiştirir. Bir dizideki öğeleri parçalı olarak değiştiremez, ekleyemez veya silemezsiniz.
Yamayı oku-değiştir-yazma döngüsünde kullanma
Değiştirmek istediğiniz verileri içeren kısmi bir yanıt alarak başlamak yararlı bir uygulama olabilir. Bu, özellikle ETag kullanan kaynaklar için önemlidir. Çünkü kaynağı başarıyla güncellemek için If-Match
HTTP başlığında geçerli ETag değerini sağlamanız gerekir. 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 göredir. 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 koduyla ve güncellenen kaynağın kısmi gösterimiyle 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 bunları daha önce aldığınız verileri temel almanız gerekir. Örneğin, bir diziye öğe eklemek istiyor ve mevcut dizi öğelerinden hiçbirini kaybetmemek istemiyorsanız önce mevcut verileri almanız gerekir. Benzer şekilde, API ETag'leri kullanıyorsa kaynağı başarılı bir şekilde güncellemek için isteğinizle birlikte önceki ETag değerini göndermeniz gerekir.
Not: ETag'ler kullanılırken bir yamanın uygulanmasını zorunlu kılmak için "If-Match: *"
HTTP üst bilgisi kullanabilirsiniz. Bunu yaparsanız okuma işlemini yazmadan önce gerçekleştirmeniz 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 yama isteğini kolayca oluşturabilirsiniz. Ö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 bu değerin üzerine yazılır. Aksi takdirde yeni değere ayarlanır. Benzer şekilde, hacim özelliği varsa değerinin üzerine yazılır. veri oluşturulmadıysa dosya oluşturulur. Doğruluk alanı (ayarlanmışsa) 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, PUT
ürününde olduğu gibi bir yama isteğini başarıyla işlediğinde ETag değerlerini günceller.
Yama isteği, döndürdüğü veri miktarını azaltmak için fields
parametresini kullanmadığınız sürece kaynak temsilinin tamamını döndürür.
Bir yama isteği, söz dizimsel veya semantik olarak geçersiz olan yeni bir kaynak durumuyla sonuçlanırsa sunucu, 400 Bad Request
veya 422 Unprocessable Entity
HTTP durum kodu döndürür ve kaynak durumu değişmez. Ö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 bir HTTP POST
isteği yapın ve geçersiz kılma başlığını aşağıda gösterildiği gibi 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önderdiğinizde yalnızca zorunlu veya isteğe bağlı alanları göndermeniz gerekir. Sunucu tarafından ayarlanan alanlar için değer gönderirseniz bu değerler yoksayılır. Bu, kısmi güncelleme yapmanın başka bir yolu gibi görünse de bu yaklaşımın 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ı parametreler sağlamazsanız daha önce ayarlanmış verileri siler.
Bu nedenle yama kullanmak çok daha güvenlidir. Yalnızca değiştirmek istediğiniz alanlara veri sağlarsınız; çıkardığınız alanlar temizlenmez. Bu kuralın tek istisnası, yinelenen öğeler veya dizilerde ortaya çıkar: Tümünü atlarsanız oldukları gibi kalırlar; Herhangi birini sağlarsanız tüm grup, sağladığınız grupla değiştirilir.
Toplu istekler
Bu belgede, HTTP bağlantılarının sayısını azaltmak için API çağrılarının nasıl toplu olarak kullanılacağı gösterilmektedir anlatacağım.
Bu belge özellikle, HTTP isteği. 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 yaptığı her HTTP bağlantısı belirli miktarda ek yük oluşturur. Google Drive API'si, istemcinizin tek bir HTTP isteğine birden fazla API çağrısı yerleştirmesine olanak tanımak için toplu işlemeyi destekler.
Gruplandırmayı kullanmak isteyebileceğiniz durumlara örnekler:
- Çok sayıda dosyanın meta verisi alınıyor.
- Meta verileri veya mülkleri toplu olarak güncelleme.
- Çok sayıda dosya için izinleri değiştirme (örneğin, yeni bir kullanıcı veya grup ekleme).
- Yerel istemci verilerini ilk kez veya uzun bir süre çevrimdışı kaldıktan sonra senkronize etme.
Bu durumda her çağrıyı ayrı ayrı göndermek yerine tek bir HTTP isteği olarak gruplandırabilirsiniz. Dahili isteklerin tümü aynı Google API'sine gitmelidir.
Tek bir toplu istekte en fazla 100 arama yapabilirsiniz. Bundan daha fazla çağrı yapmanız gerekiyorsa birden çok toplu istek kullanın.
Not: Google Drive API'nin toplu işlem sistemi, OData toplu işleme sistemiyle aynı söz dizimini kullanır ancak anlamlar farklıdır.
Ek kısıtlamalar şunlardır:
- 100'den fazla çağrı içeren toplu istekler hataya neden olabilir.
- Her dahili istek için URL uzunluğu 8.000 karakterle sınırlıdır.
- Google Drive, yükleme veya indirme ya da dosyaları dışa aktarma amacıyla medyaya yönelik toplu işlemleri desteklemez.
Grup ayrıntıları
Toplu istek, API keşif dokümanında belirtilen batchPath
öğesine gönderilebilecek bir HTTP isteğinde birleştirilen birden çok 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ı bir şekilde açıklanmaktadır; Daha sonra, bir örnek verelim.
Not: Gruplandırılmış n istekleri, kullanım sınırınıza tek bir istek olarak değil n isteği olarak dahil edilir. Toplu istek, işlenmeden önce bir dizi isteğe ayrılır.
Toplu isteğin biçimi
Toplu istek, multipart/mixed
içerik türünün kullanıldığı birden fazla 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 olabilir. Ancak, bölüm başlıkları yalnızca bölümün başlangıcını belirtmek içindir; iç içe yerleştirilmiş istekten ayrıdır. Sunucu toplu isteği ayrı isteklere dönüştürdükten sonra parça başlıkları yoksayılır.
Her bir bölümün gövdesi, kendi yüklemi, URL'si, başlıkları ve gövdesi ile 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.
Dış toplu isteğin HTTP üstbilgileri (Content-Type
gibi Content-
üst bilgileri hariç), gruptaki her istek için geçerlidir. Hem dış istekte hem de tek bir çağrıda belirli bir HTTP üstbilgisi 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 çağrı için geçerlidir.
Örneğin, belirli bir çağrı için bir Yetkilendirme üstbilgisi sağlarsanız bu başlık yalnızca o çağrıya uygulanır. Dış istek için bir Yetkilendirme başlığı sağlarsanız bu başlık, kendi Yetkilendirme başlıklarıyla geçersiz kılınmadığı sürece tüm bağımsız ç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 şekilde) her bölüme uygular ve daha sonra, her bir bölümü ayrı bir HTTP isteğiymiş gibi değerlendirir.
Toplu isteğe yanıt verme
Sunucunun yanıtı, multipart/mixed
içerik türüne sahip tek bir standart HTTP yanıtı olur; her bölüm, isteklerle aynı sırayla toplu istekteki isteklerden birinin yanıtıdır.
İstekteki bölümlerde olduğu gibi, her yanıt bölümü de durum kodu, başlıklar ve gövde dahil olmak üzere 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ı işaret eden bir Content-Type
başlığı bulunur.
İsteğin belirli bir bölümünde Content-ID
başlığı varsa yanıtın karşılık gelen bölümü, aşağıdaki örnekte gösterildiği gibi, orijinal değerin önünde response-
dizesi olacak şekilde eşleşen bir Content-ID
başlığına sahiptir.
Not: Sunucu, aramalarınızı herhangi bir sırada gerçekleştirebilir. Öğelerin sizin belirttiğiniz sırayla yürütülmesine izin vermeyin. İki çağrının belirli bir sırada gerçekleşmesini istiyorsanız bunları tek bir istekte gönderemezsiniz. ilkini tek başına gönderin. İkincisini göndermeden önce ilk yanıtın verilmesini bekleyin.
Örnek
Aşağıdaki örnekte, Google Drive API ile toplu işlem yapma 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,
emin olmanız gerekir. Örneğin,
files.list
yöntemi yalnızca
id
, name
ve mimeType
. Bu alanlar, gireceğiniz yeni bilgilerle
gerekiyor. Diğer alanları döndürmeniz gerekiyorsa
Bir dosya için belirli alanları döndürün.