Hỏi về request API

Chào mọi người, mình có câu hỏi là giả sử đang diễn ra quá trình request một API chứa lượng lớn dữ liệu mất 10s mà đợi đến giây thứ 9 thì lỗi mạng khi đó muốn show ra được dữ liệu khi request được 1 phần trong 9s đó thì có cách nào không ạ ? Cá nhân mình hình dung ra là có thể tạo API trả về dữ liệu giống như phân trang để chia lượng dữ liệu thành từng phần nhỏ, tốc độ request nhanh hơn nhằm request từng API nhỏ một thì có ổn không ạ hay có kĩ thuật nào để request từng phần trong API dữ liệu lớn đó không ?
Và muốn nhận biết tiến độ, tốc độ request để hiện phần trăm trên thanh loading như progess view thì làm thế nào ạ ?
Mình cảm ơn ạ !

Bạn có làm chủ bên phần gửi API luôn không? Có chỉnh chọc được vào server hay không? Nếu được, không việc quái gì phải tìm cách làm cho nhỏ dữ liệu JSON hay XML gì đó trả về. Chủ yếu đừng nhét “rác” thừa thãi vào là được.

Việc cần làm là cài module Gzip và/ hoặc Brotli cho web server, chỉnh mimetype để nén file JSON => khi trả về thì đã nhỏ xuống nhiều lần. Dữ liệu JSON đó thì không thể lên đến cả chục MB được nên chuyện rớt mạng là khỏi tính đến.

2020-11-23-18-26

Minh họa trên chưa nén với Gzip hoặc Brotli, nếu nén thì giảm xuống còn chừng 35% kích thước kể trên.

Còn dữ liệu bạn quá bự, xem ra đang tiếp cận vấn đề chưa đúng. API thường chỉ để gửi dữ liệu kiểu meta data là chính, chứ còn khối dữ liệu người ta truyền kiểu khác.

4 Likes

Cảm ơn bác, trường hợp cụ thể thì e request data show trên mobile khá nhỏ nên ko cần khâu này nhưng chợt nghĩ ra và thắc mắc vấn đề này chứ chưa được gặp trên thực tế, những kiến thức này mới lạ với e nên e tìm hiểu lại ạ, còn lỗi mạng e giả dụ wifi cup điện ạ

1 Like

Bạn thử vào Google.com và rút dây mạng thử :3

1 Like

Giả sử việc API trả dữ liệu về chậm là do có quá nhiều kết quả, ví dụ như 2 triêu objects đi (chứ không phải vì server cấu hình bèo, hay cách query thông tin không tối ưu hay do code có bug về performance issue), thì cách căn bản nhất theo mình biết là giới hạn số lượng dữ lieu trả về đối với mỗi request.

Ví dụ mỗi lần cho trả về max 150 objects thôi. Bạn thử tìm hiểu “pagination” thử xem có đúng với nhu cầu của bạn không.

Mà như bài post thì mình đoán chắc là do query từ database không tối ưu, chứ ngừoi ta trả về cả trăm ngàn records chỉ trong vài giậy thôi à

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?