Cải thiện hiệu suất

Tài liệu này đề cập đến một số kỹ thuật mà bạn có thể dùng để cải thiện hiệu suất của ứng dụng. Trong một số trường hợp, ví dụ từ các API khác hoặc API chung được sử dụng để minh hoạ các ý tưởng đã trình bày. Tuy nhiên, các khái niệm tương tự cũng có thể áp dụng cho API Android Over The Air.

Nén bằng gzip

Một cách dễ dàng và thuận tiện để giảm băng thông cần thiết cho mỗi yêu cầu là bật chức năng nén gzip. Mặc dù phương pháp này yêu cầu thêm thời gian của CPU để giải nén kết quả, nhưng việc đánh đổi với chi phí mạng thường rất đáng giá.

Để nhận được phản hồi được mã hoá bằng gzip, bạn phải làm hai việc: Đặt tiêu đề Accept-Encoding và sửa đổi tác nhân người dùng để chứa chuỗi gzip. Dưới đây là ví dụ về các tiêu đề HTTP được định dạng đúng để bật chức năng nén gzip:

Accept-Encoding: gzip
User-Agent: my program (gzip)

Làm việc với một phần tài nguyên

Một cách khác để cải thiện hiệu suất của lệnh gọi API là chỉ gửi và nhận phần dữ liệu mà bạn quan tâm. Việc này giúp ứng dụng tránh được việc chuyển, phân tích cú pháp và lưu trữ các trường không cần thiết, nhờ đó, ứng dụng có thể dùng tài nguyên bao gồm mạng, CPU và bộ nhớ một cách hiệu quả hơn.

Có hai loại yêu cầu từng phần:

  • Phản hồi một phần: Một yêu cầu mà bạn chỉ định những trường cần đưa vào phản hồi (sử dụng tham số yêu cầu fields).
  • Patch (Bản vá): Yêu cầu cập nhật trong đó bạn chỉ gửi các trường mà bạn muốn thay đổi (sử dụng động từ HTTP PATCH).

Bạn có thể xem thêm thông tin chi tiết về cách thực hiện yêu cầu một phần trong các phần sau.

Phản hồi một phần

Theo mặc định, máy chủ gửi lại bản trình bày đầy đủ của tài nguyên sau khi xử lý yêu cầu. Để đạt được hiệu suất tốt hơn, bạn có thể yêu cầu máy chủ chỉ gửi các trường bạn thực sự cần và nhận phản hồi một phần.

Để yêu cầu phản hồi một phần, hãy dùng tham số yêu cầu fields để chỉ định các trường mà bạn muốn được trả về. Bạn có thể sử dụng tham số này với bất kỳ yêu cầu nào trả về dữ liệu phản hồi.

Xin lưu ý rằng tham số fields chỉ ảnh hưởng đến dữ liệu phản hồi chứ không ảnh hưởng đến dữ liệu mà bạn cần gửi (nếu có). Để giảm lượng dữ liệu bạn gửi khi sửa đổi tài nguyên, hãy sử dụng yêu cầu bản vá.

Ví dụ:

Bản vá (cập nhật một phần)

Bạn cũng có thể tránh gửi dữ liệu không cần thiết khi sửa đổi tài nguyên. Để chỉ gửi dữ liệu đã cập nhật cho các trường cụ thể mà bạn đang thay đổi, hãy sử dụng động từ HTTP PATCH. Ngữ nghĩa của bản vá được mô tả trong tài liệu này khác (và đơn giản hơn) so với trong quá trình triển khai bản cập nhật một phần GData cũ.

Ví dụ ngắn dưới đây cho thấy cách sử dụng bản vá để giảm thiểu dữ liệu bạn cần gửi nhằm thực hiện một bản cập nhật nhỏ.

Ví dụ:

Xử lý phản hồi cho bản vá

Sau khi xử lý yêu cầu bản vá hợp lệ, API sẽ trả về một mã phản hồi HTTP 200 OK cùng với thông tin biểu thị đầy đủ về tài nguyên đã sửa đổi. Nếu API được sử dụng ETag, máy chủ sẽ cập nhật các giá trị ETag khi xử lý thành công yêu cầu bản vá, giống như với PUT.

Yêu cầu bản vá sẽ trả về toàn bộ biểu diễn tài nguyên trừ phi bạn sử dụng tham số fields để giảm lượng dữ liệu trả về.

Nếu yêu cầu bản vá dẫn đến trạng thái tài nguyên mới không hợp lệ về mặt cú pháp hoặc ngữ nghĩa, thì máy chủ sẽ trả về mã trạng thái HTTP 400 Bad Request hoặc 422 Unprocessable Entity và trạng thái tài nguyên vẫn không thay đổi. Ví dụ: nếu bạn cố gắng xoá giá trị cho trường bắt buộc, máy chủ sẽ trả về lỗi.

Ký hiệu thay thế khi động từ PATCH HTTP không được hỗ trợ

Nếu tường lửa của bạn không cho phép yêu cầu HTTP PATCH, hãy thực hiện yêu cầu HTTP POST và đặt tiêu đề ghi đè thành PATCH, như thể hiện dưới đây:

POST https://www.googleapis.com/...
X-HTTP-Method-Override: PATCH
...

Sự khác biệt giữa bản vá và bản cập nhật

Trong thực tế, khi gửi dữ liệu cho một yêu cầu cập nhật sử dụng động từ HTTP PUT, bạn chỉ cần gửi những trường bắt buộc hoặc không bắt buộc; nếu bạn gửi giá trị cho các trường do máy chủ đặt thì các trường đó sẽ bị bỏ qua. Mặc dù đây có vẻ là một cách khác để cập nhật một phần, nhưng phương pháp này có một số hạn chế. Với những bản cập nhật sử dụng động từ HTTP PUT, yêu cầu sẽ không thành công nếu bạn không cung cấp các tham số bắt buộc, đồng thời sẽ xoá dữ liệu đã đặt trước đó nếu bạn không cung cấp các tham số không bắt buộc.

Vì lý do này, nên sẽ an toàn hơn nhiều nếu bạn sử dụng bản vá. Bạn chỉ cung cấp dữ liệu cho những trường bạn muốn thay đổi; những trường bạn bỏ qua sẽ không bị xoá. Ngoại lệ duy nhất của quy tắc này xảy ra với các phần tử hoặc mảng lặp lại: Nếu bạn bỏ qua tất cả các phần tử hoặc mảng đó, chúng sẽ vẫn giữ nguyên; nếu bạn cung cấp bất kỳ phần tử hoặc mảng nào trong số đó, toàn bộ tập hợp sẽ được thay thế bằng tập hợp mà bạn cung cấp.