Projeleri İçe ve Dışa Aktarma

Apps Komut Dosyası projeleri Google Drive'da bulunduğundan geliştiriciler, Google Drive API'yi kullanarak Apps Komut Dosyası kaynak kodunu içe ve dışa aktarabilir (Apps Komut Dosyası'ndaki Drive Hizmeti ile karıştırılmamalıdır).

Örneğin, bir geliştirici yerel makinesinde en sevdiği kod düzenleyiciyle yeni Apps Komut Dosyası kodu yazabilir ve diğer geliştiricilerle işbirliği yapmak için Git gibi bir sürüm kontrol sistemi kullanabilir. Bir sürüm sonlandırıldığı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 üzerinden kullanıma sunulmaz. Komut dosyası sürüm oluşturma, yayınlama veya yürütme gibi işlemler Google Drive API üzerinden 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, dosyaları yüklemek için ise PUT/POST kullanır. Ayrıntılı dokümanlar ve hızlı başlangıçlar için lütfen Google Drive API'ye Genel Bakış sayfasını inceleyin.

Bu kılavuzda, aşağıdaki çağrıları kullanarak Dosyalar kaynağı ile dosyaları listelemeye ve taşımaya odaklanılacaktı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 lütfen 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

Mevcut projeleri listeleme

Drive'ınızdaki tüm Apps Komut Dosyası projelerini listelemek için application/vnd.google-apps.script MIME türüne sahip dosyaları sorgulamak üzere Dosyalar kaynağını kullanın. Yanıtı yalnızca sahip olduğunuz dosyaları içerecek şekilde filtrelemek için arama parametresini 'me' in owners 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

Drive'dan proje 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 basit bir web uygulamasına ait kod yer almaktadır. Files dizisinin döndürüldüğünü ve her birinin şu 4 özelliğe sahip olduğunu unutmayın:

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 üstbilgisinin, 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"
    }
  ]
}

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.

Proje içindeki 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. Sunucunun, type olarak değiştirme girişimlerini yoksayacağını unutmayın.

Yeni proje oluştur

Yeni bir proje oluşturmak için POST dosyasına istek gönderin insert API'si. update çağrısına benzer şekilde, 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 "Başlıksız" adlı bir proje oluşturur. URL'deki convert parametresi gereklidir. update çağrısında olduğu gibi, Content-Type başlığı 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"
    }
  ]
}