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

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. Ứng dụng sẽ nhận được mã lỗi 4 nếu bạn đạt tới các giới hạn này.

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

Xem biểu đồ về hoạt động giới hạn tốc độ của ứng dụng trên bảng điều khiển ứng dụng của ứng dụng.

Giới hạn

Giới hạn tốc độ được quy định cho từng ứng dụng. 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. 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.

Ứng dụng của bạn có thể thực hiện tổng cộng 200 lệnh gọi/giờ/người dùng. Ví dụ: nếu ứng dụng của bạn có 100 người dùng, điều này nghĩa là ứng dụng có thể thực hiện 20.000 lệnh gọi. Đây không phải là giới hạn trên mỗi người dùng, vì vậy một người dùng có thể thực hiện 19.000 lệnh gọi đó và người dùng khác có thể thực hiện 1.000 lệnh gọi. Giới hạn này được tính dựa trên số lệnh gọi đã thực hiện trong giờ trước.

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 trung bình cộng với số lần đăng nhập mới trong ngày dưới dạng giá trị ước tính. Ứng dụng có nhiều người dùng hơn có thể có giới hạn tốc độ chính xác hơn so với ứng dụng có ít người dùng hơn. Ứng dụng có rất ít người dùng 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. Rất khó đạt tới các giới hạn này nên đó là trường hợp cực kỳ hiếm gặp. Thông tin này được hiển thị trong ngăn chi tiết cho mỗi mẫu. 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ị 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

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ể. Khi vượt quá giới hạn tốc độ, tất cả lệnh gọi API từ ứng dụng đều bị giới hạn tốc độ và không thành công trong khoảng thời gian ngắn. Sau khi ứng dụng 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 = 4, CodedException. Có thể mất tối đa một giờ để yêu cầu của bạn đượ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 ứng dụng của bạn sắp thực hiện đủ lệnh gọi để hệ thống xem xét về giới hạn tốc độ, chúng tôi sẽ trả về 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ì?

Ứ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 trình 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.