Apps Komut Dosyası projeleri Google Drive'da bulunduğundan, geliştiriciler Apps Komut Dosyası kaynak kodunu Google Drive API'yi kullanarak içe ve dışa aktarabilir (Apps Komut Dosyası'ndaki Drive Hizmeti ile karıştırılmamalıdır).
Örneğin, bir geliştirici favori kod düzenleyicisini kullanarak yerel makinesinde yeni Apps Komut Dosyası kodu yazabilir ve diğer geliştiricilerle ortak çalışmak için Git gibi bir sürüm kontrol sistemi kullanabilir. Bir sürüm tamamlandığında, dosyaları REST API'yi kullanarak Google Drive'a yükleyebilir (içe aktarabilir) ve dosyalar diğer Apps Komut Dosyası projeleri gibi kullanılabilir.
Yerel sürümlerde kod değişiklikleri yapılabilir ve Google Drive API kullanılarak Apps Komut Dosyası projesiyle senkronize edilebilir. Mevcut projeler Google Drive'dan yerel bir makineye indirilebilir (dışa aktarılabilir).
Özellikler ve Sınırlamalar
Projeleri içe veya dışa aktarmak için Google Drive API'yi kullanmak istiyorsanız şunları göz önünde bulundurun:
- Sunucu tarafı komut dosyası dosyalarının ".gs" ile bitmesi beklenir. .js dosyalarını kullanarak yerel olarak geliştirme yapmak isteyebilirsiniz, ancak Google Drive'a aktarmadan önce bir .gs uzantısı içerecek şekilde yeniden adlandırmayı unutmayın.
- İstemci tarafı komut dosyası dosyalarının ".html" ile bitmesi gerekir. Buna istemci tarafı .html, .js veya .css dosyaları da dahildir. Başka uzantıları kullanarak yerel olarak da geliştirme yapabilirsiniz, ancak Google Drive'a aktarma işleminden önce .html uzantısına sahip olmanız önemlidir.
- Proje dosyalarını Google Drive'a aktardığınızda, bu dosyalardaki mevcut tüm verilerin üzerine yazılır. Kısmi metin ekleyemez veya ekleyemezsiniz; dosyanın tamamı güncellenmelidir.
- Sunucu tarafı komut dosyası dosyaları geçerli JavaScript içermelidir. Sunucunuzun .js dosyalarında hatalar varsa Google Drive API güncelleme çağrısı, 5xx hatası vererek başarısız olur. İçe aktarmadan önce kodunuzu satır içi yaparak bu durumu önleyebilirsiniz.
- Boş dosyalar içe aktarılamaz. Boş bir dosya yüklemeyi denerseniz Google Drive API güncelleme çağrısı 5xx hatası vererek başarısız olur.
- Yalnızca bağımsız komut dosyaları içe veya dışa aktarılabilir. Kapsayıcıya bağlı komut dosyalarına Google Drive API üzerinden erişilemez.
- Yalnızca kaynak kodları içe veya dışa aktarılabilir. Proje özellikleri veya günlükler gibi kaynaklar da Google Drive API aracılığıyla kullanıma sunulmaz. Komut dosyası sürümü oluşturma, komut dosyasını yayınlama veya yürütme gibi işlemler Google Drive API üzerinden yapılamaz.
- Tek bir sunucu
Code.gs
dosyasıyla sınırlı değilsiniz. Geliştirme kolaylığı için sunucu kodunu birden fazla dosyaya dağıtabilirsiniz. Sunucu dosyalarının tümü aynı küresel ad alanına yüklenir. Bu nedenle, güvenli bir kapsülleme sağlamak istediğinizde JavaScript sınıflarını kullanın.
Drive API
Google Drive API, geliştiricilerin Google Drive'daki dosyalara programatik olarak erişmesine olanak tanır. Bu API, dosyaları indirmek için GET
, yüklemek için de PUT/POST
kullanır. Ayrıntılı belgeler ve hızlı başlangıç kılavuzları için lütfen Google Drive API'ye Genel Bakış sayfasını inceleyin.
Bu kılavuz, aşağıdaki çağrıları kullanarak dosyaları Dosyalar kaynağında listelemeye ve taşımaya odaklanacaktır:
Yetkilendirme
Google Drive API'ye yapılan tüm istekler, kimliği doğrulanmış bir kullanıcı tarafından OAuth 2.0 protokolü aracılığıyla yetkilendirilmelidir. Daha fazla bilgi için lütfen Google Drive API yetkilendirme belgelerini inceleyin.
Bir uygulamanın ihtiyaç duyabileceği diğer kapsamlara (https://www.googleapis.com/auth/drive
gibi) ek olarak, Google Apps Komut Dosyası projelerini içe veya dışa aktarmaya çalışan tüm uygulamalar özel kapsamı istemelidir:
https://www.googleapis.com/auth/drive.scripts
Mevcut projeleri listeleyin
Drive'ınızdaki tüm Apps Komut Dosyası projelerini listelemek için Dosyalar kaynağını kullanarak application/vnd.google-apps.script
MIME türüne sahip dosyaları sorgulayın.
Yanıtı yalnızca sahibi olduğunuz dosyaları içerecek şekilde filtrelemek için 'me' in owners
arama parametresini dahil edin.
Aşağıda, JSON yanıtı aracılığıyla döndürülen bir dizi Apps Komut Dosyası projesinin gösterildiği örnek istek ve yanıt verilmiştir.
GET https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application%2Fvnd.google-apps.script'+and+'me'+in+owners Authorization: Bearer ya29.fakebearerstring
{ "kind": "drive#fileList", "etag": "\"kjsas92/f3zGUXczKMxEB_9ZTMRFOF3d1ZU\"", "selfLink": "https://www.googleapis.com/drive/v2/files?q=mimeType%3D'application/vnd.google-apps.script'+and+'me'+in+owners", "items": [ { "kind": "drive#file", "id": "1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "etag": "\"kjsas92/MTM3MDk3ODY5ODQyNg\"", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D", "alternateLink": "https://script.google.com/a/google.com/d/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/edit?usp=drivesdk", "iconLink": "https://ssl.gstatic.com/docs/doclist/images/icon_11_script_list.png", "title": "Mail merge", "mimeType": "application/vnd.google-apps.script", "description": "", "labels": { "starred": false, "hidden": false, "trashed": true, "restricted": false, "viewed": true }, "createdDate": "2013-06-11T19:24:45.188Z", "modifiedDate": "2013-06-11T19:24:58.426Z", "modifiedByMeDate": "2013-06-11T19:24:58.426Z", "lastViewedByMeDate": "2013-06-11T19:24:58.426Z", "parents": [ { "kind": "drive#parentReference", "id": "0APdyIOzo7bWDUk9PVA", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/parents/0APdyIOzo7bWDUk9PVA", "parentLink": "https://www.googleapis.com/drive/v2/files/0APdyIOzo7bWDUk9PVA", "isRoot": true } ], "exportLinks": { "application/json": "https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json" }, "userPermission": { "kind": "drive#permission", "etag": "\"kjsas92/259X2r5DVstv1CcIQTjt_RQPSW8\"", "id": "me", "selfLink": "https://www.googleapis.com/drive/v2/files/1vi0uwcMdHsRv1YFtgq7XdiTGSdqgjIYpdQNC0A_Udn79LOhH0vYL132D/permissions/me", "role": "owner", "type": "user" }, "quotaBytesUsed": "0", "ownerNames": [ "John Doe" ], "owners": [ { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" } ], "lastModifyingUserName": "John Doe", "lastModifyingUser": { "kind": "drive#user", "displayName": "John Doe", "picture": { "url": "https://lh4.googleusercontent.com/-yd1rIb6Pe2Y/AAAAAAAAAAI/AAAAAAAAAGs/PP5vTuZonik/s64/photo.jpg" }, "isAuthenticatedUser": true, "permissionId": "1234566789" }, "editable": true, "writersCanShare": true, "shared": false, "explicitlyTrashed": true, "appDataContents": false } ] }
Bir Apps Komut Dosyası projesinin dosya kimliğini biliyorsanız aşağıdaki API çağrısıyla doğrudan getirebilirsiniz:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
Projeleri Drive'dan dışa aktarın
API'den bir File
kaynağı geri aldığınızda exportLinks
mülkü, projenin içeriklerini JSON verileri olarak almak için getirilecek bir URL içerir. Aşağıda, bu URL'nin nasıl görünebileceğine dair bir örnek verilmiştir:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Projenin kendi içeriğini almak için bu URL'ye istekte bulunun.
Aynı OAuth Bearer
jetonuna sahip bir Authorization
üst bilgisi eklediğinizden emin olun
Aşağıda örnek bir istek ve yanıt verilmiştir:
GET https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json Authorization: Bearer ya29.fakebearerstring
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
Yukarıdaki örnek, HTML Hizmeti kılavuzundan alınan basit bir web uygulamasına ait kodu içerir. Her biri aşağıdaki 4 özelliğe sahip bir Files
dizisini geri alacağınızı unutmayın:
id |
Proje içindeki bir dosyanın, güncellemeler sırasında bu dosyaya referansta bulunması için gereken dahili tanımlayıcısı. |
name |
Uzantının olmadığı dosyanın, Komut Dosyası Düzenleyici'de görüntülenen adı. |
type |
İki dosya türü server_js ve html'dir. |
source |
Dosyanın içerdiği kodlanmış kaynak kodu. |
Projeleri Drive'a aktarın
Mevcut bir projeyi güncellemek için update
API dosyasına uygun fileId
ile HTTP PUT
çağrısı yapın.
Aşağıdaki örnekte, medya yükleme kısmı için örnek bir işlem gösterilmektedir. Uygulamanız, istemci kitaplıklarından birini kullanarak meta verileri ve medyayı aynı yükleme çağrısına kolayca ekleyebilir. Content-Type
üst bilgisinin, bu durumda yüklenen içeriğin türünü belirttiğini unutmayın.
PUT https://www.googleapis.com/upload/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "id":"9basdfbd-749a-4as9b-b9d1-d64basdf803", "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "id":"3asf7c0d-1afb-4a9-8431-5asdfc79e7ae", "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n New message!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }
Bir proje içinde yeni dosyalar oluşturma
Bir projede yeni bir dosya oluşturmak için id
özelliği olmayan bir dosya için PUT
isteği gönderin. Tanımlayıcısı bilinmeyen bir dosya eklerseniz sistem bir hata mesajı verir.
Bir proje içindeki dosyaları silme
Projedeki bir dosyayı silmek için söz konusu dosyayı içermeyen (ancak projedeki diğer tüm dosyaları içeren) bir PUT
isteği gönderin. İçe aktarma işlemi sırasında geri gönderilmeyen tüm dosyalar sunucudan silinir.
Proje içindeki dosyaları yeniden adlandırma
Proje içindeki bir dosyayı yeniden adlandırmak için mevcut id
ile bir PUT
isteği
ancak yeni name
isteği gönderin. Sunucunun type
olarak değiştirme girişimlerini yoksaydığını unutmayın.
Yeni proje oluştur
Yeni proje oluşturmak için insert
API dosyasına bir POST
isteği gönderin. update
çağrısına çok benzer şekilde, proje adı ve açıklaması gibi meta verileri eklemek için bir istemci kitaplığı kullanabilirsiniz.
Medya yükleme işleminin örnek bir işlemini burada görebilirsiniz. Bu işlem, Drive'ınızda "Adsız"
adlı bir proje oluşturur. URL'deki convert
parametresi zorunludur.
update
çağrısında olduğu gibi, Content-Type
başlığı da gereklidir.
POST https://www.googleapis.com/upload/drive/v2/files?convert=true Authorization: Bearer ya29.fakebearerestring Content-Type: application/vnd.google-apps.script+json
{ "files": [ { "name":"Code", "type":"server_js", "source":"function doGet() {\n return HtmlService.createHtmlOutputFromFile(\u0027index\u0027);\n}\n" }, { "name":"index", "type":"html", "source":"\u003chtml\u003e\n \u003cbody\u003e\n Hello, world!!\n \u003c/body\u003e\n\u003c/html\u003e" } ] }