Karena project Apps Script berada di Google Drive, developer dapat mengimpor dan mengekspor kode sumber Apps Script menggunakan Google Drive API (jangan sampai tertukar dengan Layanan Drive di Apps Script).
Misalnya, developer dapat menulis kode Apps Script baru di mesin lokalnya dengan editor kode favoritnya dan menggunakan sistem kontrol versi seperti Git untuk berkolaborasi dengan developer lain. Setelah versi diselesaikan, dia dapat mengupload (mengimpor) file ke Google Drive menggunakan REST API, tempat file tersebut dapat digunakan seperti project Apps Script lainnya.
Perubahan kode dapat dilakukan pada versi lokal dan disinkronkan ke project Apps Script menggunakan Google Drive API. Project yang ada dapat didownload (diekspor) dari Google Drive ke mesin lokal.
Fitur dan Batasan
Jika Anda ingin menggunakan Google Drive API untuk mengimpor atau mengekspor project, perhatikan hal berikut:
- File skrip sisi server diharapkan diakhiri dengan ".gs". Anda dapat mengembangkan secara lokal menggunakan file .js, tetapi pastikan untuk mengganti namanya agar menyertakan ekstensi .gs sebelum mengimpor ke Google Drive.
- File skrip sisi klien harus diakhiri dengan ".html". Hal ini mencakup file .html, .js, atau .css sisi klien. Sekali lagi, Anda dapat mengembangkan secara lokal menggunakan ekstensi lain, tetapi penting untuk memiliki ekstensi .html sebelum mengimpor ke Google Drive.
- Saat Anda mengimpor file project ke Google Drive, semua data yang ada dalam file tersebut akan ditimpa. Anda tidak dapat menambahkan atau menyisipkan sebagian teks; seluruh file harus diperbarui.
- File skrip sisi server harus berisi JavaScript yang valid. Jika ada error dalam file .js server Anda, panggilan update Google Drive API akan gagal dengan error 5xx. Anda dapat mencegah hal ini dengan melakukan linting pada kode sebelum mengimpor.
- File kosong tidak dapat diimpor. Panggilan update Google Drive API akan gagal dengan error 5xx jika Anda mencoba mengupload file kosong.
- Hanya skrip mandiri yang dapat diimpor atau diekspor. Skrip terikat ke penampung tidak dapat diakses melalui Google Drive API.
- Hanya kode sumber yang dapat diimpor atau diekspor. Resource seperti properti atau log project juga tidak diekspos melalui Google Drive API. Tindakan seperti pembuatan versi skrip, memublikasikan, atau menjalankan skrip tidak dapat dilakukan melalui Google Drive API.
- Anda tidak dibatasi pada satu file
Code.gsserver. Anda dapat menyebarkan kode server di beberapa file untuk mempermudah pengembangan. Semua file server dimuat ke dalam namespace global yang sama, jadi gunakan class JavaScript jika Anda ingin menyediakan enkapsulasi yang aman.
Drive API
Google Drive API memungkinkan developer mengakses file di Google Drive secara terprogram. API ini menggunakan GET untuk mendownload file dan PUT/POST untuk mengupload file. Lihat halaman Ringkasan Google Drive API
untuk mengetahui dokumentasi dan panduan memulai cepat yang mendetail.
Panduan ini akan berfokus pada pencantuman dan pemindahan file dengan resource File menggunakan panggilan berikut:
Otorisasi
Semua permintaan ke Google Drive API harus diizinkan oleh pengguna terautentikasi melalui protokol OAuth 2.0. Untuk mengetahui detail selengkapnya, lihat dokumentasi otorisasi Google Drive API.
Selain cakupan lain yang mungkin diperlukan aplikasi
(seperti https://www.googleapis.com/auth/drive), semua aplikasi yang mencoba
mengimpor atau mengekspor project Google Apps Script harus meminta cakupan khusus:
https://www.googleapis.com/auth/drive.scripts
Mencantumkan project yang ada
Untuk mencantumkan semua project Apps Script di Drive Anda, gunakan resource File
untuk membuat kueri file dengan jenis MIME application/vnd.google-apps.script.
Untuk memfilter respons agar hanya menyertakan file yang Anda miliki, sertakan parameter penelusuran 'me' in owners.
Berikut contoh permintaan dan respons yang menampilkan array project Apps Script yang ditampilkan melalui respons JSON.
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 } ] }
Jika mengetahui ID file project Apps Script, Anda dapat mengambilnya secara langsung dengan panggilan API berikut:
GET https://www.googleapis.com/drive/v2/files/1234567890abcefghijklmnopqrstuvwxyz
Authorization: Bearer ya29.fakebearerstring
Mengekspor project dari Drive
Setelah Anda mendapatkan resource File dari API,
properti exportLinks akan berisi URL yang akan diambil untuk mendapatkan konten
project sebagai data JSON. Berikut contoh tampilan URL ini:
https://script.google.com/feeds/download/export?id=1234567890abcefghijklmnopqrstuvwxyz&format=json
Buat permintaan ke URL ini untuk mengambil konten project itu sendiri.
Pastikan Anda menyertakan header Authorization dengan token OAuth Bearer yang sama
Berikut adalah contoh permintaan dan respons:
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" } ] }
Contoh di atas menyertakan kode untuk aplikasi web sederhana dari panduan HTML
Service. Perhatikan
bahwa Anda akan mendapatkan kembali array Files, yang masing-masing memiliki 4 properti berikut:
id |
ID internal file dalam project, yang diperlukan untuk mereferensikan file ini selama pembaruan. |
name |
Nama file tanpa ekstensi, seperti yang ditampilkan di Editor Skrip. |
type |
Dua jenis file adalah server_js dan html. |
source |
Kode sumber yang dienkode dan terdapat dalam file. |
Mengimpor project ke Drive
Untuk mengupdate project yang ada, lakukan panggilan HTTP PUT ke file
update API dengan fileId yang sesuai.
Contoh di bawah ini menunjukkan contoh transaksi untuk bagian upload media. Dengan menggunakan
salah satu library klien, aplikasi Anda dapat dengan mudah
menyertakan metadata dan media dalam panggilan upload yang sama. Perhatikan bahwa header
Content-Type menentukan jenis konten yang diupload dalam kasus ini.
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" } ] }
Membuat file baru dalam project
Untuk membuat file baru dalam project, kirim permintaan PUT untuk file tanpa
properti id. Jika Anda menyertakan file dengan ID yang tidak diketahui, sistem akan menampilkan pesan error.
Menghapus file dalam project
Untuk menghapus file dari project, kirim permintaan PUT yang tidak menyertakan file tersebut (tetapi menyertakan semua file lain dalam project). File apa pun yang tidak dikirim kembali selama proses impor akan dihapus dari server.
Mengganti nama file dalam project
Untuk mengganti nama file dalam project, kirim permintaan PUT dengan id yang ada
tetapi name baru. Perhatikan bahwa server mengabaikan upaya untuk mengubah ke type.
Buat project baru
Untuk membuat project baru, kirim permintaan POST ke file
insert API. Sama seperti panggilan update,
Anda dapat menggunakan library klien untuk menyertakan metadata seperti nama dan deskripsi project.
Berikut adalah contoh transaksi upload media. Tindakan ini akan membuat project
bernama "Tanpa Judul" di Drive Anda. Parameter convertdi URL wajib diisi.
Seperti panggilan update, header Content-Type diperlukan.
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" } ] }