Giới hạn tốc độ trên API Đồ thị

Giới hạn tốc độ xác định giới hạn về số lệnh gọi API có thể thực hiện trong một khoảng thời gian cụ thể. Giới hạn tốc độ được đặt ra cho từng ứng dụng.

Các ứng dụng thường xuyên vượt quá giới hạn tốc độ hoặc vượt quá nhiều so với giới hạn có thể bị vô hiệu hóa.

Bạn chỉ gặp phải giới hạn tốc độ trong API Đồ thị của Facebook trong các trường hợp hiếm. Tài liệu này mô tả các giới hạn đó là gì và cách xử lý chúng.

Có hai loại giới hạn tốc độ chính mà ứng dụng gặp phải: giới hạn tốc độ cấp ứng dụng và giới hạn tốc độ cấp trang.

Giới hạn tốc độ cấp ứng dụng

Các giới hạn này áp dụng cho lệnh gọi được thực hiện bằng bất kỳ mã truy cập nào không phải mã truy cập trang.

Mọi lệnh gọi API từ ứng dụng được thực hiện sau khi đã vượt quá giới hạn tốc độ đều bị giới hạn tốc độ và sẽ không thành công với error code = 4, CodedException. Các lệnh gọi sẽ bắt đầu thành công trở lại khi mức sử dụng trong một giờ qua quay lại mức dưới giới hạn. Các giới hạn được tính dựa trên khoảng thời gian một giờ tuần tự và tỷ lệ phần trăm mức sử dụng hiện tại hiển thị trên bảng điều khiển ứng dụng.

Bảng điều khiển giới hạn tốc độ

Công cụ giới hạn tốc độ sẽ cung cấp cho bạn thông tin về mức độ giới hạn tốc độ của ứng dụng. Bạn có thể xem thông tin về các giới hạn tốc độ ảnh hưởng đến ứng dụng của mình thông qua hai đồ thị trong bảng điều khiển ứng dụng.

  • Một đồ thị cho biết mức sử dụng hiện tại ảnh hưởng đến các phản hồi cho API Đồ thị được trả về. Đây là diễn giải bằng hình ảnh cho giá trị tiêu đề được trả về trong các yêu cầu API Đồ thị.
Đồ thị cho một ứng dụng chạm tới giới hạn tốc độ
  • Đồ thị thứ hai hiển thị giới hạn tốc độ trước đây. Bạn có thể chọn hiển thị dữ liệu trong 24 giờ qua hoặc trong 7 ngày qua. Bạn có thể nhấp vào bất kỳ mẫu nào trong đồ thị lịch sử này để xem thêm chi tiết về mức sử dụng, bao gồm cả số liệu chia nhỏ theo phương thức. Không phải tất cả ứng dụng đều có dữ liệu lịch sử vì sự xuất hiện của dữ liệu này tùy thuộc vào số lượng lệnh gọi. Các ứng dụng có số lượng lệnh gọi nhiều hơn sẽ có nhiều khả năng có dữ liệu lịch sử hơn.
Đồ thị lịch sử cho ứng dụng vượt quá giới hạn tốc độ trong 24 giờ qua

Giới hạn

Tổng số lệnh gọi mà ứng dụng của bạn có thể thực hiện mỗi giờ là 200 nhân với số người dùng. Đây không phải là giới hạn cho mỗi người dùng; bất kỳ người dùng nào cũng có thể thực hiện nhiều hơn 200 lệnh gọi mỗi giờ, miễn là tổng số lệnh gọi của tất cả người dùng không vượt quá giới hạn tối đa cho ứng dụng. Ví dụ: nếu ứng dụng của bạn có 100 người dùng, thì ứng dụng có thể thực hiện 20.000 lệnh gọi mỗi giờ. Tuy nhiên, top 10 người dùng tích cực nhất có thể thực hiện 19.000 lệnh gọi trong tổng số các lệnh gọi đó.

Khi ứng dụng của bạn bị giới hạn tốc độ, tất cả các lệnh gọi của ứng dụng đó đều bị giới hạn chứ không chỉ lệnh gọi của một người dùng cụ thể.

Số người dùng ứng dụng được tính bằng số người dùng hoạt động hàng ngày và số lần đăng nhập mới trong ngày. Trong trường hợp có các giai đoạn chậm trễ trong mức sử dụng hàng ngày, thì người dùng hoạt động hàng tuần hay thậm chí là người dùng hoạt động hàng tháng sẽ được dùng để tính số người dùng ứng dụng. Các ứng dụng có mức tương tác hàng ngày cao sẽ có giới hạn tốc độ cao hơn các ứng dụng có mức tương tác hàng ngày thấp, bất kể số lượt cài đặt ứng dụng thực tế là bao nhiêu.

Cảnh báo:

  • Không phải lệnh gọi API nào cũng tuân theo giới hạn tốc độ, vì vậy số lệnh gọi bạn thực hiện có thể không khớp với những gì bạn nhìn thấy trong công cụ giới hạn tốc độ.
  • Facebook cũng giới hạn tốc độ lệnh gọi dựa trên thời gian CPU đã sử dụng và tổng thời gian. Các điểm cuối đòi hỏi phải xử lý nhiều có thể khiến cho ứng dụng của bạn chạm các giới hạn này, mặc dù vẫn ở dưới giới hạn số lượng lệnh gọi. Các ứng dụng hiếm khi chạm tới giới hạn tổng thời gian và thời gian CPU, ngoại trừ các điểm cuối chuyên biệt. Bạn có thể nhìn thấy thông tin về các điểm cuối đang dùng nhiều thời gian CPU hoặc tổng thời gian trong đồ thị lịch sử, nếu có.
  • API Thông tin chi tiết về quảng cáoAPI Tiếp thị có thể sử dụng một nhóm giới hạn tốc độ khác. Vui lòng xem tài liệu về Giới hạn tốc độ API Tiếp thị tại https://developers.facebook.com/docs/marketing-api/api-rate-limiting để biết thêm thông tin về API Tiếp thị.

Đề xuất

Cách tránh giới hạn tốc độ:

  • Trải đều truy vấn giữa hai khoảng thời gian để tránh gửi lưu lượng truy cập tăng vọt.
  • Sử dụng bộ lọc để giới hạn kích thước phản hồi dữ liệu và tránh các lệnh gọi yêu cầu dữ liệu chồng chéo.
  • Sử dụng tiêu đề giới hạn tốc độ để chủ động cân bằng số lượng lệnh gọi.

Tiêu đề giới hạn tốc độ

Tất cả phản hồi cho lệnh gọi được thực hiện với API Đồ thị đều bao gồm tiêu đề HTTP X-App-Usage. Tiêu đề này chứa tỷ lệ phần trăm sử dụng ứng dụng hiện tại của bạn. Tỷ lệ phần trăm này bằng với mức sử dụng được hiển thị cho bạn trên đồ thị giới hạn tốc độ. Sử dụng số liệu này để chủ động cân bằng số lượng lệnh gọi nhằm tránh bị giới hạn tốc độ.

Tiêu đề giới hạn tốc độ là một chuỗi có định dạng JSON như sau:

{
  "call_count"    : x, 
  "total_time"    : y, 
  "total_cputime" : z
}

Giá trị của x, y và z là các số nguyên biểu thị giá trị phần trăm cho từng số liệu. Khi bất kỳ số liệu nào vượt quá 100, ứng dụng sẽ bị giới hạn tốc độ.

Giới hạn tốc độ cấp trang

Các giới hạn này áp dụng cho lệnh gọi được thực hiện bằng mã truy cập trang. Ứng dụng sẽ nhận được mã lỗi 32 nếu bạn đạt tới các giới hạn này.

Bài viết trên blog tại https://developers.facebook.com/blog/post/2016/06/16/page-level-rate-limits/ cung cấp giải thích chi tiết về giới hạn tốc độ cấp trang.

Bảng điều khiển giới hạn tốc độ

Đối với mỗi trang có mã truy cập được ứng dụng sử dụng để thực hiện lệnh gọi, bạn có thể xem biểu đồ giới hạn tốc độ cho trang đó.

Giới hạn

Giới hạn tốc độ được áp dụng cho mỗi trang chứ không phải ứng dụng. Công cụ giới hạn tốc độ sẽ cung cấp cho bạn thông tin về số ứng dụng sử dụng mã truy cập của trang đó và mức độ giới hạn tốc độ của trang. Nhấp vào bất kỳ mẫu nào để biết thông tin chi tiết hơn về các loại sử dụng.

Số người tương tác hàng ngày sử dụng trang là số người khác nhau đã tương tác với trang trong khoảng thời gian 24 giờ. Tương tác với trang bao gồm lần nhấp vào trang hoặc nội dung trang.

Số người dùng tương tác trong 24 giờ trước được dùng để tính giới hạn tốc độ cho khoảng thời gian 24 giờ hiện tại.

Tổng cộng 4800 lệnh gọi trên mỗi người dùng tương tác hàng ngày có thể được thực hiện thay cho trang trong 24 giờ. Ví dụ: nếu trang có 100 người dùng tương tác hàng ngày, thì 480.000 lệnh gọi có thể được thực hiện thay cho trang trong khoảng thời gian 24 giờ. Khoảng thời gian 24 giờ này là một cơ chế cửa sổ trượt được cập nhật vài phút một lần. Giới hạn tốc độ là giới hạn trên mỗi trang, vì vậy một ứng dụng có thể thực hiện 400.000 lệnh gọi và ứng dụng khác có thể thực hiện 80.000 lệnh gọi. Nếu trang bị giới hạn tốc độ, thì chỉ lệnh gọi từ ứng dụng sử dụng mã truy cập của trang đó bị giới hạn. Điều này nghĩa là ứng dụng vẫn có thể hoạt động bình thường cho các lệnh gọi khác.

Số lệnh gọi đến trang được tính là ước tính số lệnh gọi sử dụng mã truy cập trang mỗi ngày. Trang có nhiều lệnh gọi mỗi ngày hơn có thể có giới hạn tốc độ chính xác hơn so với trang có ít lệnh gọi mỗi ngày hơn. Trang có rất ít lệnh gọi mỗi ngày có thể có các vấn đề về giới hạn tốc độ.

Cảnh báo:

  • Không phải lệnh gọi API nào cũng tuân theo giới hạn tốc độ, vì vậy số lệnh gọi bạn thực hiện có thể không khớp với những gì bạn nhìn thấy trong công cụ giới hạn tốc độ.
  • Facebook cũng giới hạn tốc độ lệnh gọi dựa trên thời gian CPU đã sử dụng và tổng thời gian. Nhấp vào đồ thị trong công cụ giới hạn tốc độ trên bảng điều khiển của bạn để biết thông tin chi tiết.
  • API Thông tin chi tiết về quảng cáoAPI Tiếp thị có thể sử dụng một nhóm giới hạn tốc độ khác. Vui lòng xem tài liệu về Giới hạn tốc độ API Tiếp thị để biết thêm thông tin về API Tiếp thị.

Đề xuất

Sau khi trang bị giới hạn tốc độ, người gọi sẽ nhận được lỗi cho lệnh gọi tiếp theo với error code = 32, CodedException. Có thể mất tối đa một giờ để yêu cầu tới trang đó được chấp nhận lại.

Cách tránh giới hạn tốc độ:

  • Trải đều truy vấn giữa hai khoảng thời gian để tránh gửi lưu lượng truy cập tăng vọt.
  • Sử dụng bộ lọc để giới hạn kích thước phản hồi dữ liệu và tránh các lệnh gọi yêu cầu dữ liệu chồng chéo.
  • Sử dụng tiêu đề giới hạn tốc độ để chủ động cân bằng số lượng lệnh gọi.

Tiêu đề giới hạn tốc độ

Nếu sắp thực hiện đủ lệnh gọi thay cho trang để hệ thống xem xét về giới hạn tốc độ, chúng tôi sẽ trả về tiêu đề HTTP X-Page-Usage. Tiêu đề này chứa tỷ lệ phần trăm sử dụng trang hiện tại. Nếu thực hiện lệnh gọi bằng mã truy cập của trang, bạn sẽ chỉ nhận được giá trị X-Page-Usage cho trang đó. Tỷ lệ phần trăm này bằng với mức sử dụng được hiển thị trên đồ thị giới hạn tốc độ cho trang đó. Sử dụng số liệu này để chủ động cân bằng số lượng lệnh gọi nhằm tránh bị giới hạn tốc độ.

Tiêu đề giới hạn tốc độ là một chuỗi có định dạng JSON như sau:

{
  "call_count"    : x, 
  "total_time"    : y, 
  "total_cputime" : z
}

Giá trị của x, y và z là các số nguyên biểu thị giá trị phần trăm cho từng số liệu. Khi bất kỳ số liệu nào vượt quá 100, ứng dụng sẽ bị giới hạn tốc độ.

Giới hạn tốc độ cấp tài khoản

Các giới hạn này áp dụng cho lệnh gọi được thực hiện bằng mã truy cập người dùng. Ứng dụng của bạn sẽ nhận được mã lỗi 17 nếu đạt giới hạn này. Điều này xảy ra khi một tài khoản người dùng cụ thể thực hiện quá nhiều lệnh gọi đến API.

Lưu ý:

Điều này có thể bao gồm các lệnh gọi của người dùng được thực hiện qua nhiều ứng dụng chứ không chỉ của bạn.

Khi người dùng bị giới hạn về tốc độ, các lệnh gọi API từ người dùng sẽ bị hạn chế.

Cách tránh giới hạn tốc độ:

Bạn không thể làm gì để ngăn chặn điều này. Người dùng đang thực hiện quá nhiều lệnh gọi (có thể thông qua các ứng dụng khác) và do đó bị giới hạn tốc độ. Tuy nhiên, nếu điều này xảy ra với rất nhiều người dùng của một ứng dụng thì rất có thể các lệnh gọi API được thực hiện thông qua ứng dụng đó gây ra sự cố này. Trong trường hợp này, bạn nên giảm số lệnh gọi hoặc thực hiện đồng đều hơn.

Câu hỏi thường gặp

Chúng ta sẽ coi lệnh gọi API là gì?

Tất cả các lệnh gọi tính về giới hạn tốc độ chứ không phải chỉ yêu cầu API HTTPS cá nhân. Chẳng hạn, bạn có thể thực hiện lệnh gọi API đơn lẻ và chỉ định nhiều id nhưng mỗi ID sẽ tính là lệnh gọi API riêng mặc dù bạn chỉ tạo một yêu cầu API HTTPS.

Để minh họa khái niệm này, hãy xem các ví dụ dưới đây:

(Các) yêu cầu mẫu Số lệnh gọi API

GET https://graph.facebook.com/photos?id=4
GET https://graph.facebook.com/photos?id=5
GET https://graph.facebook.com/photos?id=6

3

GET https://graph.facebook.com/photos?id=4,5,6

3

Trong trường hợp bạn cần chuyển nhiều đối tượng theo ID, chúng tôi đặc biệt khuyên bạn nên sử dụng phương pháp thứ hai vì phương pháp này sẽ cải thiện hiệu suất của phản hồi API nhưng không cải thiện số lệnh gọi được thực hiện cho mục đích của giới hạn tốc độ.

Bạn cũng có thể sử dụng API Lô để tạo lô cho yêu cầu của bạn nhưng lưu ý rằng mỗi yêu cầu phụ là lệnh gọi API riêng hoặc thậm chí là nhiều lệnh gọi API trong trường hợp chỉ định nhiều id.

Nếu ứng dụng hoặc trang của bạn bị giới hạn tốc độ thì các lệnh gọi API gặp lỗi giới hạn tốc độ cũng được tính vào giới hạn tốc độ của bạn.


Ứng dụng của tôi sẽ gặp những lỗi nào?
Loại giới hạn tốc độ Tối thiểu Mã lỗi

Giới hạn tốc độ cấp ứng dụng

200 lệnh gọi/người/giờ

4

Giới hạn tốc độ cấp tài khoản

Không áp dụng

17

Giới hạn tốc độ cấp trang

4800 lệnh gọi/người/24 giờ

32

Giới hạn tốc độ cấp tùy chỉnh

Không áp dụng

613


Tôi nhìn thấy Mã lỗi 613, tôi phải làm gì?

Nếu phản hồi lỗi của bạn chứa error_subcode 1996, thì Facebook đã nhận thấy hoạt động không phù hợp trong khối lượng yêu cầu API của ứng dụng. Nếu gần đây đã thực hiện bất kỳ thay đổi nào ảnh hưởng đến số lượng yêu cầu API, bạn có thể gặp lỗi này.

Nếu bạn không nhìn thấy mã phụ, thì ứng dụng của bạn đang vượt quá giới hạn tốc độ tùy chỉnh. Vui lòng liên hệ với người quản lý đối tác để được giúp đỡ giải quyết vấn đề này.


Tôi đang xây dựng một dịch vụ trích xuất dữ liệu, tôi có cần phải lo lắng về điều gì khác không?

Nếu bạn đang xây dựng dịch vụ trích xuất dữ liệu, hãy đọc điều khoản trích xuất của chúng tôi.