FACEBOOK GRAPH API

Graph API là cách cơ bản để lấy ra và đưa dữ liệu vào social graph của Facebook. Đó là một API HTTP-based cấp thấp mà bạn có thể sử dụng để truy vấn dữ liệu, post status, upload các bức ảnh và hàng loạt các thao tác khác mà một ứng dụng cần phải có. Open Graph của Facebook cho phép bạn định nghĩa các object và action mới trong mạng xã hội của những người sử dụng ứng dụng của bạn, cũng như cho phép bạn tạo các instances mới của những action và object đó thông qua Graph API.

Graph API cũng là một phương tiện ngầm được sử dụng bởi iOS, Android, PHP và JavaScript SDK của Facebook. Nó được sử dụng bởi nhiều toolkit của bên thứ ba với nhiều ngôn ngữ khác. Nhiều người sử dụng những toolkit cấp cao vì chúng đã trừu tượng hoá những action phổ biến, nhưng nếu bạn muốn đọc và viết dữ liệu trên graph, bạn sẽ phải sử dụng Graph API.

Social graph cũng chính là một đồ thị trong ngôn ngữ của khoa học máy tính. Đó không đơn giản là một bảng dữ liệu. Nó là một chuỗi của các nốt liên kết với những node khác. Bạn không chỉ có thể truy vấn về các node trong graph mà bạn còn có thể truy vấn về liên kết giữa các node trong graph. Việc hiểu được lúc nào bạn cần một node và khi nào bạn cần tạo ra một mối liên hệ giữa các node là rất quan trọng. Bởi vì những mối liên kết đó cho phép bạn tạo ra các post trên timeline của mọi người, tạo post với tag địa điểm và thao tác với các bức ảnh.

Bạn cũng cần nhận thức được rằng một Facebook API khác cung cấp phương thức truy nhập vào social graph. FQL có tính năng khá tương đương với Graph API khi cung cấp một tập hợp những API tương tự và có dạng giống như giao diện kiểu SQL. Để sử dụng FQL bạn cần hiểu được những khái niệm cơ bản của Graph API vì những điểm cuối của FQL tuân theo Graph API. Vì thế tốt nhất bạn vẫn nên học cách sử dụng Graph API kể cả khi bạn thích sử dụng FQL hơn.

TẠI SAO NÊN HỌC VỀ GRAPH API

Facebook có ba thuận lợi cơ bản cho các nhà sản xuất ứng dụng:

Facebook cung cấp một bản phân phối tuyệt vời cho những người viết ứng dụng. Nếu ứng dụng của bạn là một trò chơi, nó có thể post những kết quả chơi, điểm cao lên Facebook. Ứng dụng của bạn có thể post về thời gian chạy gần đây nhất của người chơi, hay nó có thể tạo post về địa điểm. Những post đó sẽ hiện lên trên new feed của bạn bè của bạn – những người có thể sẽ sẵn sàng để dùng thử ứng dụng đó. Open Graph là một cách rất tuyệt để mọi người tìm hiểu về ứng dụng của bạn.

Social graph của Facebook giúp việc xây dựng những ứng dụng có tính gắn kết nhiều hơn trở nên dễ dàng, vì bạn có thể đưa những ngữ cảnh xã hội vào trong ứng dụng của bạn. Nhiều bạn bè giúp cho cuộc chơi thêm phần vui vẻ. Sử dụng Facebook Login làm giảm rào chắn trong việc đăng nhập của người dung vào app của bạn và nó là một mã nhận dạng có thể sử dụng ở nhiều thiết bị.

SỬ DỤNG GRAPH API

Cơ bản

Graph API được đặt tên dựa theo ý tưởng “social graph” – thông tin trong Facebook bao gồm:

  • Các node – đầu mút ( những thứ cơ bản như là User, Photo, Page, Comment)

  • Các edge – cạnh ( những mối liên kết giữa các thứ cơ bản ở trên ví dụ như các Photo của Page, hoặc một Photo của các comment )

  • Các field ( thông tin về những node ví dụ như ngày sinh của User, tên của một Page )

Graph API dựa trên HTTP do đó nó hoạt động với các ngôn ngữ có thư viện HTTP như là cURL, url lib. Bạn của thể sử dụng Graph API trực tiếp từ trình duyệt của bạn. Ví dụ request sau: http://graph.facebook.com/facebook/picture?redirect=false sẽ tương đương với

GET graph.facebook.com
/facebook/picture?
redirect=false

Hầu hết những request của Graph API đều đỏi hỏi access token mà ứng dụng của bạn có thể khởi tạo bằng cách sử dụng Facebook Login.

Graph API được cấu trúc như thế nào?

Thông thường, ban có thể đọc các API bằng cách tạo ra các HTTP GET request tới các node hoặc các edge của các node.

Hầu hết các request đều phải đi qua API ở graph.facebook.com ngoại trừ việc upload video sử dụng graph-video.facebook.com.

Các Object ID

Mỗi node có một ID duy nhất dùng để truy nhập vào nó thông qua Graph API. Format của các node hay object thường thay đổi theo thời gian và theo các ứng dụng vì thế chúng ta không đề cập tới nó ở đây.

Đây là cách bạn sử dụng ID để tạo một request tới một node:

GET graph.facebook.com
/{node-id}

hoặc tới một edge:

/GET graph.facebook.com
/{node-id}/{edge-name}

Bạn có thể gửi dữ liệu tới API bằng cách tạo HTTP POST request với các thông số tới node:

/POST graph.facebook.com
/{node-id}

hoặc edge:

/POST graph.facebook.com
/{node-id}/{edge-name}

Việc xoá thông qua API được thực hiện bởi HTTP DELETE request và việc update được thực hiện qua POST request tới những địa chỉ tương tự.

Phiên bản API

Graph API có nhiều phiên bản có thể được sử dụng để truy nhập trong mọi thời điểm. Mỗi phiên bản bao gồm một tập hợp các core field và edge operation. Và những core API này được bảo đảm sẽ có thể được sử dụng và không thay đổi trong vòng 2 năm kể từ khi được phát hành. Platform changelog https://developers.facebook.com/docs/apps/changelog có thể cho bạn biết những phiên bản nào đang có thể sử dụng được.

Những thứ bên ngoài các core API này được gọi là API mở rộng. Những API này vẫn được truy cập thông qua đường dẫn theo từng phiên bản nhưng chúng luôn có khả năng bị thay đổi hoặc bị xoá đi bất kì lúc nào phụ thuộc vào quá trình chuyển dữ liệu kéo dài 90 ngày https://developers.facebook.com/docs/apps/versions#migrations được thông báo ở trên platform roadmap. Tuy nhiên chúng có thể được bao gồm trong phiên bản API tiếp theo.

Sau đây là cách gọi tới một phiên bản cụ thể của Graph API.

Cách gọi rất đơn giản, chỉ cần điền nhận dạng phiên bản vào đằng trước của request. Ví dụ như tại đây, chúng ta gọi v1.0

/GET /v1.0/me HTTP/1.1
Host: graph.facebook.com

Cách này thực hiện được với mọi phiên bản. Đây là mẫu tổng quát:

/GET graph.facebook.com
/vn/{request-path}

trong đó n là phiên bản cần gọi. Trong changelog của facebook có một list hoàn chỉnh các phiên bản hiện hữu của API. Tài liệu tham khảo về Graph API của facebook cung cấp thông tin cho mỗi phiên bản, do đó bạn nên kiểm tra xem mình có sử dụng đúng phiên bản hay không vì mỗi phiên bản có một số edge và node khác nhau.

Sử dụng Graph API Explorer

Cách dễ dàng nhất để hiểu được Graph API là sử dụng nó với Graph API Explorer, một tool cấp thấp giúp bạn có thể sử dụng truy vấn, thêm và xoá dữ liệu. Đây là một nguồn rất tiện lợi bạn nên tham khảo khi viết ứng dụng của mình.

  1. Đi tới trang : https://developers.facebook.com/tools/explorer.

  2. Tạo một Access Token cơ bản:

Khi bạn viết ứng dụng cho mình, bạn cần tìm hiểu về access token và cách để tạo nó khi sử dụng Facebook Login, tuy nhiên bạn có thể lấy một access token rất nhanh bằng Graph API Explorer.

Hãy ấn vào nút “Get Access Token” ở phía trên bên phải của Explorer.

Trong dialog hiện ra tiếp theo, đừng check vào box nào cả, chỉ cần ấn vào nút Get Access Token màu xanh. Bạn sẽ nhìn thấy Login Dialog, ấn OK để tiếp tục.

  1. Tạo Graph API request đầu tiên của bạn:

Bây giờ bạn đã sẵn sàng để tạo request đầu tiên của mình. Chúng ta sẽ bắt đầu với một request “đọc”. Trong text field phía dưới nút dropdown GET (chúng ta sẽ gọi cái này là path field), xoá những chữ đang có và viết me.

Bây giờ hãy ấn nút Submit. Nó sẽ cần một vài giây để thực hiện, nhưng bạn nên xem toàn bộ những thông tin hiển thị ở phần trả về ở dưới. Những thứ xảy ra ở đây sẽ phụ thuộc vào phần thiết lập riêng tư trong profile của bạn, nhưng nó sẽ có ít nhất các trường cơ bản sau đây.

{
“id”: “140001874101178“,
“first_name”: “Huong”,
“gender”: “female”,
“last_name”: “Le Thu”,
“link”: “http://www.facebook.com/100001874101178“,
“locale”: “en_US”,
“name”: “Le Thu Huong”,
“timezone”: 7,
“updated_time”: “2014-08-18T14:18:11+0000″,
“verified”: true
}

Những việc bạn vừa làm tương đương với request đọc sau đây của Graph API:

/GET graph.facebook.com
/me

/me là một endpoint đặc biệt sẽ được dịch sang thành ID của người có access token đang được sử dụng.

  1. Lấy quyền truy nhập:

Tiếp theo, chúng ta sẽ thử gửi thứ gì đó lên Facebook sử dụng Graph API. Đầu tiên, ấn vào nút Get Access Token một lần nữa, lần này, chọn quyền publish_actions ở tab Extended Permissions.

Bây giờ hãy ấn vào nút Get Access Token màu xanh, và bạn sẽ lại thấy Login Diaglog một lần nữa. Ở đây bạn sẽ được hỏi về việc cho phép Graph API Explorer post lên facebook của bạn. Nếu bạn muốn chỉnh cho chỉ mình có thể xem được những post này, hãy chọn Only Me, và bạn hãy chọn đồng ý ở dialog này và ta tới bước tiếp theo.

  1. Gửi một bài Post:

Bây giờ, bạn ấn vào nút dropdown có chữ GET và chuyển nó thành POST. Gõ me/feed ở path field và ấn Add a Field.

Ở ô mới xuất hiện, chọn namemessageHello, Worldvalue. Ấn vào nút Submit, và sau một vài giây trên phần hiển thị kết quả sẽ hiện ra như sau:

{
“id”: “{new-post-id}”
}

Điều này có nghĩa là bạn vừa gửi post đầu tiên của mình thông qua Graph API ! Bạn có thể vào facebook của mình và sẽ thấy post đã ở đó.

Điều bạn vừa làm tương đương với việc gửi Graph API request sau đây:

POST graph.facebook.com
/me/feed?
message=”Hello, World.”&
access_token={your-access-token}

Sử dụng Graph API

  1. Đọc dữ liệu:

Tất cả các node và edge trong Graph API có thể đọc được bằng HTTP GET request với endpoint thích hợp. Ví dụ, nếu bạn muốn lấy thông tin về người dùng hiện tại, bạn sẽ phải tạo một request như sau:

GET /me HTTP/1.1
Host: graph.facebook.com

Hầu hết các API đều cần access token. Bạn có thể quyết định mình sẽ cần quyền nào với access token này bằng cách xem ở tài liệu tham khảo về Graph API. Bạn cũng có thể sử dụng Graph API Explorer để nhanh chóng tạo ra access token để tìm hiểu API này làm việc như thế nào.

Response bạn nhận được sẽ dựa trên node và edge bạn đang đọc, nhưng nó sẽ có dạng tổng quát như sau:

{
“fieldname”: {field-value},
…..
}
  1. Lựa chọn trường:

Mặc định, không phải tất cả các trường của node được trả về khi bạn tạo một truy vấn. Bạn có thể chọn trường ( hoặc edge ) bạn cần trả về với thông số field trong truy vấn của bạn. Điều này rất hữu dụng vì nó làm cho API nhanh và có hiệu năng tốt hơn.

Ví dụ, truy vấn sau sẽ chỉ trả về id, tên và ảnh ở profile của Ben:

GET graph.facebook.com
/bgolub?
field=id,name,picture
  1. Xem với URL:

Hầu hết các object có thể lấy được bằng cách dùng ID của chúng, tuy nhiên có một số trường hợp bạn không có ID và tất cả những gì bạn có chỉ là một URL để nhận dạng.

Bạn có thể sử dụng URL node được giới thiệu ở phiên bản 2.1 để nhận được ID của Open Graph Object URL, hoặc để tìm dữ liệu liên kết với một đường dẫn URL của App.

  1. Chỉnh sửa API request:

Một vài API endpoint có thể được sử dụng với những thông số bổ sung để chỉnh sửa request. Dưới đây là danh sách của một số modifier phổ biến có thể được sử dụng ở hầu hết các endpoint.

Tên Giải thích Kiểu dữ liệu
return_ssl_resources Sử dụng khi bạn cần một bức ảnh trả về qua một liên kết bảo mật (HTTPS) để tránh những cảnh báo ở browser. bool
locale Sử dụng khi ứng dụng của bạn cần lấy nội dung về ngôn ngữ locale
date_format Ở Graph API, kiểu datetime sẽ trả về một chuỗi kí tự kiểu ISO-8601 nhưng modifier này có thể sử dụng để đổi kiểu sang thành date. PHP, date(), string

Ngoài ra còn có các modifier khác cho việc phân trang và tự kiểm tra.

  1. Tạo ra Nested Request:

Tính năng mở rộng trường của Graph API cho phép bạn có thể đóng gói nhiều truy vấn chỉ trong một request một cách hiệu quả.

Ví dụ, bạn có thể lấy N bức ảnh đầu tiên, trong K album đầu tiên chỉ với một lần gọi. Response trả về duy trì được cấu trúc dữ liệu do đó lập trình viên sẽ không phải nối dữ liệu lại với nhau ở phía client.

Batch Request là một tính năng khác cho phép bạn tạo ra nhiều truy vấn không liên quan tới nhau chỉ với một lần request.

Đây là dạng tổng quát của request với trường mở rộng:

GET graph.facebook.com
/{node-id}?
fields=<first-level>{<second-level>}

<first-level> ở đây có thể là một hoặc nhiều trường hoặc edge từ node cha ( phân cách bởi dấu phẩy ). <second-level> ở đây có thể là một hoặc nhiều trường hoặc edge từ first-level node ( phân cách bởi dấu phẩy ).

Không có giới hạn nào cho số lượng của các cấp đóng gói ( nesting of level ) ở đây. Bạn có thể sử dụng một tham số .limit(n) ở mỗi trường hoặc edge để giới hạn bao nhiêu object bạn muốn lấy.

Sẽ dễ hiểu khi bạn xem một ví dụ về truy vấn lấy về nhiều nhất 5 album tạo bởi một ai đó, và 5 post cuối cùng ở feed của người đó.

GET graph.facebook.com
/me?
fields=albums.limit(5), posts.limit(5)

Chúng ta có thể mở rộng truy vấn này hơn một chút cho mỗi album object, và cũng lấy về hai bức ảnh đầu tiên và những người được tag vào ảnh:

GET graph.facebook.com
/me?
fields=albums.limit(5){name, photos.limit(2)}, posts.limit(5)

Bây giờ chúng ta có thể mở rộng nó một lần nữa bằng cách lấy thêm tên của mỗi bức ảnh, URL và những người được tag.

GET graph.facebook.com
/me?
fields=albums.limit(5){name, photos.limit(2){name, picture, tags.limit(2)}}, posts.limit(5)

Từ đây ta có thể thấy cách mà trường mở rộng xử lý với các node, edge và trường để trả về những dữ liệu thực sự phức tạp trong một request.

  1. Kết quả trả về theo trang:

Khi tạo một API request tới một node hoặc edge, thông thường bạn sẽ không lấy được hết tất cả các kết quả với chỉ một reponse. Đó là bởi vì có những reponse bao gồm hàng nghìn object, và chúng sẽ mặc định được phân trang.

  1. Phân trang theo con trỏ:

Phân trang theo con trỏ (cursor) là cách hiệu quả nhất và nên luôn được sử dụng nếu có thể. Một con trỏ là một chuỗi kí tự ngẫu nhiên và dẫn tới một item hoặc một danh sách dữ liệu cụ thể. Trừ khi item này bị xoá đi, con trỏ luôn luôn trỏ về cùng một phần của danh sách, nhưng nó sẽ trở nên vô dụng nếu item này bị xoá. Vì vậy, ứng dụng của bạn không nên lưu trữ những con trỏ quá cũ.

Khi đọc một edge có hỗ trợ phân trang con trỏ, bạn sẽ thấy response kiểu JSON như 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=”
}
}

Một edge có phân trang con trở sẽ hỗ trợ những thông số sau:

  • before: con trỏ này trỏ tới đoạn đầu của trang dữ liệu đã được trả về.

  • after: con trỏ này trỏ tới đoạn cuối của trang dữ liệu đã được trả về.

  • limit: là giới hạn của số lượng những object đơn được trả về ở mỗi trang. Chú ý rằng đây là giới hạn trên, nếu không đủ số object ở phần dữ liệu còn lại, thì số lượng object ít hơn giới hạn trên sẽ được trả về.

  • next: trỏ tới trang tiếp theo của dữ liệu. Nếu không có thông số này thì trang hiện tại chính là trang cuối cùng.

  • previous: trỏ tới trang trước của dữ liệu. Nếu không có thông số này thì trang hiện tại là trang đầu tiên.

Chú ý: Con trỏ không thể được lưu trong một thời gian dài. Nó chỉ dùng để phân trang trong một thời kì ngắn hạn.

Ngoài ra còn có 2 kiểu phân trang khác đó là : phân trang theo thời gian, phân trang theo offset ( phần dịch ).

  1. Tạo nhiều request:

Phiên bản chuẩn của Graph API được thiết kế để có thể dễ dàng lấy dữ liệu của một object đơn và để tìm kiếm những sư liên kết giữa các object. Nó cũng bao gồm một khả năng ( trong mức giới hạn ) để lấy dữ liệu của vài object cùng một lúc.

Nếu ứng dụng của bạn cần khả năng truy nhập một lượng lớn dữ liệu với một lần gọi – hoặc bạn cần thiết lập thay đổi một vài object cùng một lúc, việc tạo một batch request ( request nhóm ) sẽ có hiệu năng cao hơn là bạn gọi nhiều HTTP request đơn.

Để kích hoạt nó, Graph API hỗ trợ một số các hàm, bao gồm xem nhiều ID, và nhóm ( gộp ) request.

  1. Publishing :

Hầu hết các node ở Graph API có những edge mà có thể post lên đó ( như là /{user-id}/feed hoặc là /{album-id}/photos). Tất cả các publish của Graph API có thể hoàn thành với một HTTP POST request tới edge thích hợp và cùng với các thông số cần thiết đi kèm theo. Ví dụ, nếu bạn muốn post lên tường của ai đó, bạn sẽ tạo một HTTP POST request như sau:

POST graph.facebook.com
/{user-id}/feed?
message={message}&
access_token={access-token}

Tất cả các request pushlish đều cần đi kèm với một access token. Có một số lượng lớn các edge có thể publish lên được.

Bạn có thể publish nhiều post cùng một lúc với Batch Request.

10.Cập nhật:

Tất cả các Graph API cập nhật được hoàn thành với một HTTP POST request tới node thích hợp với thông số thích hợp:

POST graph.facebook.com
/{node-id}?
{update-field}={new-value}&
access_token={access-token}

Tất cả những request cập nhật đều cần đi kèm với access token với permission cần thiết để publish tới endpoint đó.

  1. Xoá:

Bạn có thể xoá node từ graph bằng cách dùng HTTP DELETE request tới chúng:

DELETE graph.facebook.com
/{node-id}?
access_token=…

Nói một cách tổng quát, chỉ những nội dung được tạo bởi một ứng dụng mới có thể bị xoá bởi ứng dụng đó.

Để hỗ trợ những client không sử dụng được tất cả các loại phương thức HTTP, bạn có thể gửi POST request tới endpoint với một trường bổ sung là method=delete để ghi đè lên phương thức HTTP. Ví dụ, bạn có thể xoá comment bằng cách dùng request sau đây:

POST graph.facebook.com
/{comment-id}?
method=delete
  1. Tìm kiếm:

Bạn có thể tìm kiếm nhiều public (công khai) object trong social graph với /search endpoint. Cấu trúc của nó như sau:

GET graph.facebook.com
/search?
q={your-query}&
[type={object-type}](#searchtypes)

Tất cả các truy vấn tìm kiếm đều yêu cầu đi kèm một access token. Kiểu của access token sẽ tuỳ thuộc vào kiểu search của bạn.

  • Tìm kiếm trên các Page và Place object cần một app access token.

  • Tất cả những endpoint khác cần một user access token.

  1. Xử lý lỗi:

Request gửi tới Graph API có thể trả về một số các loại response lỗi, và có một vài chiến lược phục hồi đơn giản.

  1. Nhận Error Code:

Đây là một lỗi thường gặp với một API request thất bại:

{
“error”: {
“message”: “Message describing the error”,
“type”: “OAuthException”,
“code”: 190,
“error_subcode”: 460,
“error_user_title”: “A title”,
“error_user_msg”: “A message”
}
}
  • message : giải thích về lỗi

  • code: mã lỗi

  • error_subcode: dùng để giải thích rõ ràng hơn về lỗi

  • error_user_msg: khi gặp nó, bạn nên đưa trực tiếp lỗi này cho người dùng. Nó sẽ được dịch chính xác cho từng ngôn ngữ đi kèm API request.

  • error_user_title: nếu bạn cho hiện ra một error dialog, đây sẽ là tiêu đề của dialog. Nó cũng sẽ được dịch chính xác theo ngôn ngữ đi kèm API request.

Tổng quan về Facebook Query Language (FQL)

Facebook Query Language hay là FQL cho phép bạn sử dụng một giao diện kiểu SQL để truy vấn dữ liệu trong Graph API. Nó cung cấp những tính năng cao cấp không có trong Graph API.

Ví dụ:

Chạy truy vấn: SELECT uid2 FROM friend WHERE uid1=me()

Sẽ tương đương với

GET /fql?q=SELECT+uid2+FROM+friend+WHERE+uid1=me()&access_token=…

  1. Đọc dữ liệu:

Bạn có thể tạo một HTTP GET request tới /fql?q=query với query ở đây là một câu fql đơn hoặc là một từ điển mã hoá JSON của các truy vấn.

  1. Truy vấn:

Truy vấn sẽ có dạng SELECT [fields] FROM [table] WHERE [conditions]. Không giống như SQL, mệnh đề FROM của FQL chỉ có thể chứa một bảng duy nhất. Bạn có thể sử dụng từ khoá IN trong SELECT hoặc mệnh đề WHERE để gọi truy vấn con, nhưng các truy vấn con không thể lấy các biến ở giới hạn truy vấn cha.

FQL có thể làm các phép toán đơn giản, phép logic cơ bản như AND hoặc NOT, và dùng mệnh đề ORDER BY và LIMIT. ORDER BY chi có thể chưa một bảng duy nhất.

Với những truy vấn có uid, bạn có thể dùng me() để trả về dữ liệu của người dùng đã login.

Ví dụ: SELECT name FROM user WHERE uid = me()

Các hàm khác được hỗ trợ như : now(), strlen(), substr()strpos().

Đây là một ví dụ về truy vấn con lấy tất cả các thông tin người dùng đối với người dùng đang hoạt động và các bạn bè.

SELECT uid, name, pic_square FROM user WHERE uid = me()
OR uid IN (SELECT uid2 FROM friend WHERE uid1 = me())
  1. Đa truy vấn:

Đánh giá một chuỗi các truy vấn FQL trong một lần gọi và trả về dữ liệu trong một lần duy nhất.

Phương pháp này dùng từ điển mã hoá JSON để gọi các truy vấn mà trong đó mỗi truy vấn có cú pháp giống như một truy vấn đơn. Tuy nhiên phương pháp này cho phép nhiều truy vấn phức tạp được tạo ra. Bạn có thể lấy dữ liệu từ một truy vấn và sử dụng nó trong một truy vấn khác trong cùng một lần gọi. Mệnh đề WHERE là optional ( tuỳ chọn ) trong truy vấn ở sau, vì những dữ liệu cần thiết đã được lấy về sẵn rồi. Để tham chiếu kết quả của một truy vấn tới một truy vấn khác trong cùng một lần gọi, bạn chỉ định tên của nó ở trong mệnh đề FROM, có dấu # ở đằng trước.

Ví dụ, bạn muốn lấy dữ liệu về một người dùng có mặt tại một sự kiện. Thông thường, bạn phải gọi 2 truy vấn, đợi truy vấn thứ nhất kết thúc để lấy dữ liệu rồi mới gọi truy vấn tiếp theo được do dữ liệu để gọi truy vấn thứ hai có trong kết quả của truy vấn thứ nhất. Tuy nhiên với fql.multiquery, bạn có thể gọi chúng cùng một lúc và lấy được tất cả dữ liệu bạn cần, với hiệu năng tốt hơn là gọi một chuỗi các truy vấn sql. Đầu tiên, bạn cầu lấy user ID và trạng thái RSVP của mỗi người có mặt, như vậy bạn tạo truy vấn thứ nhất – query1 giống như sau:

“query1”:”SELECT uid, rsvp_status FROM event_member WHERE eid=12345678”

Sau đó, để lấy dữ liệu profile của mỗi người có mặt ( tên, URL, ảnh ), bạn tạo truy vấn thứ hai – query2, cái mà tham chiếu dữ liệu từ kết quả của query1. Bạn tạo query 2 như sau:

“query2”:”SELECT name, url, pic FROM profile WHERE id IN (SELECT uid FROM “query1)”