Hướng dẫn dành cho nhà phát triển: JavaScript

Blogger Data API cho phép các ứng dụng khách xem và cập nhật nội dung trên Blogger dưới dạng nguồn cấp dữ liệu API Dữ liệu của Google.

Ứng dụng khách của bạn có thể sử dụng Blogger Data API để tạo các bài đăng mới trên blog, chỉnh sửa hoặc xoá các bài đăng trên blog hiện có và truy vấn các bài đăng trên blog phù hợp với các tiêu chí cụ thể.

Ngoài việc cung cấp một số thông tin cơ bản về các chức năng của Blogger Data API, tài liệu này còn cung cấp ví dụ về các hoạt động tương tác cơ bản với Data API khi sử dụng thư viện ứng dụng JavaScript. Nếu bạn muốn tìm hiểu thêm về giao thức cơ bản mà thư viện sử dụng, hãy xem phần Giao thức trong hướng dẫn dành cho nhà phát triển này.

Nội dung

Đối tượng người xem

Tài liệu này dành cho các lập trình viên muốn viết ứng dụng khách JavaScript có thể tương tác với Blogger. Tài liệu này cung cấp một loạt ví dụ về các hoạt động tương tác cơ bản với Data API bằng thư viện ứng dụng JavaScript.

Để biết thông tin tham khảo về Blogger Data API, hãy xem phần Hướng dẫn tham khảo về giao thức. Tài liệu này giả định rằng bạn hiểu rõ các ý tưởng chung đằng sau giao thức API dữ liệu của Google, cũng như mô hình dữ liệu và luồng kiểm soát mà thư viện ứng dụng JavaScript sử dụng. Hướng dẫn này cũng giả định rằng bạn biết cách lập trình trong JavaScript.

Để tham khảo thông tin về các lớp và phương thức do thư viện ứng dụng cung cấp, hãy xem Tài liệu tham khảo API của thư viện ứng dụng JavaScript.

Tài liệu này được thiết kế để đọc theo thứ tự; mỗi ví dụ dựa trên các ví dụ trước đó.

Điều khoản sử dụng

Bạn đồng ý tuân thủ Điều khoản sử dụng Thư viện ứng dụng JavaScript của Google khi sử dụng thư viện ứng dụng JavaScript.

Giới thiệu về môi trường được hỗ trợ

Hiện tại, chúng tôi chỉ hỗ trợ các ứng dụng JavaScript chạy trên trang web của trình duyệt. Các trình duyệt hiện được hỗ trợ là Firefox 1.5 trở lên và Internet Explorer 6.0 trở lên.

Thư viện ứng dụng JavaScript xử lý mọi hoạt động giao tiếp với máy chủ của dịch vụ. Nếu là một nhà phát triển JS có kinh nghiệm, có thể bạn sẽ thắc mắc "Nhưng cùng một chính sách nguồn gốc thì sao?" Thư viện ứng dụng JavaScript cho phép ứng dụng của bạn gửi các yêu cầu Google Data API từ bất kỳ miền nào mà vẫn tuân thủ mô hình bảo mật của trình duyệt.

Bắt đầu

Trước khi có thể viết ứng dụng khách JavaScript, bạn cần thực hiện một số thiết lập để có được thư viện.

Tạo tài khoản Blogger

Bạn nên đăng ký một tài khoản Blogger cho mục đích thử nghiệm. Blogger sử dụng Tài khoản Google, vì vậy, nếu đã có Tài khoản Google thì bạn đã hoàn tất.

Mua thư viện

Trước khi có thể sử dụng thư viện ứng dụng, ứng dụng phải yêu cầu mã thư viện ứng dụng từ máy chủ.

Bắt đầu bằng cách sử dụng một thẻ <script> trong phần <head> của tài liệu HTML để tìm nạp trình tải Google AJAX API:

<script type="text/javascript" src="https://www.google.com/jsapi"></script>

Để có được thư viện ứng dụng Google Data API sau khi tìm nạp trình tải, hãy sử dụng dòng sau trong mã thiết lập JavaScript. Mã này phải được gọi từ phần <head> của tài liệu HTML (hoặc từ tệp JavaScript đi kèm bằng thẻ <script> trong phần <head> của tài liệu HTML):

google.load("gdata", "1.x");

Tham số thứ hai đối với google.load() là số phiên bản được yêu cầu của thư viện ứng dụng JavaScript.Sơ đồ đánh số phiên bản của chúng tôi được mô hình hoá theo giản đồ mà API Google Maps sử dụng. Dưới đây là số phiên bản có thể có và ý nghĩa của số phiên bản:

"1"
Bản sửa đổi lần thứ hai đến lần cuối của phiên bản lớn 1.
"1.x"
Bản sửa đổi mới nhất của phiên bản lớn 1.
"1.s"
Bản sửa đổi ổn định mới nhất của phiên bản lớn 1. Đôi khi, chúng tôi sẽ khai báo một phiên bản nhất định của thư viện ứng dụng là "ổn định", dựa trên phản hồi nhận được từ các nhà phát triển. Tuy nhiên, phiên bản đó có thể không có các tính năng mới nhất.
"1.0", "1.1", v.v.
Một phiên bản cụ thể của thư viện, có số bản sửa đổi lớn và nhỏ cụ thể.

Sau khi gọi google.load(), bạn phải yêu cầu trình tải đợi cho đến khi trang tải xong rồi gọi mã của bạn:

google.setOnLoadCallback(getMyBlogFeed);

Trong đó getMyBlogFeed() là một hàm mà chúng ta sẽ định nghĩa trong phần sau của tài liệu này. Hãy sử dụng phương pháp này thay vì đính kèm trình xử lý onload vào phần tử <body>.

Xác thực đến dịch vụ Blogger

Bạn có thể truy cập cả nguồn cấp dữ liệu công khai và riêng tư bằng API Dữ liệu của Blogger. Nguồn cấp dữ liệu công khai không yêu cầu xác thực nào nhưng sẽ ở chế độ chỉ đọc. Nếu bạn muốn sửa đổi blog, thì ứng dụng của bạn cần xác thực trước khi yêu cầu nguồn cấp dữ liệu riêng tư.

Thư viện ứng dụng JavaScript sử dụng hệ thống xác thực AuthSub. Để biết thêm thông tin về cách xác thực bằng Google Data API nói chung, hãy xem tài liệu về xác thực.

Xác thực proxy AuthSub

Phương thức xác thực proxy AuthSub được các ứng dụng web cần xác thực người dùng bằng Tài khoản Google. Toán tử trang web và mã ứng dụng không có quyền truy cập vào tên người dùng và mật khẩu của người dùng Blogger; thay vào đó, ứng dụng sẽ nhận được mã thông báo AuthSub đặc biệt cho phép ứng dụng hành động thay mặt một người dùng cụ thể.

Dưới đây là thông tin tổng quan ngắn gọn về những gì xảy ra trong quá trình xác thực cho ứng dụng JavaScript dựa trên nền tảng web:

  1. Ứng dụng khách sẽ gọi phương thức google.accounts.user.login() do thư viện ứng dụng cung cấp, truyền vào phương thức đó một giá trị "phạm vi" cho biết dịch vụ nào của Google sẽ sử dụng. Đối với Blogger, phạm vi là "http://www.blogger.com/feeds/".
  2. Thư viện ứng dụng sẽ gửi trình duyệt đến trang "Yêu cầu truy cập" của Google. Tại đây, người dùng có thể nhập thông tin xác thực của mình để đăng nhập vào dịch vụ.
  3. Nếu người dùng đăng nhập thành công, thì hệ thống AuthSub sẽ gửi trình duyệt trở lại URL của ứng dụng web và chuyển mã thông báo xác thực.
  4. Thư viện ứng dụng JavaScript lưu trữ mã thông báo trong một cookie và trả về quyền kiểm soát cho hàm của ứng dụng khách có tên là google.accounts.user.login().
  5. Sau đó, khi ứng dụng khách gọi các phương thức thư viện ứng dụng tương tác với Blogger, thư viện ứng dụng sẽ tự động đính kèm mã thông báo vào tất cả yêu cầu.

Lưu ý: Để thư viện ứng dụng JavaScript thực hiện các yêu cầu được xác thực của Blogger trong trình duyệt web, trang của bạn phải chứa hình ảnh được lưu trữ tại cùng một miền với trang. Đó có thể là hình ảnh bất kỳ, thậm chí là hình ảnh trong suốt một pixel, nhưng phải có hình ảnh trên trang. Nếu không muốn hình ảnh xuất hiện trên trang của mình, bạn có thể sử dụng thuộc tính style của thẻ <img> để đặt hình ảnh bên ngoài khu vực hiển thị. Ví dụ: style="position:absolute; top: -1000px;"

Dưới đây là mã ứng dụng khách xử lý việc đăng nhập. Chúng ta sẽ gọi hàm setupMyService() từ mã khác sau.

function logMeIn() {
  scope = "http://www.blogger.com/feeds/";
  var token = google.accounts.user.login(scope);
}

function setupMyService() {
  var myService =
    new google.gdata.blogger.BloggerService('exampleCo-exampleApp-1');
  logMeIn();
  return myService;
}

Lưu ý: Bạn nên cung cấp nút đăng nhập hoặc cơ chế nhập khác của người dùng để nhắc người dùng bắt đầu quy trình đăng nhập theo cách thủ công. Thay vào đó, nếu bạn gọi google.accounts.user.login() ngay sau khi tải mà không chờ tương tác của người dùng, thì nội dung đầu tiên người dùng nhìn thấy khi truy cập vào trang của bạn là trang đăng nhập của Google. Nếu người dùng quyết định không đăng nhập, thì Google sẽ không chuyển họ quay lại trang của bạn; vì vậy, theo quan điểm của người dùng, họ đã cố gắng truy cập vào trang của bạn nhưng bị gửi đi và không bao giờ gửi lại trang. Trường hợp này có thể gây nhầm lẫn và khó chịu cho người dùng. Trong mã ví dụ trong tài liệu này, chúng tôi sẽ gọi google.accounts.user.login() ngay sau khi tải để giữ cho ví dụ đơn giản, nhưng chúng tôi không khuyến khích phương pháp này cho các ứng dụng khách trong thực tế.

Lưu ý rằng bạn không phải làm gì với biến có tên token; thư viện ứng dụng sẽ theo dõi mã thông báo nên bạn không cần phải làm gì.

Lưu ý: Khi bạn tạo một đối tượng BloggerService mới, thư viện ứng dụng sẽ gọi một phương thức có tên google.gdata.client.init(). Phương thức này sẽ kiểm tra xem trình duyệt mà ứng dụng đang chạy có được hỗ trợ hay không. Nếu có lỗi thì thư viện ứng dụng sẽ cho người dùng thấy thông báo lỗi. Nếu muốn tự xử lý loại lỗi này, bạn có thể gọi google.gdata.client.init(handleInitError) một cách rõ ràng trước khi tạo dịch vụ, trong đó handleInitError() là hàm của bạn. Nếu xảy ra lỗi init, thì hàm của bạn sẽ nhận được đối tượng Lỗi chuẩn; bạn có thể làm bất cứ việc gì mình muốn với đối tượng đó.

Mã thông báo vẫn có hiệu lực cho đến khi bạn thu hồi bằng cách gọi google.accounts.user.logout():

function logMeOut() {
  google.accounts.user.logout();
}

Nếu bạn không gọi logout() thì cookie lưu trữ mã thông báo sẽ tồn tại trong 2 năm, trừ phi người dùng xoá mã đó. Cookie được lưu giữ trong các phiên của trình duyệt, do đó, người dùng có thể đóng trình duyệt, sau đó mở lại và quay lại ứng dụng khách của bạn và họ sẽ vẫn ở trạng thái đăng nhập.

Tuy nhiên, có một số trường hợp bất thường nhất định mà mã thông báo có thể trở thành không hợp lệ trong một phiên hoạt động. Nếu Blogger từ chối một mã thông báo, ứng dụng của bạn nên xử lý điều kiện lỗi bằng cách gọi logout() để xoá cookie chứa mã thông báo hiện tại, sau đó gọi lại login() để lấy mã thông báo mới và hợp lệ.

Có hai phương thức AuthSub khác mà bạn có thể thấy hữu ích trong nhiều ngữ cảnh:

  • google.accounts.user.checkLogin(scope) cho bạn biết trình duyệt hiện có mã xác thực cho phạm vi nhất định hay không.
  • google.accounts.user.getInfo() cung cấp thông tin chi tiết về mã thông báo hiện tại để dùng cho việc gỡ lỗi.

Để biết thông tin chi tiết về cách sử dụng JavaScript để tương tác với AuthSub, bao gồm cả thông tin về việc quản lý mã thông báo cũng như trên checkLogin()getInfo(), hãy xem tài liệu Sử dụng Xác thực "AuthSub" với Thư viện ứng dụng JavaScript.

Trở lại đầu trang