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 komputer lokalnya dengan editor kode favoritnya dan menggunakan sistem kontrol versi seperti Git untuk berkolaborasi dengan developer lain. Setelah versi selesai, ia 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 komputer 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 Anda harus 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 teks sebagian; seluruh file harus diperbarui.
- File skrip sisi server harus berisi JavaScript yang valid. Jika ada error dalam file .js server, panggilan update Google Drive API akan gagal dengan error 5xx. Anda dapat mencegahnya dengan melakukan linting pada kode sebelum melakukan impor.
- 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 penampung tidak dapat diakses melalui Google Drive API.
- Hanya kode sumber yang dapat diimpor atau diekspor. Resource seperti properti atau log project juga tidak ditampilkan melalui Google Drive API. Tindakan seperti pembuatan versi skrip, publikasi, atau eksekusi skrip tidak dapat dilakukan melalui Google Drive API.
- Anda tidak dibatasi pada satu file
Code.gs
server. Anda dapat menyebarkan kode server di beberapa file untuk memudahkan pengembangan. Semua file server dimuat ke dalam namespace global yang sama, jadi gunakan class JavaScript saat Anda ingin memberikan 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 yang mendetail.
Panduan ini akan berfokus pada pembuatan daftar dan pemindahan file dengan resource File menggunakan panggilan ini:
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, 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 adalah 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 langsung mengambilnya 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
kembali dari API,
properti exportLinks
akan berisi URL yang akan diambil untuk mendapatkan konten
project sebagai data JSON. Berikut adalah 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 Bearer
OAuth 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 Layanan
HTML. Perhatikan
bahwa Anda mendapatkan kembali array Files
, masing-masing dengan 4 properti berikut:
id |
ID internal file dalam project, yang diperlukan untuk mereferensikan file ini selama update. |
name |
Nama file tanpa ekstensi, seperti yang ditampilkan di Editor Skrip. |
type |
Kedua jenis file tersebut adalah server_js dan html. |
source |
Kode sumber yang dienkode yang terdapat dalam file. |
Mengimpor project ke Drive
Untuk mengupdate project yang ada, lakukan panggilan PUT
HTTP 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 hal 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 dikenal, 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). Setiap file 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 setiap upaya untuk berubah 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 "Untitled" di Drive Anda. Parameter convert
di 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" } ] }