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

Tài liệu này bao gồm một số kỹ thuật mà bạn có thể sử 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 được 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ù điều này đòi hỏi 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 khiến việc đánh đổi bằng chi phí mạng thường rất đáng giá.

Để nhận 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ề tiêu đề HTTP được định dạng đúng cách để bật 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. Điều này giúp ứng dụng của bạn 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 để ứng dụng có thể sử 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 không hoàn chỉnh:

  • Phản hồi một phần: 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).
  • Bản vá: Yêu cầu cập nhật mà 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ề việc 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ủ sẽ gửi lại toàn bộ nội dung đại diện của một tài nguyên sau khi xử lý các yêu cầu. Để có hiệu suất tốt hơn, bạn có thể yêu cầu máy chủ chỉ gửi những 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 sử 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; tham số này 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ừ PATCH HTTP. 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 cách triển khai GData cũ của quá trình cập nhật một phần.

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

Ví dụ:

Xử lý phản hồi cho một 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 đầy đủ về tài nguyên đã sửa đổi. Nếu API sử dụng thẻ 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 vá, giống như cách thực hiện với PUT.

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

Nếu yêu cầu vá dẫn đến trạng thái tài nguyên mới không hợp lệ về 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 sẽ không thay đổi. Ví dụ: nếu bạn cố gắng xoá giá trị cho một trường bắt buộc, máy chủ sẽ trả về một 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 các yêu cầu HTTP PATCH, hãy thực hiện yêu cầu HTTP POST và thiết lập tiêu đề ghi đè thành PATCH, như minh hoạ 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 vẫn có một số hạn chế. Với các 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, việc sử dụng bản vá sẽ an toàn hơn nhiều. Bạn chỉ cung cấp dữ liệu cho những trường mà bạn muốn thay đổi; những trường mà bạn bỏ qua sẽ không bị xoá. Trường hợp ngoại lệ duy nhất đối với 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 đó, thì các phần tử hoặc mảng đó sẽ giữ nguyên; nếu bạn cung cấp bất kỳ phần tử hoặc mảng nào trong số đó, thì toàn bộ tập hợp sẽ được thay thế bằng tập hợp mà bạn cung cấp.