Sử dụng API Đồ thị

Chúng tôi trình bày thông tin cơ bản về thuật ngữ và cấu trúc của API Đồ thị trong phần Tổng quan về API Đồ thị. Tài liệu này sẽ nêu chi tiết hơn về các thao tác khác nhau mà bạn có thể thực hiện với API Đồ thị.

HTTP/1.1

Tất cả hoạt động truyền dữ liệu đều tuân thủ HTTP/1.1 và tất cả các điểm cuối đều yêu cầu HTTPS. Chúng tôi cũng đã bật lệnh hướng dẫn HSTS includeSubdomains trên facebook.com, nhưng điều này không ảnh hưởng tiêu cực đến các lệnh gọi API Đồ thị.

URL lưu trữ

Hầu như tất cả các yêu cầu đều được chuyển đến URL lưu trữ graph.facebook.com. Ngoại lệ duy nhất là yêu cầu tải lên video, sử dụng graph-video.facebook.com.

Mã truy cập

Mã truy cập cho phép ứng dụng của bạn truy cập API Đồ thị. Mã này thường thực hiện hai chức năng:

  • mã cho phép ứng dụng truy cập vào thông tin của Người dùng mà không yêu cầu mật khẩu và
  • mã cho phép chúng tôi xác định ứng dụng của bạn, Người dùng đang sử dụng ứng dụng và loại dữ liệu Người dùng đã cho phép ứng dụng của bạn truy cập.

Tất cả các điểm cuối API Đồ thị đều yêu cầu một loại mã truy cập nào đó, vậy nên, mỗi khi bạn truy cập một điểm cuối, yêu cầu của bạn phải có một mã truy cập.

Cách hoạt động của mã

Mã truy cập tuân theo giao thức OAuth 2.0. OAuth 2.0 cho phép các thực thể như Người dùng hoặc Trang ủy quyền mã. Thông thường, điều này được thực hiện thông qua giao diện web. Sau khi được ủy quyền, ứng dụng có thể sử dụng các mã đó để truy cập thông tin cụ thể.

Ví dụ: ứng dụng này yêu cầu Người dùng cấp quyền truy cập vào ảnh, video và địa chỉ email của Người dùng:

Như bạn thấy, đây là một giao diện Facebook. Người dùng vừa sử dụng giao diện để đăng nhập vào tài khoản của họ. Điều đó cho phép chúng tôi xác thực Người dùng. Nếu Người dùng tiếp tục, chúng tôi sẽ đổi mã cũ (mã Ứng dụng) lấy mã mới (mã Người dùng). Sau đó, ứng dụng có thể dùng mã Người dùng mới để tạo yêu cầu API Đồ thị, nhưng chỉ có thể truy cập ảnh, video và địa chỉ email của Người dùng cụ thể đó.

Đây là một thuộc tính quan trọng của mã truy cập. ID người dùng và ứng dụng đều được mã hóa trong chính mã đó (trong số những mã khác) và chúng tôi sử dụng những ID đó để theo dõi dữ liệu nào mà Người dùng cho phép ứng dụng truy cập. Ví dụ: nếu kiểm tra mã sau khi Người dùng cho phép, bạn sẽ biết thông tin sau:

Vì mã cho phép truy cập vào dữ liệu của Người dùng và vì bất kỳ ai cũng có thể sử dụng mã nên mã cực kỳ có giá trị, do đó, hãy thận trọng khi sử dụng mã trong truy vấn của bạn. Cách dễ nhất là sử dụng Đăng nhập Facebook để xử lý mã.

Đăng nhập Facebook

OAuth 2.0 bao gồm nhiều cách chuyển hướng, lời nhắc đăng nhập và trao đổi mã, vì vậy, để giúp bạn thao tác dễ dàng hơn, chúng tôi đã tạo ra sản phẩm Đăng nhập Facebook. Đăng nhập Facebook có các chức năng và phương pháp dễ sử dụng cho tất cả các SDK của chúng tôi, khiến trải nghiệm làm việc với mã truy cập đơn giản hơn nhiều so với việc xây dựng giải pháp của riêng bạn.

Để đọc thêm về mã truy cập và Đăng nhập Facebook, hoặc để tìm hiểu cách xây dựng giải pháp của riêng bạn, hãy tham khảo tài liệu về Đăng nhập Facebook của chúng tôi.

Giá trị đọc

Nút

Hoạt động đọc gần như luôn bắt đầu với một nút. Nút là một đối tượng riêng có ID duy nhất. Ví dụ: có nhiều đối tượng nút Trang, mỗi đối tượng lại có một ID riêng và trang Coca-Cola là trang duy nhất có ID 820882001277849. Để đọc bất kỳ nút nào, bạn hãy truy vấn ID của một đối tượng cụ thể. Vì vậy, để đọc nút Trang Coca-Cola, bạn sẽ truy vấn ID của Trang này:

GET https://graph.facebook.com/820882001277849

Theo mặc định, yêu cầu này sẽ trả về các trường sau (thuộc tính nút), được định dạng bằng JSON:

{
  "name": "Coca-Cola",
  "id": "820882001277849"
}

Cạnh

Nút có cạnh thường có thể trả về bộ sưu tập các nút khác gắn liền với chúng. Để đọc một cạnh, bạn phải đưa cả ID nút và tên cạnh vào đường dẫn. Ví dụ: nút /page có cạnh /feed có thể trả về tất cả các nút Đăng trên một Trang. Dưới đây là cách bạn có thể sử dụng cạnh để lấy tất cả các bài viết trên Trang Coca-Cola:

GET https://graph.facebook.com/820882001277849/feed

Phản hồi JSON sẽ có dạng sau:

{
  "data": [
    {
      "created_time": "2017-12-08T01:08:57+0000",
      "message": "Love this puzzle. One of my four coke puzzles",
      "id": "820882001277849_1805191182846921"
    },
    {
      "created_time": "2017-12-07T20:06:14+0000",
      "message": "You need to add grape as a flavor for Coke in your freestyle machines.",
      "id": "820882001277849_1804966026202770"
    },
    {
      "created_time": "2017-12-07T01:29:12+0000",
      "message": "Plz play the old commercial’s with the polar bears. Would be nice to see them this holiday",
      "id": "820882001277849_1804168469615859"
    }
  ]
}

Lưu ý rằng phản hồi không chỉ chứa các ID của nút Đăng trong bộ sưu tập mà cả các trường created_timemessage. Đây là điều bình thường. Hầu hết các cạnh sẽ bao gồm một hoặc nhiều trường theo mặc định.

Trường

Trường là thuộc tính của nút. Khi bạn truy vấn, nút sẽ trả về một tập hợp các trường theo mặc định như ví dụ ở trên. Tuy nhiên, bạn có thể chỉ định các trường mình muốn được trả về bằng cách sử dụng thông số fields và liệt kê từng trường. Hành động này sẽ ghi đè các giá trị mặc định và chỉ trả lại những trường bạn chỉ định và ID của đối tượng (đây là giá trị luôn được trả về).

Ví dụ: Tài liệu tham khảo về nút Trang chỉ ra các trường bạn có thể yêu cầu khi đọc một nút Trang. Nếu muốn nhận các trường about, fan_countwebsite cho Trang Coca-Cola, bạn có thể thực hiện như sau:

GET https://graph.facebook.com/820882001277849
    ?fields=about,fan_count,website

Hành động này sẽ trả về phản hồi sau:

{
  "about": "Welcome to the happiest Facebook page on, um, Facebook.",
  "fan_count": 106714402,
  "website": "http://coca-cola.com",
  "id": "820882001277849"
}

Các cạnh, thường trả về bộ sưu tập các đối tượng, đồng thời trả về các trường về mỗi đối tượng trong bộ sưu tập. Giả sử bạn đã sử dụng cạnh /photos để lấy tất cả các nút Ảnh trên Trang Coca-Cola:

GET https://graph.facebook.com/820882001277849/photos

Thao tác này sẽ tạo ra một phản hồi giống như sau:

{
  "data": [
    {
      "created_time": "2016-08-23T13:12:10+0000",
      "id": "1308573619175349"
    },
    {
      "created_time": "2016-08-05T22:34:19+0000",
      "id": "1294456907253687"
    },
    {
      "created_time": "2016-04-29T16:17:02+0000",
      "id": "1228552183844160"
    }
  ]
}

Như bạn thấy, theo mặc định, cạnh /photos sẽ trả về một bộ sưu tập các ID nút Ảnh cũng như thuộc tính created_time cho mỗi ảnh. Giống như với các nút, bạn có thể sử dụng thông số fields để chỉ định các trường bạn muốn được trả về cho mỗi đối tượng đã trả về trong bộ sưu tập.

Giả sử bạn muốn có các trường height, widthlink (URL) cho mỗi nút Ảnh do cạnh /photos trả về:

GET https://graph.facebook.com/820882001277849/photos
      ?fields=height,width,link

Đây là hình thức của phản hồi:

{
  "data": [
    {
      "height": 720,
      "width": 720,
      "link": "https://www.facebook.com/CocaColaUnitedStates/photos/a.820887414610641.1073741825.820882001277849/1308573619175349/?type=3",
      "id": "1308573619175349"
    },
    {
      "height": 720,
      "width": 720,
      "link": "https://www.facebook.com/CocaColaUnitedStates/photos/a.820887414610641.1073741825.820882001277849/1294456907253687/?type=3",
      "id": "1294456907253687"
    },
    {
      "height": 180,
      "width": 180,
      "link": "https://www.facebook.com/CocaColaUnitedStates/photos/a.820887414610641.1073741825.820882001277849/1228552183844160/?type=3",
      "id": "1228552183844160"
    }
  ]
}

Lưu ý rằng bạn cũng có thể chỉ định cạnh bằng thông số fields, điều này rất hữu ích khi bạn sử dụng tính năng mở rộng trường.

Mở rộng trường

Nếu bạn tình cờ thử nghiệm truy vấn GET /page/photos ở trên trong Trình khám phá API Đồ thị, bạn có thể nhận thấy rằng yêu cầu đã trả về hơn ba đối tượng và cũng phân trang các kết quả. Đây là điều phổ biến với hầu hết các cạnh. Chúng tôi sẽ sớm đề cập đến việc chuyển kết quả, nhưng bây giờ hãy nhìn vào tính năng mở rộng trường. Tính năng này giúp bạn không chỉ thực hiện các truy vấn lồng ghép mà còn giới hạnsắp xếp kết quả.

Giới hạn kết quả

Giới hạn giúp bạn kiểm soát số đối tượng được trả về trong mỗi tập hợp kết quả được phân trang. Để giới hạn kết quả, hãy thêm một đối số .limit() vào bất kỳ trường hoặc cạnh nào.

Ví dụ: thực hiện yêu cầu GET trên cạnh /feed của Trang Coca-Cola có thể trả về hàng trăm Bài viết. Bạn có thể giới hạn số lượng Bài viết được trả về cho mỗi trang kết quả bằng cách làm sau:

GET https://graph.facebook.com/820882001277849
    ?fields=feed.limit(3)

Hành động này sẽ trả về tất cả các bài viết trên Trang Coca-Cola, nhưng giới hạn số đối tượng trong mỗi trang kết quả là ba. Lưu ý rằng thay vì xác định cạnh Bảng tin trong URL đường dẫn (/page/feed), bạn chỉ định cạnh trong thông số fields (?fields=feed) để nối thêm đối số .limit(3).

Đây là kết quả truy vấn:

{
  "feed": {
    "data": [
      {
        "created_time": "2017-12-12T01:24:21+0000",
        "message": "This picture of my grandson with Santa screams Coca Cola",
        "id": "820882001277849_1809387339093972"
      },
      {
        "created_time": "2017-12-11T23:40:17+0000",
        "message": ":)",
        "id": "820882001277849_1809316002434439"
      },
      {
        "created_time": "2017-12-11T23:31:38+0000",
        "message": "Thought you might enjoy this.  My horse loves Coke!",
        "id": "820882001277849_1809310929101613"
      }
    ],
    "paging": {
      "cursors": {
        "before": "Q2c4U1pXNTBYM0YxWlhKNVgzTjBiM0o1WDJsa0R5UTRNakE0T0RJd01ERXlOemM0TkRrNkxUVXdPRE16TXpVM01EQXpNVFUwTkRRME5Ua1BER0ZA3YVY5emRHOXllVjlwWkE4ZA09ESXdPRGd5TURBeE1qYzNPRFE1WHpFNE1Ea3pPRGN6TXprd09UTTVOeklQQkhScGJXVUdXaTh2eFFFPQZDZD",
        "after": "Q2c4U1pXNTBYM0YxWlhKNVgzTjBiM0o1WDJsa0R5TTRNakE0T0RJd01ERXlOemM0TkRrNk1UTTJORE01T0RVNU1UZAzVPRGMyTnpFNE1BOE1ZAWEJwWDNOMGIzSjVYMmxrRHlBNE1qQTRPREl3TURFeU56YzRORGxmTVRnd09USXdOamsxTlRjM09EWTNOdzhFZAEdsdFpRWmFMdk9HQVE9PQZDZD"
      },
      "next": "https://graph.facebook.com/820882001277849/feed?access_token=valid_token_goes_here"
    }
  },
  "id": "820882001277849"
}

Như bạn thấy, chỉ có ba đối tượng xuất hiện trong trang kết quả được phân trang này, nhưng phản hồi bao gồm trường next và URL mà bạn có thể sử dụng để tìm nạp trang tiếp theo.

Sắp xếp kết quả

Bạn có thể sắp xếp kết quả theo thời gian tạo đối tượng. Để thực hiện việc này, hãy sử dụng đối số .order() với một trong các giá trị sau trên trường hoặc cạnh.

  • chronological - sắp xếp kết quả với đối tượng được tạo cũ nhất đứng đầu.
  • reverse_chronological - sắp xếp kết quả với đối tượng được tạo mới nhất đứng đầu.

Ví dụ: hãy lấy tất cả các Bình luận về một trong các Bài viết video của Trang Coca-Cola (1809938745705498), sắp xếp kết quả theo thứ tự thời gian (cũ nhất trước) và giới hạn số đối tượng cho mỗi kết quả được phân trang là ba:

GET https://graph.facebook.com/1809938745705498
    ?fields=comments.order(chronological).limit(3)

Một lần nữa, hãy lưu ý rằng để sử dụng một đối số trên cạnh, bạn phải chỉ định cạnh trong thông số fields. Và như bạn thấy, bạn có thể kết hợp các đối số .limit().order() trên một trường hoặc cạnh.

Đây là kết quả:

{
  "comments": {
    "data": [
      {
        "created_time": "2017-12-12T14:12:20+0000",
        "message": ":) :) :)",
        "id": "1809938745705498_1809939942372045"
      },
      {
        "created_time": "2017-12-12T14:14:03+0000",
        "message": "seasons greetings!",
        "id": "1809938745705498_1809941802371859"
      },
      {
        "created_time": "2017-12-12T14:14:11+0000",
        "message": "My bestie <3",
        "id": "1809938745705498_1809941879038518"
      }
    ],
    "paging": {
      "cursors": {
        "before": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd3T1Rrek9UZAzROVGN3TlRNNE5Eb3hOVEV6TURnM09UTTIZD",
        "after": "WTI5dGJXVnVkRjlqZAFhKemIzSTZANVGd4TURBd09UazROVFk1T0RNM05Eb3hOVEV6TURreU5qQXoZD"
      },
      "next": "https://graph.facebook.com/1809938745705498/comments?access_token=valid_token_goes_here"
    }
  },
  "id": "1809938745705498"
}

Đăng

Hầu hết các cạnh đều cho phép bạn đăng đối tượng lên bộ sưu tập trên một nút. Bạn có thể thực hiện điều này bằng cách sử dụng yêu cầu POST trên cạnh của nút. Ví dụ: bạn có thể đăng Bình luận về ảnh bằng cách sử dụng cạnh /comments của nút Ảnh:

POST https://graph.facebook.com
  /1809938745705498
    /comments
      ?message=Awesome!

Nếu thành công, hầu hết các cạnh sẽ trả về ID của đối tượng mà bạn vừa đăng, thường là sự kết hợp của ID đối tượng được đăng và một chuỗi ID mới:

{
  "id": "1809938745705498_1810399758992730"
}

Hành động đăng thường yêu cầu các quyền bổ sung, vì vậy, vui lòng xem tài liệu tham khảo của từng cạnh để xác định các quyền cạnh yêu cầu.

Mã truy cập được sử dụng để đăng đối tượng có thể ảnh hưởng đến cách xuất hiện của đối tượng. Nếu sử dụng mã truy cập Trang, đối tượng sẽ xuất hiện dưới dạng được Trang đăng, trong khi mã truy cập Người dùng sẽ khiến đối tượng xuất hiện dưới dạng được một người đăng.

Nhiều cạnh cũng hỗ trợ các tính năng nâng cao, chẳng hạn như Đọc sau khi ghi (dùng để đọc ngay một đối tượng mới đăng) và tính năng Đăng hàng loạt (dùng để kết hợp nhiều hoạt động đăng với nhau).

Cập nhật

Bạn có thể thực hiện các thao tác cập nhật trên một nút hiện có bằng cách sử dụng yêu cầu POST. Ví dụ: để cập nhật trường message trên Bình luận hiện có, bạn có thể thực hiện như sau:

POST https://graph.facebook.com
  /1809938745705498_1810399758992730
    ?message=Happy%20Holidays!

Nếu thành công, nút sẽ trả về một trường success và giá trị true:

{
  "success": true
}

Giống như các thao tác đăng, thao tác cập nhật yêu cầu các quyền bổ sung sẽ được liệt kê trong tài liệu tham khảo của mỗi nút. Và cũng giống như hầu hết các cạnh, nhiều nút hỗ trợ tính năng Đọc sau khi ghi.

Xóa

Bạn thường có thể xóa một nút bằng cách sử dụng thao tác DELETE:

DELETE https://graph.facebook.com
  /1809938745705498_1810399758992730

Nếu thành công, nút sẽ trả về một trường success và giá trị true:

{
  "success": true
}

Thông thường, bạn chỉ có thể xóa các nút mình đã tạo, nhưng hãy xem hướng dẫn tham khảo của mỗi nút để biết các yêu cầu cho thao tác xóa.

Để trợ giúp khách hàng không hỗ trợ tất cả các phương thức HTTP, bạn có thể gửi yêu cầu POST đến nút, đồng thời thêm thông số method=delete và giá trị để ghi đè phương thức HTTP:

POST https://graph.facebook.com
  /1809938745705498_1810399758992730
    ?method=delete

Chuyển kết quả theo trang

Khi bạn tạo yêu cầu API cho một nút hoặc cạnh, bạn thường không nhận được tất cả kết quả của yêu cầu đó trong một phản hồi. Điều này là do một số phản hồi có thể chứa hàng nghìn đối tượng nên hầu hết mọi phản hồi được phân trang theo mặc định.

Phân trang dựa vào con trỏ

Phân trang dựa vào con trỏ là phương pháp phân trang hiệu quả nhất và luôn được sử dụng khi có thể. Con trỏ chỉ một chuỗi ký tự ngẫu nhiên để đánh dấu mục cụ thể trong danh sách dữ liệu. Trừ khi mục này bị xóa, con trỏ sẽ luôn trỏ tới cùng một phần trong danh sách nhưng sẽ mất hiệu lực nếu một mục bị xóa. Vì vậy, ứng dụng của bạn không được lưu trữ con trỏ và giả định rằng chúng sẽ có hiệu lực trong tương lai.

Khi đọc một cạnh hỗ trợ phân trang dựa vào con trỏ, bạn sẽ nhìn thấy phản hồi JSON sau:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "cursors": {
      "after": "MTAxNTExOTQ1MjAwNzI5NDE=",
      "before": "NDMyNzQyODI3OTQw"
    },
    "previous": "https://graph.facebook.com/me/albums?limit=25&before=NDMyNzQyODI3OTQw"
    "next": "https://graph.facebook.com/me/albums?limit=25&after=MTAxNTExOTQ1MjAwNzI5NDE="
  }
}

Cạnh được phân trang dựa vào con trỏ sẽ hỗ trợ các thông số sau:

  • before : Đây là con trỏ trỏ đến phần đầu của trang dữ liệu đã được trả về.
  • after : Đây là con trỏ trỏ đến phần cuối của trang dữ liệu đã được trả về.
  • limit : Đây là số đối tượng tối đa có thể được trả về. Một truy vấn có thể trả về ít hơn giá trị limit do lọc. Không dựa vào số kết quả ít hơn giá trị limit để biết truy vấn của bạn đã đạt tới cuối danh sách dữ liệu chưa mà hãy sử dụng next như được mô tả ở trên. Ví dụ: nếu bạn đặt limit là 10 và 9 kết quả được trả về, có thể có nhiều dữ liệu hơn nhưng một mặt hàng đã bị xóa do lọc theo quyền riêng tư. Một số cạnh cũng có thể đạt giá trị limit ở mức tối đa vì các lý do hiệu suất. Trong tất cả các trường hợp, API trả về các liên kết phân trang chính xác.
  • next : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu tiếp theo. Nếu không có điểm cuối này thì đây là trang dữ liệu cuối cùng. Do cách kết hợp của phân trang với mức độ hiển thị và quyền riêng tư nên có khả năng một trang sẽ bị trống nhưng chứa liên kết phân trang 'tiếp theo'. Dừng phân trang khi liên kết 'tiếp theo' không còn xuất hiện nữa.
  • previous : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu trước đó. Nếu không có điểm cuối này thì đây là trang dữ liệu đầu tiên.

Không lưu trữ con trỏ. Con trỏ có thể nhanh chóng không hợp lệ nếu các mục được thêm hoặc xóa.

Phân trang theo thời gian

Phân trang theo thời gian được dùng để điều hướng thông qua dữ liệu kết quả bằng cách sử dụng dấu thời gian Unix trỏ tới thời điểm cụ thể trong danh sách dữ liệu.

Khi sử dụng một điểm cuối dùng phân trang theo thời gian, bạn sẽ nhìn thấy phản hồi JSON sau:

{
  "data": [
     ... Endpoint data is here
  ],
  "paging": {
    "previous": "https://graph.facebook.com/me/feed?limit=25&since=1364849754",
    "next": "https://graph.facebook.com/me/feed?limit=25&until=1364587774"
  }
}

Cạnh được phân trang theo thời gian sẽ hỗ trợ các thông số sau:

  • until : Dấu thời gian Unix hoặc giá trị dữ liệu strtotime trỏ tới phần cuối của phạm vi dữ liệu dựa theo thời gian.
  • since : Dấu thời gian Unix hoặc giá trị dữ liệu strtotime trỏ tới phần đầu của phạm vi dữ liệu dựa theo thời gian.
  • limit : Đây là số đối tượng tối đa có thể được trả về. Một truy vấn có thể trả về ít hơn giá trị limit do lọc. Không dựa vào số kết quả ít hơn giá trị limit để biết truy vấn của bạn đã đạt tới cuối danh sách dữ liệu chưa mà hãy sử dụng next như được mô tả ở trên. Ví dụ: nếu bạn đặt limit là 10 và 9 kết quả được trả về, có thể có nhiều dữ liệu hơn nhưng một mặt hàng đã bị xóa do lọc theo quyền riêng tư. Một số cạnh cũng có thể đạt giá trị limit ở mức tối đa vì các lý do hiệu suất. Trong tất cả các trường hợp, API trả về các liên kết phân trang chính xác.
  • next : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu tiếp theo.
  • previous : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu trước đó.

Để có kết quả nhất quán, hãy chỉ định cả thông số sinceuntil. Ngoài ra, bạn nên đặt khoảng chênh lệch thời gian tối đa là 6 tháng.

Phân trang dựa vào phần bù

Có thể sử dụng phân trang dựa vào phần bù khi bạn không quan tâm đến thứ tự thời gian mà chỉ muốn trả về số đối tượng cụ thể. Bạn chỉ có thể sử dụng phương pháp này nếu cạnh không hỗ trợ phân trang dựa vào con trỏ hoặc theo thời gian.

Cạnh được phân trang dựa vào phần bù sẽ hỗ trợ các thông số sau:

  • offset : Thông số này bù cho phần đầu của mỗi trang theo số được chỉ định.
  • limit : Đây là số đối tượng tối đa có thể được trả về. Một truy vấn có thể trả về ít hơn giá trị limit do lọc. Không dựa vào số kết quả ít hơn giá trị limit để biết truy vấn của bạn đã đạt tới cuối danh sách dữ liệu chưa mà hãy sử dụng next như được mô tả ở trên. Ví dụ: nếu bạn đặt limit là 10 và 9 kết quả được trả về, có thể có nhiều dữ liệu hơn nhưng một mặt hàng đã bị xóa do lọc theo quyền riêng tư. Một số cạnh cũng có thể đạt giá trị limit ở mức tối đa vì các lý do hiệu suất. Trong tất cả các trường hợp, API trả về các liên kết phân trang chính xác.
  • next : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu tiếp theo. Nếu không có điểm cuối này thì đây là trang dữ liệu cuối cùng. Do cách kết hợp của phân trang với mức độ hiển thị và quyền riêng tư nên có khả năng một trang sẽ bị trống nhưng chứa liên kết phân trang 'tiếp theo'. Dừng phân trang khi liên kết 'tiếp theo' không còn xuất hiện nữa.
  • previous : Điểm cuối API Đồ thị sẽ trả về trang dữ liệu trước đó. Nếu không có điểm cuối này thì đây là trang dữ liệu đầu tiên.

Lưu ý rằng nếu đối tượng mới được thêm vào danh sách các mục được phân trang thì nội dung của từng trang dựa vào phần bù sẽ thay đổi.

Phân trang dựa vào phần bù không được hỗ trợ cho tất cả lệnh gọi API. Để có kết quả nhất quán, chúng tôi khuyên bạn nên phân trang bằng liên kết trước/tiếp theo mà chúng tôi trả về trong phản hồi.

Đối với những đối tượng có nhiều mặt hàng bị trả về, chẳng hạn như [comments](/docs/graph-api/reference/object/comments) với số lượng lên đến hàng chục nghìn, thì bạn có thể gặp phải giới hạn trong khi phân trang. API sẽ trả về lỗi khi ứng dụng của bạn đạt đến giới hạn con trỏ.

{
  "error": {
    "message": "(#100) The After Cursor specified exceeds the max limit supported by this endpoint",
    "type": "OAuthException",
    "code": 100
  }
}