Projeleri İçe ve Dışa Aktarma

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:

  1. 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.
  2. İ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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. Tek bir Code.gs sunucu 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"
    }
  ]
}