1. Sử dụng API Google Workspace
Lớp học lập trình này giới thiệu cho bạn cách sử dụng các API RESTful dựa trên HTTP của Google Workspace (trước đây là G Suite). Ví dụ này sẽ được thực hiện bằng Python để cho ngắn gọn và có sẵn, nhưng bạn cũng có thể chọn sử dụng ngôn ngữ phát triển mà mình yêu thích. Bạn sẽ được tìm hiểu các chủ đề giới thiệu như cách sử dụng bảng điều khiển dành cho nhà phát triển để tạo/quản lý dự án, lấy thông tin xác thực và cài đặt thư viện ứng dụng API. Sau khi hoàn tất các thủ tục, bạn sẽ viết một ứng dụng để hiển thị 100 tệp và thư mục đầu tiên trong Google Drive bằng cách sử dụng API của Google Drive.
Kiến thức bạn sẽ học được
- Tạo một dự án bằng Google/Cloud Developers Console
- Lấy và sử dụng thông tin đăng nhập ứng dụng OAuth2 trong ứng dụng của bạn
- Tìm hiểu về cách sử dụng Thư viện ứng dụng API của Google
- Viết các ứng dụng bằng API của Google và Google Workspace
- Lấy thông tin về tệp và thư mục bằng API Google Drive
Bạn cần có
- Có quyền truy cập vào Internet và trình duyệt web
- Tài khoản Google (Tài khoản Google Workspace có thể yêu cầu quản trị viên phê duyệt)
- Quen thuộc với các hệ thống tuân thủ POSIX như Linux và Mac OS X
- Có thể tạo tệp nguồn bằng trình soạn thảo mã hoặc lệnh shell.
- Có kỹ năng cơ bản về Python (2 hoặc 3), nhưng bạn có thể sử dụng bất kỳ ngôn ngữ nào được hỗ trợ
- Một số tệp và/hoặc thư mục trong Google Drive
2. Khảo sát
Bạn sẽ sử dụng hướng dẫn lớp học lập trình này như thế nào?
Bạn đánh giá thế nào về trải nghiệm của mình khi sử dụng các công cụ và API dành cho nhà phát triển của Google Workspace?
3. Tổng quan
Trong lớp học lập trình này, bạn sẽ tìm hiểu cách:
- Tải thư viện ứng dụng API của Google cho Python xuống
- Tạo một dự án mới trong Google/Cloud Developers Console
- Lấy thông tin đăng nhập cần thiết cho ứng dụng của bạn
- Sử dụng thông tin đăng nhập đó để truy cập vào API Google Drive
Nếu không muốn sử dụng Python, bạn có thể triển khai lớp học lập trình này trong công cụ phát triển mà bạn yêu thích (các thư viện ứng dụng của ngôn ngữ được hỗ trợ có tại đây) và chỉ cần tham khảo các ví dụ về Python dưới dạng mã giả (có thể thực thi).
4. Xác nhận môi trường Python
Lớp học lập trình này yêu cầu bạn sử dụng ngôn ngữ Python (mặc dù thư viện ứng dụng API của Google hỗ trợ nhiều ngôn ngữ, nên bạn có thể thoải mái tạo một ứng dụng tương đương trong công cụ phát triển mà bạn yêu thích và chỉ cần sử dụng Python làm mã giả). Cụ thể, lớp học lập trình này hỗ trợ Python 2 và 3, nhưng bạn nên chuyển sang phiên bản 3.x càng sớm càng tốt.
Cloud Shell là một tiện ích mà người dùng có thể sử dụng ngay trên Cloud Console và không yêu cầu môi trường phát triển cục bộ. Vì vậy, bạn có thể hoàn thành hướng dẫn này hoàn toàn trên đám mây bằng trình duyệt web. Cloud Shell đặc biệt hữu ích nếu bạn đang phát triển hoặc dự định tiếp tục phát triển bằng các sản phẩm và API của GCP. Cụ thể hơn, đối với lớp học lập trình này, Cloud Shell đã cài đặt sẵn cả hai phiên bản Python.
Cloud Shell cũng đã cài đặt IPython... đây là một trình thông dịch Python tương tác cấp cao mà chúng tôi đề xuất, đặc biệt nếu bạn là thành viên của cộng đồng khoa học dữ liệu hoặc học máy. Nếu có, IPython là trình thông dịch mặc định cho Jupyter Notebooks cũng như Colab, Jupyter Notebooks do Google Research lưu trữ.
IPython ưu tiên trình thông dịch Python 3 trước nhưng sẽ quay lại Python 2 nếu không có phiên bản 3.x. Bạn có thể truy cập vào IPython từ Cloud Shell, nhưng cũng có thể cài đặt IPython trong môi trường phát triển cục bộ. Thoát bằng tổ hợp phím ^D (Ctrl-d) và chấp nhận ưu đãi để thoát. Ví dụ về kết quả đầu ra khi bắt đầu ipython sẽ có dạng như sau:
$ ipython Python 3.7.3 (default, Mar 4 2020, 23:11:43) Type 'copyright', 'credits' or 'license' for more information IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help. In [1]:
Nếu không thích IPython, bạn hoàn toàn có thể sử dụng trình thông dịch tương tác Python tiêu chuẩn (Cloud Shell hoặc môi trường phát triển cục bộ của bạn) (cũng có thể thoát bằng ^D):
$ python Python 2.7.13 (default, Sep 26 2018, 18:42:22) [GCC 6.3.0 20170516] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> $ python3 Python 3.7.3 (default, Mar 10 2020, 02:33:39) [GCC 6.3.0 20170516] on linux Type "help", "copyright", "credits" or "license" for more information. >>>
Lớp học lập trình này cũng giả định rằng bạn có công cụ cài đặt pip (trình quản lý gói Python và trình phân giải phần phụ thuộc). Công cụ này đi kèm với các phiên bản 2.7.9 trở lên hoặc 3.4 trở lên. Nếu bạn có phiên bản Python cũ hơn, hãy xem hướng dẫn này để biết hướng dẫn cài đặt. Tuỳ thuộc vào quyền của mình, bạn có thể cần có quyền sudo hoặc quyền truy cập của siêu người dùng, nhưng thường thì không cần. Bạn cũng có thể sử dụng pip2 hoặc pip3 một cách rõ ràng để thực thi pip cho các phiên bản Python cụ thể.
Phần còn lại của lớp học lập trình giả định rằng bạn đang sử dụng Python 3. Hướng dẫn cụ thể sẽ được cung cấp cho Python 2 nếu hướng dẫn này khác biệt đáng kể so với Python 3.x.
*Tạo và sử dụng môi trường ảo
Phần này là không bắt buộc và chỉ thực sự cần thiết cho những người phải sử dụng môi trường ảo cho lớp học lập trình này (theo cảnh báo ở thanh bên phía trên). Nếu chỉ có Python 3 trên máy tính, bạn chỉ cần đưa ra lệnh này để tạo một virtualenv có tên là my_env (bạn có thể chọn tên khác nếu muốn):
virtualenv my_env
Tuy nhiên, nếu có cả Python 2 và 3 trên máy tính, bạn nên cài đặt một virtualenv Python 3 mà bạn có thể thực hiện bằng -p flag như sau:
virtualenv -p python3 my_env
Nhập virtualenv mới tạo bằng cách "kích hoạt" virtualenv đó như sau:
source my_env/bin/activate
Xác nhận rằng bạn đang ở trong môi trường bằng cách quan sát dấu nhắc của trình bao hiện có tên môi trường ở phía trước, tức là
(my_env) $
Giờ đây, bạn có thể pip install mọi gói cần thiết, thực thi mã trong môi trường này, v.v. Một lợi ích khác là nếu làm hỏng hoàn toàn, gặp phải tình huống cài đặt Python bị hỏng, v.v., bạn có thể xoá toàn bộ môi trường này mà không ảnh hưởng đến phần còn lại của hệ thống.
5. Cài đặt thư viện ứng dụng Google API cho Python
Lớp học lập trình này yêu cầu sử dụng Thư viện ứng dụng API của Google cho Python, vì vậy, đây là một quy trình cài đặt đơn giản hoặc bạn có thể không cần làm gì cả.
Trước đây, bạn nên cân nhắc sử dụng Cloud Shell để thuận tiện. Bạn có thể hoàn thành toàn bộ hướng dẫn này trên trình duyệt web trong đám mây. Một lý do khác để sử dụng Cloud Shell là nhiều công cụ phát triển phổ biến và các thư viện cần thiết đã được cài đặt sẵn.
*Cài đặt thư viện ứng dụng
(không bắt buộc) Bạn có thể bỏ qua bước này nếu đang sử dụng Cloud Shell hoặc một môi trường cục bộ mà bạn đã cài đặt thư viện ứng dụng. Bạn chỉ cần thực hiện việc này nếu đang phát triển cục bộ và chưa (hoặc không chắc chắn đã) cài đặt các công cụ này. Cách dễ nhất là sử dụng pip (hoặc pip3) để cài đặt (bao gồm cả việc cập nhật chính pip nếu cần):
pip install -U pip google-api-python-client oauth2client
Xác nhận cài đặt
Lệnh này sẽ cài đặt thư viện ứng dụng cũng như mọi gói mà thư viện đó phụ thuộc vào. Cho dù bạn đang sử dụng Cloud Shell hay môi trường của riêng mình, hãy xác minh rằng thư viện ứng dụng đã được cài đặt bằng cách nhập các gói cần thiết và xác nhận rằng không có lỗi nhập (cũng như không có đầu ra):
python3 -c "import googleapiclient, httplib2, oauth2client"
Nếu sử dụng Python 2 (từ Cloud Shell), bạn sẽ nhận được cảnh báo rằng phiên bản này không còn được hỗ trợ:
******************************************************************************* Python 2 is deprecated. Upgrade to Python 3 as soon as possible. See https://cloud.google.com/python/docs/python2-sunset To suppress this warning, create an empty ~/.cloudshell/no-python-warning file. The command will automatically proceed in seconds or on any key. *******************************************************************************
Sau khi chạy thành công lệnh nhập "test" (không có lỗi/đầu ra), bạn đã sẵn sàng bắt đầu tương tác với các API của Google!
Tóm tắt
Vì đây là một lớp học lập trình giới thiệu, nên giả định là bạn mới bắt đầu sử dụng các API của Google và API Google Workspace. Nếu bạn đã có kinh nghiệm tạo dự án và tạo "mã ứng dụng OAuth" uỷ quyền cho người dùng. Nếu có, hãy tạo hoặc sử dụng lại một dự án hiện có, tạo hoặc sử dụng lại một mã ứng dụng khách OAuth hiện có và bỏ qua 2 mô-đun tiếp theo để chuyển thẳng đến phần "Hiển thị ứng dụng tệp và thư mục trên Drive" hoặc chuyển thẳng đến phần "Sử dụng devconsole nâng cao" để xem xét các bước đó mà không cần hướng dẫn nhiều.
6. Chỉ định dự án trong bảng điều khiển Cloud
Một ứng dụng sử dụng API của Google cần có một dự án. Các dự án này được quản lý trong Google Cloud Developers Console hoặc đơn giản là "devconsole". Trong lớp học lập trình này, chúng ta chỉ sử dụng API Google Drive, vì vậy, chúng ta có một đường liên kết đặc biệt (bên dưới trong Bước 1) để:
- Đưa bạn đến bảng điều khiển dành cho nhà phát triển
- Hướng dẫn bạn cách tạo một dự án mới (hoặc chọn một dự án hiện có) và
- Tự động bật API Drive
Bắt đầu nào!
- Truy cập vào console.developers.google.com/start/api?id=drive rồi đăng nhập vào Tài khoản Google của bạn.
- Nếu chưa có dự án nào, bạn sẽ thấy màn hình này để chấp nhận Điều khoản dịch vụ dành cho các API của Google:
Sau khi bạn chấp nhận các điều khoản, một dự án mới có tên "Dự án của tôi" sẽ được tạo và API Drive sẽ tự động được bật. 3. Nếu đã tạo một dự án (có thể là lớp học lập trình trước đây của bạn), thì bạn sẽ thấy màn hình này:
Khi nhấp vào trình đơn thả xuống Tạo dự án, hãy chọn một dự án hiện có hoặc thực sự tạo một dự án mới.
Sau khi bạn chọn (dự án mới hoặc dự án hiện có), API Drive sẽ tự động được bật cho bạn. 4. Bạn sẽ biết Drive API đã được bật khi thấy thông báo xác nhận này:
5. Nhấp vào Chuyển đến thông tin đăng nhập để chuyển sang bước tiếp theo.
7. *Uỷ quyền cho các yêu cầu API (uỷ quyền cho người dùng)
Bạn có thể bỏ qua phần này nếu đã tạo thông tin xác thực uỷ quyền tài khoản người dùng và nắm rõ quy trình. Phương thức này khác với phương thức uỷ quyền tài khoản dịch vụ, vì vậy, vui lòng tiếp tục thực hiện các bước bên dưới.
Giới thiệu về việc uỷ quyền (cộng với một số phương thức xác thực)
Để đưa ra yêu cầu cho các API, ứng dụng của bạn cần có quyền uỷ quyền thích hợp. Xác thực là một từ tương tự, mô tả thông tin đăng nhập – bạn xác thực chính mình khi đăng nhập vào Tài khoản Google bằng thông tin đăng nhập và mật khẩu. Sau khi xác thực, bước tiếp theo là liệu bạn (hay đúng hơn là mã của bạn) có được uỷ quyền truy cập vào dữ liệu hay không, chẳng hạn như tệp blob trên Cloud Storage hoặc tệp cá nhân của người dùng trên Google Drive.
Các API của Google hỗ trợ nhiều loại uỷ quyền, nhưng loại phổ biến nhất đối với người dùng API Google Workspace là uỷ quyền người dùng vì ứng dụng mẫu trong lớp học lập trình này truy cập vào dữ liệu thuộc về người dùng cuối. Những người dùng cuối đó phải cấp quyền cho ứng dụng của bạn truy cập vào dữ liệu của họ. Điều này có nghĩa là mã của bạn phải lấy được thông tin đăng nhập OAuth2 của tài khoản người dùng.
Để lấy thông tin đăng nhập OAuth2 cho việc uỷ quyền người dùng, hãy quay lại trình quản lý API rồi chọn thẻ "Thông tin đăng nhập" trên trình đơn điều hướng bên trái:
Khi truy cập vào trang này, bạn sẽ thấy tất cả thông tin đăng nhập của mình trong 3 phần riêng biệt:
Loại thứ nhất là khoá API, loại thứ hai là mã ứng dụng khách OAuth 2.0 và loại cuối cùng là tài khoản dịch vụ OAuth2 – chúng ta sẽ sử dụng loại ở giữa.
Tạo thông tin đăng nhập
Trên trang Thông tin xác thực, hãy nhấp vào nút + Tạo thông tin xác thực ở trên cùng. Thao tác này sẽ mở ra một hộp thoại để bạn chọn "Mã ứng dụng khách OAuth":
Trên màn hình tiếp theo, bạn có 2 việc cần làm: định cấu hình "màn hình xin phép" uỷ quyền của ứng dụng và chọn loại ứng dụng:
Nếu chưa thiết lập màn hình xin phép, bạn sẽ thấy cảnh báo trong bảng điều khiển và cần phải thiết lập ngay. (Bỏ qua các bước tiếp theo nếu bạn đã thiết lập màn hình xin phép.)
Màn hình xin phép bằng Oauth
Nhấp vào "Định cấu hình màn hình xin phép" để chọn một ứng dụng "Bên ngoài" (hoặc "Nội bộ" nếu bạn là khách hàng Google Workspace [trước đây là "Google Workspace"]):
Xin lưu ý rằng trong bài tập này, bạn chọn cái nào cũng được vì bạn không xuất bản mẫu lớp học lập trình. Hầu hết mọi người sẽ chọn "Bên ngoài" để chuyển đến một màn hình phức tạp hơn, nhưng bạn thực sự chỉ cần hoàn tất trường "Tên ứng dụng" ở trên cùng:
Lúc này, bạn chỉ cần tên ứng dụng, vì vậy hãy chọn một tên phản ánh lớp học lập trình mà bạn đang thực hiện, sau đó nhấp vào Lưu.
Tạo mã ứng dụng khách OAuth (xác thực tài khoản người dùng)
Bây giờ, hãy quay lại thẻ Thông tin đăng nhập để tạo mã ứng dụng khách OAuth2. Tại đây, bạn sẽ thấy nhiều mã ứng dụng OAuth mà bạn có thể tạo:
Chúng tôi đang phát triển một công cụ dòng lệnh, đó là Khác, vì vậy hãy chọn công cụ đó rồi nhấp vào nút Tạo. Chọn tên mã ứng dụng khách phản ánh ứng dụng mà bạn đang tạo hoặc chỉ cần lấy tên mặc định, thường là "Khách hàng khác N".
Lưu thông tin đăng nhập
- Một hộp thoại có thông tin đăng nhập mới sẽ xuất hiện; hãy nhấp vào OK để đóng
- Quay lại trang Thông tin xác thực, di chuyển xuống phần "Mã ứng dụng khách OAuth2", tìm và nhấp vào biểu tượng tải xuống
ở dưới cùng bên phải của mã ứng dụng khách mới tạo.
- Thao tác này sẽ mở một hộp thoại để lưu tệp có tên
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json, có thể là vào thư mục Tải xuống. Bạn nên rút ngắn thành một tên dễ nhớ hơn nhưclient_secret.json(đây là tên mà ứng dụng mẫu sử dụng), sau đó lưu vào thư mục nơi bạn sẽ tạo ứng dụng mẫu trong lớp học lập trình này.
Tóm tắt
Khi đã có thông tin đăng nhập, bạn có thể truy cập vào API Drive từ ứng dụng của mình. Xin lưu ý rằng mục đích của mã ứng dụng khách OAuth là để người dùng phải cấp cho ứng dụng của bạn quyền truy cập vào dữ liệu của họ trong Google Drive.
NOTE: Bạn có thể tìm hiểu thêm thông tin về cách tạo dự án, bật API và lấy thông tin đăng nhập theo cách thủ công (tức là không sử dụng "trình hướng dẫn" ở trên) sau khi kết thúc lớp học lập trình này.
8. Ứng dụng hiển thị tệp và thư mục trên Drive
Cho dù trong môi trường phát triển cục bộ hay trong Cloud Shell, trong cùng một thư mục nơi đặt tệp thông tin đăng nhập client_id.json, hãy tạo một tệp Python mới có tên là drive_list.py và thêm các dòng mã bên dưới:
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
Cấu trúc ứng dụng
Ứng dụng này có 3 phần chính:
- Nhập Python để đưa chức năng của thư viện vào
- Lấy thông tin đăng nhập của ứng dụng
- Tìm nạp và hiển thị tên tệp và thư mục cũng như MIMEtype trong Google Drive của người dùng
NOTE: Bạn có thể tìm hiểu sâu hơn về mã và xem giải thích từng dòng sau khi kết thúc lớp học lập trình này để nghiên cứu thêm.
Chạy ứng dụng
Đặt tên cho tệp này, chẳng hạn như drive_list.py. Lần đầu tiên bạn thực thi tập lệnh, tập lệnh sẽ không có quyền truy cập vào các tệp của người dùng trên Drive (của bạn). Kết quả sẽ có dạng như sau khi quá trình thực thi bị tạm dừng:
$ python3 ./drive_list.py /usr/local/lib/python3.6/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Your browser has been opened to visit: https://accounts.google.com/o/oauth2/auth?client_id=LONG-STRING.apps.googleusercontent.com&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2F&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
Từ môi trường phát triển cục bộ
Tập lệnh dòng lệnh sẽ tạm dừng khi một cửa sổ trình duyệt mở ra và cho bạn thấy hộp thoại cấp quyền OAuth2:

Đây là nơi ứng dụng yêu cầu người dùng cấp các quyền mà mã đang yêu cầu (thông qua biến SCOPES). Trong trường hợp này, đó là khả năng xem siêu dữ liệu tệp trong Google Drive của người dùng. Có, trong mã của bạn, các phạm vi quyền này xuất hiện dưới dạng URI, nhưng chúng được dịch sang ngôn ngữ do ngôn ngữ của bạn chỉ định trong cửa sổ hộp thoại quy trình OAuth2. Người dùng phải cấp quyền rõ ràng cho(các) quyền được yêu cầu, nếu không, phần "run flow" của mã sẽ đưa ra một ngoại lệ và tập lệnh sẽ không tiếp tục.
NOTE: Một số người dùng có nhiều trình duyệt và yêu cầu uỷ quyền có thể xuất hiện trên một trình duyệt không phải là trình duyệt họ muốn dùng. Nếu vậy, bạn chỉ cần sao chép toàn bộ URL từ cửa sổ trình duyệt mà bạn không muốn sử dụng rồi dán vào thanh địa chỉ của trình duyệt mà bạn muốn sử dụng.
Từ Cloud Shell
Nếu bạn không chú ý và chạy chương trình trong Cloud Shell, thì sẽ không có cửa sổ trình duyệt nào bật lên, khiến bạn bị mắc kẹt. Nhận ra thông báo chẩn đoán ở dưới cùng là dành cho bạn... thông báo này:
If your browser is on a different machine then exit and re-run this application with the command-line parameter --noauth_local_webserver
Khi chạy theo cách này, bạn sẽ nhận được đầu ra sau:
$ python3 drive_list.py --noauth_local_webserver /usr/local/lib/python3.7/site-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access storage.json: No such file or directory warnings.warn(_MISSING_FILE_MESSAGE.format(filename)) Go to the following link in your browser: https://accounts.google.com/o/oauth2/auth?client_id=xxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive.readonly.metadata&access_type=offline&response_type=code Enter verification code:
Khi làm theo hướng dẫn và chuyển đến một thẻ trình duyệt khác có URL đó, bạn sẽ có trải nghiệm gần giống với những gì được mô tả ở trên cho môi trường phát triển cục bộ. Điểm khác biệt chính là ở bước cuối cùng, bạn sẽ thấy thêm một màn hình có mã xác minh để nhập vào Cloud Shell:

Cắt và dán mã này vào cửa sổ dòng lệnh.
Tóm tắt
Sau khi người dùng nhấp vào "Cho phép" và/hoặc mã xác minh được dán vào lời nhắc, ứng dụng sẽ (tiếp tục) chạy. Do đó, bạn có thể thấy đầu ra bao gồm các tệp/thư mục trên Drive và MIMEtype của các tệp/thư mục đó. Sau đây là ví dụ từ một trong các tài khoản kiểm thử của chúng tôi:
$ python3 ./drive_list.py Travel expenses application/vnd.google-apps.spreadsheet Gmail Add-ons codelab application/vnd.google-apps.script Google Workspace Developer Intro application/vnd.google-apps.presentation Baseball Sheets application/vnd.google-apps.folder My Resume application/vnd.google-apps.document . . .
Lưu ý rằng trong các lần thực thi tiếp theo, bạn sẽ không còn được nhắc uỷ quyền nữa (vì các thư viện uỷ quyền đã lưu trữ thông tin này vào bộ nhớ đệm) và bạn sẽ chuyển thẳng đến đầu ra. Bạn có thấy thú vị khi lần đầu tiên nhìn thấy tài liệu của mình trong một thiết bị đầu cuối không? Chúng tôi nghĩ vậy!
9. Kết luận
Giờ đây, bạn đã sẵn sàng tìm hiểu thêm về các tính năng của API Drive hoặc khám phá các API khác của Google Workspace (Gmail, Google Tài liệu, Trang tính, Trang trình bày, Lịch) và các API khác của Google (Maps, Analytics, YouTube, v.v.). Chúc mừng bạn đã hoàn thành khoá học này!
Đoạn mã có trong lớp học lập trình này cũng có trong kho lưu trữ GitHub tại github.com/googlecodelabs/gsuite-apis-intro. (Chúng tôi đặt mục tiêu duy trì lớp học lập trình này đồng bộ với kho lưu trữ.) Bạn đã sẵn sàng tiếp tục chưa? Dưới đây là nhiều tài nguyên mà bạn có thể truy cập để tìm hiểu thêm về nội dung được đề cập trong lớp học lập trình này, hoặc nếu bạn muốn mở rộng kiến thức và khám phá những cách khác để truy cập vào các công nghệ của Google theo phương thức lập trình.
Như đã đề cập trước đó, nếu không phải là nhà phát triển Python thường xuyên, bạn nên làm lại ví dụ trong lớp học lập trình này bằng ngôn ngữ phát triển mà bạn yêu thích. Bạn có thể xem các thư viện ứng dụng cho những ngôn ngữ được hỗ trợ tại đây.
Nghiên cứu bổ sung
Giờ đây, bạn đã có một số kinh nghiệm sử dụng Drive API. Dưới đây là một số bài tập được đề xuất để bạn phát triển thêm các kỹ năng của mình:
- Tệp ZIP: Viết một ứng dụng sao lưu nhiều tệp lưu trữ ZIP vào Drive, giải nén các tệp đó ngay lập tức để mỗi tên tệp ZIP là tên của thư mục mà các tệp đó sẽ chuyển vào. ĐIỂM CỘNG: hỗ trợ các tệp lưu trữ ZIP đệ quy trong các tệp ZIP khác có thư mục Drive được nhúng bên trong các thư mục khác. Nếu bạn bỏ cuộc, hãy xem ứng dụng mẫu Node.js này.
- Album ảnh: Viết phần đầu của một công cụ tạo album ảnh, công cụ này sẽ tải nhiều hình ảnh lên Google Drive, sắp xếp các hình ảnh đó vào các thư mục riêng biệt theo dấu thời gian và vị trí địa lý. ĐIỂM THƯỞNG: tìm một thư viện thao tác hình ảnh nguồn mở và ghép tất cả ảnh trong mỗi thư mục để thể hiện những sự kiện mà bạn có thể đã trải qua (một chuyến đi, một bữa tối, v.v.).
- Khám phá GCP: Viết một ứng dụng kết nối Google Workspace và Google Cloud Platform (GCP) với nhau. Viết một công cụ sao lưu các tệp hình ảnh từ Google Drive sang Google Cloud Storage (GCS), một giải pháp "lưu trữ tệp trên đám mây" khác. Dù bạn tin hay không, việc sử dụng GCS sẽ đơn giản hơn Drive nhờ các thư viện ứng dụng nâng cao.
- Phân tích và ghi lại: Mở rộng giải pháp của bạn sang bước 3 bằng cách phân tích từng hình ảnh được sao lưu bằng cách truyền hình ảnh đó đến Google Cloud Vision API và nhận (3, 5, 10) "nhãn" hàng đầu về những gì API nhìn thấy trong các hình ảnh đó. Đối với mỗi hình ảnh, hãy viết một hàng trong Google Trang tính chứa thông tin phân tích từ Cloud Vision cũng như vị trí sao lưu của hình ảnh đó trên GCS. Nếu bạn bỏ cuộc, hãy xem lớp học lập trình Python này.
10. Tài nguyên khác
Tài liệu
- Tài liệu về API Google Drive (API REST và SDK/API gốc của Android)
- Tài liệu về các API Google Workspace khác
- Tài liệu về các API khác của Google
- Thư viện ứng dụng Google API
- Tài liệu về OAuth2
Video liên quan và video chung
- Tạo dự án Google API mới ( bài đăng trên blog và video)
- Xem xét mã nguyên mẫu uỷ quyền Python ( video)
- Liệt kê các tệp của bạn trong Google Drive ( video, bài đăng trên blog)
- Thư viện video của API Google Drive
- Chuỗi video Launchpad Online (tiền thân của...)
- Loạt video Google Workspace Dev Show
Tin tức và thông tin cập nhật
- Blog dành cho nhà phát triển Google Workspace
- Nhà phát triển Google Workspace Twitter (@GSuiteDevs)
- Bản tin hằng tháng dành cho nhà phát triển Google Workspace
Các lớp học lập trình khác
Cơ bản
- [Apps Script] Giới thiệu về Google Apps Script
Bậc trung
- [Apps Script] Công cụ dòng lệnh CLASP Apps Script
- [Apps Script] Tiện ích bổ sung của Gmail
- [Apps Script] Tiện ích bổ sung cho Tài liệu và Natural Language API của GCP
- [Apps Script] Khung bot Hangouts Chat
- [API REST] Công cụ báo cáo tuỳ chỉnh (API Trang tính)
- [API REST] Trình tạo trang trình bày tuỳ chỉnh cho trình phân tích BigQuery theo giấy phép Github (API Trang trình bày + BigQuery)
Nâng cao
- [API REST] Quy trình xử lý hình ảnh trên đám mây (API Drive, Cloud Storage, Cloud Vision, Trang tính)
Ứng dụng tham khảo
- Trình chuyển đổi Markdown sang Google Trang trình bày (API REST của Trang trình bày)
11. *Giải thích chi tiết về ứng dụng
Phần không bắt buộc này được dùng để tự học sau khi phiên kết thúc nhằm bổ sung mọi kiến thức còn thiếu hoặc để nghiên cứu thêm.
Nhập Python để đưa chức năng của thư viện vào
from __future__ import print_function
from googleapiclient import discovery
from httplib2 import Http
from oauth2client import file, client, tools
- Câu lệnh
importđầu tiên cho phép mã này chạy trên Python 2. Bạn có thể hoàn toàn bỏ câu lệnh này nếu chỉ sử dụng Python 3. - Một nguyên tắc về kiểu Python là tách các thư viện tiêu chuẩn và các mô-đun nhập của bên thứ ba. Đó là mục đích của dòng trống.
- Ba lần nhập tiếp theo sẽ đưa các lớp và hàm cần thiết vào từ thư viện ứng dụng Google API... tất cả đều cần thiết để chúng ta viết ứng dụng này. Tóm lại, đây là những gì chúng làm:
googleapiclienttập trung vào việc kết nối với các API của Googlehttplib2cung cấp một ứng dụng HTTP để ứng dụng sử dụngoauth2clientgiúp chúng tôi quản lý thông tin đăng nhập OAuth2
Uỷ quyền và lấy thông tin đăng nhập của ứng dụng
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
store = file.Storage('storage.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
creds = tools.run_flow(flow, store)
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
SCOPESỨng dụng là những quyền mà một ứng dụng sẽ yêu cầu người dùng chạy ứng dụng đó. Để bảo mật dữ liệu người dùng, ứng dụng không thể chạy nếu chưa được cấp quyền- Một phương pháp hay là sử dụng các quyền hạn chế nhất mà ứng dụng của bạn cần để hoạt động. Tại sao?
- Bạn có thấy phiền toái khi một ứng dụng yêu cầu nhiều quyền khi bạn cài đặt hoặc chạy ứng dụng đó không? Bạn biết gì chưa? Giờ đây, bạn đang ở phía bên kia, yêu cầu người dùng cấp tất cả các quyền này. Việc sử dụng các phạm vi hạn chế hơn sẽ giúp người dùng cảm thấy thoải mái hơn khi cài đặt ứng dụng của bạn vì bạn yêu cầu ít quyền truy cập hơn.
- Hầu hết mọi phạm vi đều trông giống như các URL dài và phạm vi siêu dữ liệu của Drive cũng không ngoại lệ.
SCOPES = 'https://www.googleapis.com/auth/drive.readonly.metadata'
- Ứng dụng cần có mã thông báo để giao tiếp với các máy chủ của Google. Các mã thông báo hợp lệ nhận được từ Google sẽ được lưu trong tệp lưu trữ mã thông báo
storage.json. Nếu không lưu các mã thông báo này, bạn sẽ phải uỷ quyền lại cho ứng dụng mỗi khi chạy ứng dụng.
store = file.Storage('storage.json')
- Trước tiên, ứng dụng này sẽ kiểm tra xem chúng ta đã có thông tin đăng nhập hợp lệ trong bộ nhớ hay chưa (xem câu lệnh có điều kiện
if).
creds = store.get()
if not creds or creds.invalid:
- Nếu bạn không có hoặc thông tin xác thực đã hết hạn, bạn phải tạo một quy trình uỷ quyền mới [thông qua
oauth2client.client.flow_from_clientsecrets()] từ mã ứng dụng khách và khoá bí mật Ứng dụng OAuth trong tệpclient_id.jsonmà bạn đã tải xuống].
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_id.json', SCOPES)
- Sau khi có một quy trình, ứng dụng của bạn cần thực thi để trình bày màn hình quyền OAuth2 cho người dùng [thông qua
oauth2client.tools.run_flow()] như mô tả và minh hoạ ở trên.
creds = tools.run_flow(flow, store)
- Khi nhấp vào Cho phép, người dùng đồng ý cho ứng dụng của bạn truy cập vào siêu dữ liệu tệp của họ trên Google Drive và các máy chủ của Google sẽ trả về mã thông báo để truy cập vào API. Chúng được trả về dưới dạng
credsvà lưu vào bộ nhớ đệm trong tệpstorage.json. - Đến đây, ứng dụng của bạn hiện có thông tin xác thực hợp lệ để thực hiện các lệnh gọi API. Việc gọi
googleapiclient.discovery.build()sẽ tạo ra một điểm cuối dịch vụ cho API mà bạn đang sử dụng. - Để sử dụng
build(), hãy truyền tên API ('drive') và phiên bản mong muốn (hiện tại là'v3'). - Tham số cuối cùng là một ứng dụng HTTP để dùng cho các lệnh gọi API được mã hoá.
DRIVE = discovery.build('drive', 'v3', http=creds.authorize(Http()))
Tìm nạp và hiển thị 100 tệp/thư mục đầu tiên trên Drive và các loại MIME)
files = DRIVE.files().list().execute().get('files', [])
for f in files:
print(f['name'], f['mimeType'])
- Dòng mã tiếp theo gọi phương thức
list()trong tập hợpfiles()cho API Drive để tạo yêu cầu. Yêu cầu này sẽ được gọi ngay lập tức bằngexecute(). MộtdictPython được trả về, từ đó chúng ta yêu cầu khoá'files'để lấy 100 tên tệp và thư mục từ Google Drive của người dùng (hoặc ít hơn nếu bạn có ít tệp). - Tại sao lại là 100? Đó là chế độ mặc định của
DRIVE.files().list(). Nếu bạn muốn thay đổi số này, chẳng hạn như chỉ còn 10 tệp hoặc 1.000 tệp, hãy thêm tham sốpageSizevào yêu cầu của bạn:DRIVE.files().list(pageSize=10). Bạn có thể xem tài liệu để biết thêm các lựa chọn. - Phần cuối cùng của tập lệnh sẽ lặp lại qua từng tệp và hiển thị tên cũng như MIMEtype của tệp.
Vậy là bạn đã viết ứng dụng đầu tiên sử dụng một API REST của Google. Xin chúc mừng! Ngoài mã nhập và mã uỷ quyền, tập lệnh này thực sự chỉ có một vài dòng mã (như bạn thấy ở trên). Hầu hết các API của Google đều hoạt động theo cách tương tự và bạn chỉ cần tạo điểm cuối dịch vụ cho từng API mà bạn muốn sử dụng.
Sử dụng nhiều API của Google trong một ứng dụng
Có, bạn chắc chắn có thể sử dụng nhiều API trong cùng một ứng dụng! Sau đây là một đoạn mã Python cho một ứng dụng sử dụng lại cùng một ứng dụng HTTP và tạo các điểm cuối dịch vụ cho 3 API của Google (có, cũng với 3 SCOPES khác nhau):
SCOPES = (
'https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/spreadsheets.readonly',
'https://www.googleapis.com/auth/presentations',
)
. . .
HTTP = creds.authorize(Http())
DRIVE = discovery.build('drive', 'v3', http=HTTP)
SHEETS = discovery.build('sheets', 'v4', http=HTTP)
SLIDES = discovery.build('slides', 'v1', http=HTTP)
Chúng tôi hình dung mã này có thể là một phần của ứng dụng tạo nhiều bản trình bày (Slides API) dựa trên dữ liệu trong bảng tính (API Trang tính) và sử dụng một mẫu trang trình bày được sao chép (API Drive) cho mỗi bản trình bày được tạo. Mặc dù không có ứng dụng như vậy, nhưng bạn có thể tạo một ứng dụng tương tự bằng cách sử dụng 2 mẫu hiện có mà nhóm Google Workspace đã tạo làm khối xây dựng:
- Thay thế văn bản và hình ảnh trong trang trình bày ( bài đăng trên blog và video) – sử dụng API Drive để sao chép một bộ trang trình bày mẫu, sau đó sử dụng Slides API để thay đổi văn bản và phần giữ chỗ hình ảnh
- Tạo trang trình bày từ dữ liệu trong bảng tính ( bài đăng trên blog và video) – đọc dữ liệu từ bảng tính (API Trang tính) và tạo trang trình bày (Slides API) dựa trên dữ liệu đó
Thách thức dành cho bạn: tạo ứng dụng đó!
12. *Cách sử dụng nâng cao của bảng điều khiển dành cho nhà phát triển
Trong phần không bắt buộc này, chúng tôi mô tả cách tạo dự án trong devconsole, bật API và lấy thông tin đăng nhập, tất cả đều không dùng trình hướng dẫn như ở trên trong lớp học lập trình. Đây là hướng dẫn dành cho người dùng có trình độ trung cấp, đủ khả năng thực hiện việc này theo cách thủ công hoặc muốn tìm hiểu cách thực hiện.
Chỉ định dự án trong bảng điều khiển Cloud
Bất cứ khi nào viết một ứng dụng bằng API của Google, bạn đều cần có một dự án. Bạn có thể sử dụng lại một dự án hiện có hoặc tạo một dự án mới. Việc này diễn ra trong Cloud Console. Một số lớp học lập trình cung cấp một đường liên kết dùng một lần (tức là giống như trình hướng dẫn thiết lập) giúp bạn bắt đầu nhanh chóng mà không cần thực hiện nhiều bước bắt buộc. Tuy nhiên, không phải tất cả các dự án đều như vậy, nên đây là hướng dẫn chung về cách tạo dự án.
Bạn có thể tạo dự án từ hầu hết các màn hình trong bảng điều khiển Cloud, miễn là bạn đã đăng nhập bằng thông tin đăng nhập Google và thấy một trình đơn thả xuống dự án ở đầu bảng điều khiển. Xin lưu ý rằng hầu hết ảnh chụp màn hình ở đây đều được lấy từ API Manager (còn gọi là Developers Console) (bạn có thể dễ dàng truy cập bằng cách nhấp vào "API Manager" trong trình đơn điều hướng bên trái hoặc chuyển trực tiếp trình duyệt đến console.developers.google.com.
- Nếu chưa có dự án nào, bạn có thể được chuyển đến...
- trang Trang tổng quan:
- trang Thư viện:
- hoặc một trang hoàn toàn trống:
Nếu bạn gặp phải trường hợp thứ 3 này, hãy làm mới trình duyệt để chuyển đến trang Thư viện.
- Dù bạn đang ở trang Trang tổng quan hay trang Thư viện, hãy nhấp vào bộ chọn dự án ở đầu trang:
- Tiếp theo, bạn sẽ thấy hộp thoại bộ chọn. Nhấp vào "+" ở bên phải để tạo một dự án mới:
- Sau khi bạn nhấp vào "+", trang New Project (Dự án mới) sẽ xuất hiện. Theo mặc định, tất cả tài khoản người dùng đều có 12 dự án. Trước khi tạo dự án đầu tiên, bạn phải chấp nhận Điều khoản dịch vụ của API Google:
Sau khi bạn thực hiện việc này, các câu hỏi về việc chào mời qua email và Điều khoản dịch vụ sẽ không xuất hiện khi bạn tạo các dự án sau này:
5. Nếu đã tạo ít nhất một dự án trước đây, sau khi đăng nhập, bạn sẽ được chuyển đến trang tổng quan của dự án gần đây nhất mà bạn đã thực hiện. Từ đó, hãy tạo một dự án mới như khi bạn chọn Chọn một dự án > +. 6. Sau khi tạo dự án mới, bạn sẽ quay lại trang Trang tổng quan:
Giờ đây, bạn đã tạo thành công một dự án và sẵn sàng chuyển sang bước tiếp theo bằng cách chọn các API mà bạn muốn sử dụng cho dự án của mình.
Bật API của Google
Bạn phải bật API của Google trước khi có thể bắt đầu sử dụng. Ví dụ bên dưới cho thấy những việc bạn cần làm để bật Cloud Vision API. Trong lớp học lập trình này, bạn có thể sử dụng một hoặc nhiều API và nên làm theo các bước tương tự để bật các API đó trước khi sử dụng.
Từ Cloud Shell
Khi dùng Cloud Shell, bạn có thể bật API bằng lệnh sau:
gcloud services enable vision.googleapis.com
Trên Cloud Console
Bạn cũng có thể bật Vision API trong Trình quản lý API. Trên Cloud Console, hãy chuyển đến Trình quản lý API rồi chọn "Thư viện".
Trong thanh tìm kiếm, hãy bắt đầu nhập "vision", sau đó chọn Vision API khi thấy. Khi bạn nhập, nội dung có thể trông như sau:
Chọn Cloud Vision API để nhận hộp thoại mà bạn thấy bên dưới, sau đó nhấp vào nút "Bật":
Chi phí
Mặc dù bạn có thể sử dụng nhiều API của Google mà không mất phí, nhưng việc sử dụng GCP (các sản phẩm và API) không miễn phí. Khi bật Vision API (như mô tả ở trên), bạn có thể được yêu cầu cung cấp một tài khoản thanh toán đang hoạt động. Người dùng nên tham khảo thông tin về giá của Vision API trước khi bật. Xin lưu ý rằng một số sản phẩm của Google Cloud Platform (GCP) có gói"Luôn miễn phí" mà bạn phải vượt quá hạn mức thì mới phải trả phí. Đối với mục đích của lớp học lập trình, mỗi lệnh gọi đến Vision API đều được tính vào bậc miễn phí đó. Vì vậy, miễn là bạn không vượt quá hạn mức tổng thể (trong mỗi tháng), bạn sẽ không phải trả bất kỳ khoản phí nào.
Một số API của Google, tức là Google Workspace có mức sử dụng được tính theo gói thuê bao hằng tháng, nên bạn không phải trả phí trực tiếp khi sử dụng các API của Gmail, Google Drive, Lịch, Tài liệu, Trang tính và Trang trình bày. Các sản phẩm của Google được tính phí theo cách khác nhau, vì vậy, hãy nhớ tham khảo tài liệu về API của bạn để biết thông tin đó.
Tóm tắt
Trong lớp học lập trình này, bạn chỉ cần bật API Google Drive. Vì vậy, hãy làm theo hướng dẫn ở trên và tìm "Drive". Tiếp tục sau khi bạn bật tính năng này.
Uỷ quyền cho các yêu cầu API (uỷ quyền cho người dùng)
Giới thiệu về việc uỷ quyền (cộng với một số phương thức xác thực)
Để đưa ra yêu cầu cho các API, ứng dụng của bạn cần có quyền uỷ quyền thích hợp. Xác thực là một từ tương tự, mô tả thông tin đăng nhập – bạn xác thực chính mình khi đăng nhập vào Tài khoản Google bằng thông tin đăng nhập và mật khẩu. Sau khi xác thực, bước tiếp theo là liệu bạn (hay đúng hơn là mã của bạn) có được uỷ quyền truy cập vào dữ liệu hay không, chẳng hạn như tệp blob trên Cloud Storage hoặc tệp cá nhân của người dùng trên Google Drive.
Các API của Google hỗ trợ nhiều loại uỷ quyền, nhưng loại phổ biến nhất đối với người dùng API Google Workspace là uỷ quyền người dùng vì ứng dụng mẫu trong lớp học lập trình này truy cập vào dữ liệu thuộc về người dùng cuối. Những người dùng cuối đó phải cấp quyền cho ứng dụng của bạn truy cập vào dữ liệu của họ. Điều này có nghĩa là mã của bạn phải lấy được thông tin đăng nhập OAuth2 của tài khoản người dùng.
Để lấy thông tin đăng nhập OAuth2 cho việc uỷ quyền người dùng, hãy quay lại trình quản lý API rồi chọn thẻ "Thông tin đăng nhập" trên trình đơn điều hướng bên trái:
Khi truy cập vào trang này, bạn sẽ thấy tất cả thông tin đăng nhập của mình trong 3 phần riêng biệt:
Loại thứ nhất là khoá API, loại thứ hai là mã ứng dụng khách OAuth 2.0 và loại cuối cùng là tài khoản dịch vụ OAuth2 – chúng ta sẽ sử dụng loại ở giữa.
Tạo thông tin đăng nhập
Trên trang Thông tin xác thực, hãy nhấp vào nút + Tạo thông tin xác thực ở trên cùng. Thao tác này sẽ mở ra một hộp thoại để bạn chọn "Mã ứng dụng khách OAuth":
Trên màn hình tiếp theo, bạn có 2 việc cần làm: định cấu hình "màn hình xin phép" uỷ quyền của ứng dụng và chọn loại ứng dụng:
Nếu chưa thiết lập màn hình xin phép, bạn sẽ thấy cảnh báo trong bảng điều khiển và cần phải thiết lập ngay. (Bỏ qua các bước tiếp theo nếu bạn đã thiết lập màn hình xin phép.)
Màn hình xin phép bằng Oauth
Nhấp vào "Định cấu hình màn hình xin phép" để chọn một ứng dụng "Bên ngoài" (hoặc "Nội bộ" nếu bạn là khách hàng của Google Workspace):
Xin lưu ý rằng trong bài tập này, bạn chọn cái nào cũng được vì bạn không xuất bản mẫu lớp học lập trình. Hầu hết mọi người sẽ chọn "Bên ngoài" để chuyển đến một màn hình phức tạp hơn, nhưng bạn thực sự chỉ cần hoàn tất trường "Tên ứng dụng" ở trên cùng:
Lúc này, bạn chỉ cần tên ứng dụng, vì vậy hãy chọn một tên phản ánh lớp học lập trình mà bạn đang thực hiện, sau đó nhấp vào Lưu.
Tạo mã ứng dụng khách OAuth (xác thực tài khoản người dùng)
Bây giờ, hãy quay lại thẻ Thông tin đăng nhập để tạo mã ứng dụng khách OAuth2. Tại đây, bạn sẽ thấy nhiều mã ứng dụng OAuth mà bạn có thể tạo:
Chúng tôi đang phát triển một công cụ dòng lệnh, đó là Khác, vì vậy hãy chọn công cụ đó rồi nhấp vào nút Tạo. Chọn tên mã ứng dụng khách phản ánh ứng dụng mà bạn đang tạo hoặc chỉ cần lấy tên mặc định, thường là "Khách hàng khác N".
Lưu thông tin đăng nhập
- Một hộp thoại có thông tin đăng nhập mới sẽ xuất hiện; hãy nhấp vào OK để đóng
- Quay lại trang Thông tin xác thực, di chuyển xuống phần "Mã ứng dụng khách OAuth2", tìm và nhấp vào biểu tượng tải xuống
ở dưới cùng bên phải của mã ứng dụng khách mới tạo.
- Thao tác này sẽ mở một hộp thoại để lưu tệp có tên
client_secret-LONG-HASH-STRING.apps.googleusercontent.com.json, có thể là vào thư mục Tải xuống. Bạn nên rút ngắn thành một tên dễ nhớ hơn nhưclient_secret.json(đây là tên mà ứng dụng mẫu sử dụng), sau đó lưu vào thư mục nơi bạn sẽ tạo ứng dụng mẫu trong lớp học lập trình này.