Google Apps Komut Dosyası projeleri Google Drive'da bulunduğundan geliştiriciler, Apps Komut Dosyası kaynak kodunu Google Drive API'yi kullanarak (Apps Komut Dosyası'ndaki Drive Hizmeti ile karıştırılmamalıdır) içe ve dışa aktarabilir.
Örneğin, bir geliştirici en sevdiği kod düzenleyiciyle yerel makinesinde yeni Apps Komut Dosyası kodu yazabilir ve diğer geliştiricilerle işbirliği yapmak için Git gibi bir sürüm denetim sistemi kullanabilir. Bir sürüm tamamlandığında, dosyaları REST API'yi kullanarak Google Drive'a yükleyebilir (içe aktarabilir). Bu dosyalar, diğer Apps Komut Dosyası projeleri gibi kullanılabilir.
Kod değişiklikleri yerel sürümlerde 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 aşağıdakilere dikkat edin:
- Sunucu tarafı komut dosyalarının ".gs" ile bitmesi beklenir. .js dosyalarını kullanarak yerel olarak geliştirme yapmak isteyebilirsiniz ancak Google Drive'a aktarmadan önce .gs uzantısını içerecek şekilde yeniden adlandırdığınızdan emin olun.
- İstemci tarafı komut dosyası dosyaları ".html" ile bitmelidir. Buna istemci tarafındaki .html, .js veya .css dosyaları dahildir. Diğer uzantıları kullanarak yerel olarak geliştirebilirsiniz ancak Google Drive'a aktarmadan önce .html uzantısının olması ö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 yerleştiremezsiniz. Dosyanın tamamı güncellenmelidir.
- Sunucu tarafı komut dosyaları geçerli JavaScript içermelidir. Sunucu .js dosyalarınızda hatalar varsa Google Drive API güncelleme çağrısı 5xx hatasıyla başarısız olur. İçe aktarmadan önce kodunuzu linting yaparak bunu önleyebilirsiniz.
- Boş dosyalar içe aktarılamaz. Boş bir dosya yüklemeye çalışırsanız Google Drive API güncelleme çağrısı 5xx hatasıyla 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 kodu içe veya dışa aktarılabilir. Proje özellikleri veya günlükler gibi kaynaklar da Google Drive API tarafından kullanıma sunulmaz. Google Drive API'si kullanılarak komut dosyası sürüm oluşturma, yayınlama veya yürütme gibi işlemler yapılamaz.
- Tek bir
Code.gssunucu dosyasıyla sınırlı değilsiniz. Geliştirme kolaylığı için sunucu kodunu birden fazla dosyaya yayabilirsiniz. Tüm sunucu dosyaları aynı genel ad alanına yüklendiğinden güvenli kapsülleme sağlamak istediğinizde JavaScript sınıflarını kullanın.
Drive API'sı
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 ise PUT/POST kullanır. Ayrıntılı dokümanlar ve hızlı başlangıçlar için Google Drive API'ye Genel Bakış sayfasına bakın.
Bu kılavuzda, aşağıdaki çağrıları kullanarak Dosyalar kaynağı ile dosyaları listelemeye ve taşımaya odaklanılmaktadır:
Yetkilendirme
Google Drive API'ye gönderilen tüm isteklerin, OAuth 2.0 protokolü aracılığıyla kimliği doğrulanmış bir kullanıcı tarafından yetkilendirilmesi gerekir. Daha fazla bilgi için Google Drive API yetkilendirme belgelerine bakın.
Bir uygulamanın ihtiyaç duyabileceği diğer kapsamlara (ör. https://www.googleapis.com/auth/drive) ek olarak, Google Apps Komut Dosyası projelerini içe veya dışa aktarmaya çalışan tüm uygulamalar şu özel kapsamı istemelidir:
https://www.googleapis.com/auth/drive.scripts
Aşağıdaki örnek istekleri test etmek için OAuth 2.0 Playground'dan alınan bir OAuth 2.0 taşıyıcı jetonu kullanın.
Mevcut projeleri listeleme
Drive'ınızdaki tüm Apps Komut Dosyası projelerini listelemek için Dosyalar kaynağını kullanarak application/vnd.google-apps.script MIME türündeki dosyaları sorgulayın. Yanıtı yalnızca sahip olduğunuz dosyaları içerecek şekilde filtrelemek için 'me' in owners arama parametresini ekleyin.
Aşağıda, JSON yanıtı aracılığıyla döndürülen bir Apps Komut Dosyası projeleri dizisini gösteren örnek bir 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
Bir projenin dosya kimliği, proje anahtarıyla aynı değildir. Dosya kimliği, projenin URL'sindeki alfanümerik dizedir.
Projeleri Drive'dan dışa aktarma
API'den bir File kaynağı döndürüldüğünde,
exportLinks özelliği, projenin içeriğini JSON verileri olarak almak için getirilecek bir URL içerir. Bu URL'nin nasıl görünebileceğine dair bir örneği aşağıda bulabilirsiniz:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Projenin içeriğini almak için bu URL'ye istekte bulunun.
Aynı OAuth Bearer jetonuna sahip bir Authorization başlığı 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 örnekte, HTML
Service kılavuzundaki bir web uygulamasına ait kod yer almaktadır. Files dizisi döndürülür. Her birinde şu 4 özellik bulunur:
id |
Güncellemeler sırasında bu dosyaya referans vermek için gereken, proje içindeki bir dosyanın dahili tanımlayıcısı. |
name |
Uzantısız dosya adı (Komut Dosyası Düzenleyici'de gösterildiği gibi). |
type |
İki tür dosya vardır: server_js ve html. |
source |
Dosyada bulunan kodlanmış kaynak kodu. |
Projeleri Drive'a aktarma
Mevcut bir projeyi güncellemek için uygun fileId ile dosya update API'sine bir HTTP PUT çağrısı yapın.
Aşağıdaki örnekte, medya yükleme bölümü için örnek bir işlem gösterilmektedir. İstemci kitaplıklarından birini kullanarak uygulamanız, aynı yükleme çağrısına kolayca meta veriler ve medya ekleyebilir. Content-Type
üstbilgisi, bu durumda yüklenen içeriğin türünü belirtir.
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" } ] }
Proje içinde yeni dosyalar oluşturma
Bir proje içinde yeni bir dosya oluşturmak için PUT özelliğini içermeyen bir dosya isteği gönderin.id Bilinmeyen tanımlayıcıya sahip bir dosya eklerseniz sistem hata mesajı gösterir.
Projedeki dosyaları silme
Bir dosyayı projeden silmek için PUT isteği gönderin. Bu istekte söz konusu dosya yer almamalıdır (ancak projedeki diğer tüm dosyalar yer almalıdır). İçe aktarma işlemi sırasında geri gönderilmeyen tüm dosyalar sunucudan silinir.
Projedeki dosyaları yeniden adlandırma
Bir proje içindeki dosyayı yeniden adlandırmak için PUT isteği gönderin. Bu istekte mevcut id ancak yeni bir name olmalıdır. Sunucu, type'ya geçme girişimlerini yoksayar.
Yeni proje oluştur
Yeni bir proje oluşturmak için POST dosyasına istek gönderin
insert API'si. update çağrısında olduğu gibi, proje adı ve açıklaması gibi meta verileri eklemek için bir istemci kitaplığı kullanabilirsiniz.
Aşağıda, medya yükleme işlemine ilişkin bir örnek verilmiştir. Bu işlem, Drive'ınızda "Adsız" adlı bir proje oluşturur. URL'deki convert parametresi gereklidir. 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" } ] }