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

Tài liệu này trình bày 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, các ví dụ từ những API khác hoặc API chung sẽ được 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 áp dụng cho Android Over The Air API.

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 đối với mỗi yêu cầu là bật tính năng nén gzip. Mặc dù việc này đòi hỏi CPU mất thêm thời gian để giải nén kết quả, nhưng thường thì mức tiêu hao này cũng bù trừ với chi phí mạng.

Để nhận được phản hồi được mã hoá sau khi nén gzip, bạn phải thực hiện 2 thao tác: Thiết lập tiêu đề Accept-Encoding và sửa đổi tác nhân người dùng để chứa chuỗi gzip. Sau đây là ví dụ về các tiêu đề HTTP được định dạng đúng cách để bật tính năng nén gzip:

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

Thao tác với các tài nguyên một phầ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 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ể sử dụng các tài nguyên (bao gồm cả mạng, CPU và bộ nhớ) một cách hiệu quả hơn.

Có hai loại yêu cầu một phần:

  • 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).
  • Patch: Yêu cầu cập nhật mà bạn chỉ gửi những trường 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 đưa ra 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ộ thông tin về một tài nguyên sau khi xử lý các yêu cầu. Để đạt 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 mà bạn thực sự cần và nhận phản hồi một phần thay vì toàn bộ.

Để 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 trả về. Bạn có thể dùng tham số này với mọi yêu cầu 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 patch.

Bản vá (bản 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 mới 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 ngữ nghĩa của bản vá trong việc triển khai GData cũ của bản 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ý một yêu cầu vá hợp lệ, API sẽ trả về 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 ETag, thì máy chủ sẽ cập nhật các giá trị ETag khi xử lý thành công một yêu cầu vá, giống như khi xử lý PUT.

Yêu cầu vá sẽ trả về toàn bộ biểu thị 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ề 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ị của một trường bắt buộc, thì máy chủ sẽ trả về lỗi.

Ký hiệu thay thế khi động từ HTTP PATCH 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à đặt tiêu đề ghi đè thành PATCH, như minh hoạ bên dưới:

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

Trên 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 những trường do máy chủ đặt, thì các giá trị đó sẽ bị bỏ qua. Mặc dù có vẻ như đây là một cách khác để thực hiện bản cập nhật một phần, nhưng cách này 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 và yêu cầu 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, bạn nên sử dụng bản vá để đảm bảo an toàn hơn. 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á. Ngoại lệ duy nhất đối với quy tắc này là 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 lặp lại, thì chúng vẫn giữ nguyên; nếu bạn cung cấp bất kỳ phần tử hoặc mảng lặp lại nào, thì toàn bộ tập hợp sẽ được thay thế bằng tập hợp mà bạn cung cấp.