การใช้ API กราฟ

เราพูดถึงถึงข้อมูลพื้นฐานเกี่ยวกับศัพท์เฉพาะและโครงสร้างของ API กราฟไว้ในภาพรวม API กราฟ เอกสารฉบับนี้จะอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการต่างๆ ที่คุณใช้ API กราฟทำได้

HTTP/1.1

การถ่ายโอนข้อมูลทั้งหมดสอดคล้องกับ HTTP/1.1 และปลายทางทั้งหมดจำเป็นต้องใช้ HTTPS เราเปิดใช้งานคำสั่ง HSTS includeSubdomains ใน facebook.com ด้วยเช่นกัน แต่การดำเนินการนี้ไม่ควรส่งผลในเชิงลบกับการเรียก API กราฟของคุณ

URL โฮสต์

คำขอแทบทั้งหมดจะถูกส่งไปที่ URL โฮสต์ graph.facebook.com ยกเว้นแค่คำขอการอัพโหลดวิดีโอที่ใช้ graph-video.facebook.com เป็น URL โฮสต์

โทเค็นการเข้าถึง

โทเค็นการเข้าถึงช่วยให้แอพเข้าถึง API กราฟได้ โดยปกติแล้วโทเค็นดังกล่าวจะทำหน้าที่สองอย่าง ได้แก่

  • ช่วยให้แอพเข้าถึงข้อมูลของผู้ใช้ได้โดยไม่ต้องใช้รหัสผ่านของผู้ใช้ และ
  • ช่วยให้เราทราบแอพของคุณ ผู้ใช้ที่กำลังใช้แอพของคุณ และประเภทข้อมูลที่ผู้ใช้อนุญาตให้แอพของคุณเข้าถึงได้

ปลายทางของ API กราฟทั้งหมดจำเป็นต้องใช้โทเค็นการเข้าถึง ดังนั้น คุณจึงต้องใส่โทเค็นการเข้าถึงไว้ในคำขอทุกครั้งที่เข้าถึงปลายทาง

การทำงานของโทเค็น

โทเค็นการเข้าถึงทำงานตามโปรโตคอล OAuth 2.0 OAuth 2.0 ช่วยให้เอนทิตีอย่าง “ผู้ใช้” หรือ “เพจ” อนุญาตโทเค็นได้ โดยปกติแล้ว ขั้นตอนนี้จะดำเนินการผ่านเว็บ หลังจากที่ได้รับอนุญาตแล้ว แอพจะใช้โทเค็นเหล่านั้นเพื่อเข้าถึงข้อมูลเฉพาะได้

ตัวอย่างเช่น แอพนี้ขอให้ผู้ใช้มอบสิทธิ์การอนุญาตเพื่อเข้าถึงรูปภาพ วิดีโอ และอีเมลของผู้ใช้:

อย่างที่เห็น อินเทอร์เฟซนี้คือ Facebook ผู้ใช้เพิ่งจะใช้ Facebook ลงชื่อเข้าใช้บัญชีผู้ใช้ของตน ซึ่งช่วยให้เรายืนยันตัวตนของผู้ใช้ได้ หากผู้ใช้ดำเนินการต่อ เราจะแลกเปลี่ยนโทเค็นเก่า (โทเค็นแอพ) กับโทเค็นใหม่ (โทเค็นผู้ใช้) จากนั้น แอพจะใช้โทเค็นผู้ใช้ใหม่เพื่อส่งคำขอ API กราฟได้ แต่จะเข้าถึงได้แค่บางส่วนของรูปภาพ วิดีโอ และอีเมลของผู้ใช้เท่านั้น

นี่คือคุณลักษณะสำคัญของโทเค็นการเข้าถึง ID แอพและผู้ใช้จะถูกเข้ารหัสในโทเค็นด้วยตัวเอง (นอกเหนือจากรายการอื่นๆ) และเราจะใช้ ID เหล่านี้เพื่อติดตามว่าข้อมูลที่ผู้ใช้อนุญาตให้แอพเข้าถึงได้ ตัวอย่างเช่น หากคุณตรวจสอบโทเค็นหลังจากที่ผู้ใช้ให้สิทธิ์การอนุญาต โทเค็นจะแสดงข้อมูลนี้:

เนื่องจากโทเค็นอนุญาตให้เข้าถึงข้อมูลของผู้ใช้ และเนื่องจากทุกคนใช้งานโทเค็นได้ โทเค็นจึงมีค่าอย่างยิ่ง ดังนั้น โปรดระมัดระวังเมื่อใช้งานโทเค็นในคำขอ วิธีที่ง่ายที่สุดก็คือใช้การเข้าสู่ระบบด้วย Facebook จัดการโทเค็น

การเข้าสู่ระบบด้วย Facebook

เมื่อใช้ OAuth 2.0 คุณจะพบกับการเปลี่ยนเส้นทาง การกระตุ้นให้เข้าสู่ระบบ และการแลกเปลี่ยนโทเค็นมากมาย ดังนั้น เพื่อให้คุณใช้งานได้ง่ายขึ้น เราจึงสร้างสินค้าการเข้าสู่ระบบด้วย Facebook ขึ้นมา การเข้าสู่ระบบด้วย Facebook มีฟังก์ชั่นและวิธีการทำงานที่ใช้งานง่ายสำหรับ SDK ทั้งหมดของเรา ซึ่งทำให้การทำงานกับโทเค็นการเข้าถึงง่ายกว่าการสร้างโซลูชั่นของตัวเองขึ้นมามาก

หากต้องการอ่านข้อมูลเพิ่มเติมเกี่ยวกับโทเค็นการเข้าถึงและการเข้าสู่ระบบด้วย Facebook หรือหากต้องการศึกษาวิธีสร้างโซลูชั่นของตัวเอง โปรดอ้างอิงจากเอกสารการเข้าสู่ระบบด้วย Facebook

การอ่าน

โหนด

การอ่านกระบวนการมักจะเริ่มต้นจากโหนดแทบทุกครั้ง โหนดคืออ็อบเจ็กต์เดี่ยวที่มี ID ไม่ซ้ำกัน ตัวอย่างเช่น มีอ็อบเจ็กต์โหนดเพจอยู่หลายตัว แต่ละตัวมี ID ไม่ซ้ำกัน และเพจ Coca-Cola เป็นเพียงเพจเดียวที่มี ID เป็น 820882001277849 หากต้องการอ่านโหนด คุณจะต้องสืบค้น ID ของอ็อบเจ็กต์นั้นๆ โดยเฉพาะ ดังนั้น หากคุณต้องการอ่านโหนดเพจของ Coca-Cola คุณก็ต้องสืบค้น ID ของโหนดเพจ Coca-Cola:

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

คำขอนี้จะส่งกลับฟิลด์ต่อไปนี้ (คุณสมบัติของโหนด) ซึ่งจัดรูปแบบโดยใช้ JSON กลับมาให้ตามค่าเริ่มต้น:

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

จุดเชื่อมโยง

โหนดมีจุดเชื่อมโยงซึ่งปกติแล้วจะส่งกลับชุดโหนดอื่นๆ ที่ติดอยู่กับจุดเชื่อมโยงนั้นๆ ได้ด้วย หากต้องการอ่านจุดเชื่อมโยง คุณจะต้องใส่ทั้ง ID ของโหนดและชื่อจุดเชื่อมโยงลงไปในเส้นทาง (Path) ตัวอย่างเช่น โหนด /page มีจุดเชื่อมโยง /feed ซึ่งสามารถส่งกลับโหนดโพสต์ทั้งหมดในเพจหนึ่งได้ เนื้อหาต่อไปนี้จะแสดงวิธีใช้จุดเชื่อมโยงเพื่อรับโพสต์ทั้งหมดในเพจ Coca-Cola:

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

การตอบกลับ JSON จะมีลักษณะดังนี้:

{
  "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"
    }
  ]
}

โปรดสังเกตว่าการตอบกลับไม่ได้มีแค่ ID ของโหนดโพสต์ในชุดเท่านั้น แต่ยังมีฟิลด์ created_time และ message ด้วย ซึ่งเป็นเรื่องปกติ จุดเชื่อมโยงส่วนมากจะมีฟิลด์อย่างน้อยหนึ่งฟิลด์รวมอยู่ด้วยตามค่าเริ่มต้น

ฟิลด์

ฟิลด์คือคุณสมบัติของโหนด เมื่อคุณสืบค้นโหนด โหนดจะส่งชุดของฟิลด์ชุดหนึ่งกลับมาให้ตามค่าเริ่มต้นตามตัวอย่างที่แสดงด้านบน อย่างไรก็ตาม คุณสามารถระบุฟิลด์ที่ต้องการให้ส่งกลับได้โดยใช้พารามิเตอร์ fields และลงรายการฟิลด์แต่ละฟิลด์ การดำเนินการนี้จะเขียนทับค่าเริ่มต้นและส่งกลับเฉพาะฟิลด์ที่คุณระบุเท่านั้น รวมถึง ID ของอ็อบเจ็กต์ที่จะส่งกลับมาด้วยเสมออยู่แล้ว

ตัวอย่างเช่น ข้อมูลอ้างอิงของโหนดเพจระบุฟิลด์ที่คุณขอได้เมื่ออ่านโหนดเพจ หากคุณต้องการฟิลด์ about, fan_count และ website ของเพจ Coca-Cola คุณอาจใช้คำขอนี้ได้:

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

คำขอนี้จะส่งกลับการตอบกลับต่อไปนี้:

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

จุดเชื่อมโยงซึ่งโดยปกติแล้วจะส่งกลับชุดอ็อบเจ็กต์จะส่งกลับฟิลด์เกี่ยวกับอ็อบเจ็กต์แต่ละตัวในชุดด้วย สมมุติว่าคุณใช้จุดเชื่อมโยง /photos เพื่อรับโหนดรูปภาพทั้งหมดในเพจ Coca-Cola:

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

คำขอนี้จะสร้างการตอบกลับที่มีหน้าตาประมาณนี้:

{
  "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"
    }
  ]
}

อย่างที่เห็น จุดเชื่อมโยง /photos ตามค่าเริ่มต้นจะส่งกลับชุดของ ID ของโหนดรูปภาพรวมถึงคุณสมบัติ created_time สำหรับรูปภาพแต่ละรูป เช่นเดียวกับโหนด คุณสามารถใช้พารามิเตอร์ fields ระบุฟิลด์ที่ต้องการให้ส่งกลับสำหรับอ็อบเจ็กต์แต่ละตัวที่ส่งกลับมาในชุดได้

สมมุติว่าคุณต้องการฟิลด์ height, width และ link (URL) สำหรับโหนดรูปภาพแต่ละโหนดที่จุดเชื่อมโยง /photos ส่งกลับมา:

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

การตอบกลับจะมีลักษณะดังนี้:

{
  "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"
    }
  ]
}

โปรดทราบว่าคุณสามารถใช้พารามิเตอร์ fields ระบุจุดเชื่อมโยงได้เช่นกัน ซึ่งจะเป็นประโยชน์เมื่อคุณใช้งานการขยายฟิลด์

การขยายฟิลด์

หากคุณมีโอกาสได้ทดสอบคำขอ GET /page/photos ด้านบนใน Graph API Explorer คุณอาจสังเกตเห็นว่าคำขอดังกล่าวส่งอ็อบเจ็กต์กลับมามากกว่าสามตัวและยังแบ่งหน้าให้กับผลลัพธ์อีกด้วย ซึ่งเป็นเรื่องปกติของจุดเชื่อมโยงส่วนใหญ่ เราจะพูดถึงผลลัพธ์ที่ตัดผ่านได้ในอีกไม่ช้า แต่ตอนนี้เราจะอธิบายเรื่องการขยายช่องให้คุณฟังก่อน การขยายช่องไม่เพียงแต่ช่วยให้คุณส่งคำขอแบบซ้อนกันได้ แต่ยังช่วยจำกัดและเรียงลำดับผลลัพธ์อีกด้วย

การจำกัดผลลัพธ์

การจำกัดช่วยให้คุณควบคุมจำนวนอ็อบเจ็กต์ที่ส่งกลับมาในแต่ละชุดผลลัพธ์ที่ได้รับการแบ่งหน้าได้ หากต้องการจำกัดผลลัพธ์ ให้ใส่อาร์กิวเมนต์ .limit() ลงไปในฟิลด์หรือจุดเชื่อมโยงใดก็ได้

ตัวอย่างเช่น หากคุณส่งคำขอ GET ไปยังจุดเชื่อมโยง /feed ของเพจ Coca-Cola คุณอาจได้รับโพสต์กลับมาเป็นร้อยๆ โพสต์ คุณสามารถจำกัดจำนวนโพสต์ที่ส่งกลับมาในผลลัพธ์แต่ละหน้าได้โดยการปฏิบัติดังนี้

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

การดำเนินการนี้จะส่งกลับโพสต์ทั้งหมดในเพจ Coca-Cola แต่จะจำกัดจำนวนอ็อบเจ็กต์ในผลลัพธ์แต่ละหน้าไว้ที่สามอ็อบเจ็กต์ โปรดสังเกตว่าแทนที่จะระบุจุดเชื่อมโยงฟีดไว้ใน URL ของเส้นทาง (/page/feed) คุณระบุจุดเชื่อมโยงไว้ในพารามิเตอร์ fields (?fields=feed) แทน ซึ่งช่วยให้คุณเชื่อมอาร์กิวเมนต์ .limit(3) ได้

ผลลัพธ์ของคำขอจะเป็นแบบนี้:

{
  "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"
}

อย่างที่เห็น มีอ็อบเจ็กต์เพียงสามตัวเท่านั้นที่ปรากฏในหน้านี้ของผลลัพธ์ที่ได้รับการแบ่งหน้า แต่การตอบกลับนี้รวมฟิลด์ next และ URL ที่คุณใช้ดึงข้อมูลของหน้าถัดไปได้เอาไว้ด้วย

การเรียงลำดับผลลัพธ์

คุณสามารถเรียงลำดับผลลัพธ์ได้ตามเวลาที่สร้างอ็อบเจ็กต์ หากต้องการเรียงลำดับผลลัพธ์ ให้ใช้อาร์กิวเมนต์ .order() ที่มีค่าใดค่าหนึ่งต่อไปนี้ในฟิลด์หรือจุดเชื่อมโยง

  • chronological - เรียงลำดับผลลัพธ์โดยนำอ็อบเจ็กต์ที่เก่าที่สุดขึ้นก่อน
  • reverse_chronological - เรียงลำดับผลลัพธ์โดยนำอ็อบเจ็กต์ที่ใหม่ที่สุดขึ้นก่อน

ตัวอย่างเช่น เราจะขอความคิดเห็นทั้งหมดในโพสต์แบบวิดีโอโพสต์หนึ่งในเพจ Coca-Cola (1809938745705498) โดยเรียงลำดับผลลัพธ์แบบตามลำดับเวลา (เก่าสุดขึ้นก่อน) และจำกัดจำนวนอ็อบเจ็กต์ในผลลัพธ์ที่ได้รับการแบ่งหน้าไว้ที่สามอ็อบเจ็กต์:

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

เช่นกัน โปรดสังเกตว่าหากต้องการใช้งานอาร์กิวเมนต์ในจุดเชื่อมโยง คุณจะต้องระบุจุดเชื่อมโยงในพารามิเตอร์ fields อย่างที่เห็น คุณสามารถรวมอาร์กิวเมนต์ .limit() และ .order() ไว้ในฟิลด์หรือจุดเชื่อมโยงเดียวได้

ผลลัพธ์จะออกมาเป็นแบบนี้:

{
  "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"
}

การเผยแพร่

จุดเชื่อมโยงส่วนมากช่วยให้คุณเผยแพร่อ็อบเจ็กต์ไปยังชุดบนโหนดได้ คุณสามารถเผยแพร่ได้โดยใช้คำขอ POST ในจุดเชื่อมโยงของโหนด ตัวอย่างเช่น คุณสามารถเผยแพร่ความคิดเห็นบนรูปภาพได้โดยใช้จุดเชื่อมโยง /comments ของโหนดรูปภาพ

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

หากสำเร็จ จุดเชื่อมโยงส่วนมากจะส่งกลับ ID ของอ็อบเจ็กต์ที่คุณเพิ่งเผยแพร่ ซึ่งมักจะมี ID ที่อ็อบเจ็กต์เผยแพร่ไปและสตริง ID ใหม่อยู่รวมกัน:

{
  "id": "1809938745705498_1810399758992730"
}

โดยปกติแล้วการเผยแพร่จำเป็นต้องใช้สิทธิ์การอนุญาตเพิ่มเติม ดังนั้น โปรดอ้างอิงจากเอกสารอ้างอิงของจุดเชื่อมโยงแต่ละจุดเพื่อดูว่าแต่ละจุดต้องการสิทธิ์การอนุญาตใดบ้าง

โทเค็นการเข้าถึงที่ใช้เผยแพร่อ็อบเจ็กต์อาจส่งผลต่อหน้าตาของอ็อบเจ็กต์ โทเค็นการเข้าถึงเพจจะทำให้ดูเหมือนเพจเป็นผู้โพสต์อ็อบเจ็กต์ ในขณะที่โทเค็นการเข้าถึงของผู้ใช้จะทำให้ดูเหมือนคนเป็นผู้โพสต์อ็อบเจ็กต์

จุดเชื่อมโยงหลายจุดรองรับคุณสมบัติขั้นสูงด้วยเช่นกัน เช่น อ่าน-หลังจาก-เขียนซึ่งช่วยให้คุณอ่านอ็อบเจ็กต์ที่เพิ่งเผยแพร่ใหม่ได้ในทันที และการเผยแพร่แบบแบตช์ซึ่งช่วยให้คุณเชื่อมกระบวนการเผยแพร่หลายๆ กระบวนการเข้าไว้ด้วยกันได้

การอัพเดต

คุณสามารถดำเนินกระบวนการอัพเดตได้ในโหนดที่มีอยู่โดยใช้คำขอ POST ตัวอย่างเช่น หากคุณต้องการอัพเดตฟิลด์ message ในความคิดเห็นที่มีอยู่ คุณสามารถปฏิบัติตามนี้ได้:

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

หากสำเร็จ โหนดจะส่งกลับฟิลด์ success และค่าของ true:

{
  "success": true
}

เช่นเดียวกับกระบวนการเผยแพร่ กระบวนการอัพเดตจำเป็นต้องมีสิทธิ์การอนุญาตเพิ่มเติมซึ่งแจกแจงไว้ในเอกสารอ้างอิงของแต่ละโหนด และเช่นเดียวกับจุดเชื่อมโยงส่วนมาก โหนดหลายๆ โหนดรองรับอ่าน-หลังจาก-เขียน

การลบ

โดยปกติแล้ว คุณสามารถลบโหนดได้โดยใช้กระบวนการ DELETE:

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

หากสำเร็จ โหนดจะส่งกลับฟิลด์ success และค่าของ true:

{
  "success": true
}

โดยปกติแล้วคุณจะลบได้เฉพาะโหนดที่คุณเป็นผู้สร้างขึ้นเท่านั้น แต่ลองตรวจสอบคู่มืออ้างอิงของแต่ละโหนดดูก่อนเพื่อดูข้อกำหนดของกระบวนการลบ

หากต้องการรองรับไคลเอ็นต์ที่ไม่ได้รองรับเมธอด HTTP ทั้งหมด คุณสามารถส่งคำขอ POST ไปยังโหนดและใส่พารามิเตอร์ method=delete และค่าเพื่อเขียนทับเมธอด HTTP ดังกล่าวได้

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

การตัดขวางผลลัพธ์ที่แบ่งหน้า

เมื่อคุณสร้างคำขอ API ไปยังโหนดหรือจุดเชื่อมโยง คุณมักจะไม่ได้รับผลลัพธ์ทั้งหมดของคำขอนั้นในการตอบสนองครั้งเดียว ซึ่งเป็นเพราะการตอบสนองบางอย่างอาจประกอบด้วยอ็อบเจ็กต์เป็นจำนวนนับพัน ดังนั้นการตอบสนองส่วนใหญ่จะมีการแบ่งหน้าตามค่าเริ่มต้น

การแบ่งหน้าโดยอิงจากเคอร์เซอร์

การแบ่งหน้าโดยอิงจากเคอร์เซอร์เป็นวิธีการที่มีประสิทธิภาพมากที่สุดของการแบ่งหน้าและควรใช้ทุกครั้งที่สามารถใช้ได้ เคอร์เซอร์ หมายถึง สตริงแบบสุ่มของตัวอักขระซึ่งทำเครื่องหมายรายการเฉพาะในรายการข้อมูล เคอร์เซอร์จะชี้ไปที่ส่วนเดียวกันของรายการเสมอ แต่จะตรวจสอบไม่ผ่านหากรายการถูกนำออกไป เว้นแต่รายการนี้จะถูกลบ ดังนั้นแอพของคุณไม่ควรเก็บเคอร์เซอร์ไว้และสันนิษฐานว่าจะยังใช้ได้ในอนาคต

เมื่ออ่านจุดเชื่อมโยงหนึ่งที่รองรับการแบ่งหน้าโดยเคอร์เซอร์ คุณจะเห็นการตอบสนอง JSON ต่อไปนี้คือ:

{
  "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="
  }
}

จุดเชื่อมโยงที่แบ่งหน้าโดยเคอร์เซอร์รองรับพารามิเตอร์ต่อไปนี้

  • before : นี่คือเคอร์เซอร์ที่ชี้ไปยังจุดเริ่มต้นของเพจของข้อมูลที่ส่งกลับคืน
  • after : นี่คือเคอร์เซอร์ที่ชี้ไปยังจุดสุดท้ายของเพจของข้อมูลที่ส่งกลับคืน
  • limit : จำนวนอ็อบเจ็กต์สูงสุดที่อาจถูกส่งคืน การสืบค้นอาจส่งคืนค่าที่น้อยกว่าlimitเนื่องจากการฟิลเตอร์ อย่าหวังให้จำนวนผลลัพธ์ที่น้อยกว่าค่าlimitให้เป็นตัวระบุว่าการสืบค้นของคุณถึงปลายรายการข้อมูลแล้ว ให้ใช้การแยก next ออกแทน ตามที่ระบุไว้ด้านล้าง ตัวอย่างเช่น หากคุณตั้งค่าlimitไว้ที่ 10 และคุณได้ผลลัพธ์ 9 รายการ อาจมีข้อมูลมากกว่าที่แสดงแต่มีรายการหนึ่งรายการที่ถูกลบออกเนื่องจากการฟิลเตอร์ความเป็นส่วนตัว จุดเชื่อมโยงบางจุดเชื่อมโยงยังอาจมีค่าสูงสุดของlimitด้วยเหตุผลด้านประสิทธิภาพ การเรียก API จะส่งกลับลิงก์การแบ่งหน้าที่ถูกต้องในทุกกรณี
  • next : ปลายทาง API กราฟที่จะส่งกลับเพจถัดไปของข้อมูล หากไม่ระบุ นี่จะเป็นเพจสุดท้ายของข้อมูล เนื่องจากวิธีการแบ่งหน้าทำงานร่วมกับการมองเห็นได้และความเป็นส่วนตัว จึงเป็นไปได้ว่าเพจอาจว่างแต่มีลิงก์การแบ่งเป็นหน้า 'ถัดไป' หยุดการแบ่งหน้าเมื่อลิงก์ 'ถัดไป' ไม่ปรากฏอีก
  • previous : ปลายทาง API กราฟที่จะส่งกลับเพจก่อนหน้าของข้อมูล หากไม่ระบุ นี่จะเป็นเพจแรกของข้อมูล

อย่าจัดเก็บเคอร์เซอร์ เคอร์เซอร์อาจไม่สามารถใช้งานได้ในเวลาอันสั้นหากมีการเพิ่มหรือลบรายการต่างๆ

การแบ่งหน้าโดยอิงจากเวลา

การแบ่งหน้าด้วยเวลานั้นใช้เพื่อการเรียกดูข้อมูลผลลัพธ์โดยใช้บันทึกเวลา Unix ซึ่งชี้ไปที่เวลาที่เจาะจงในรายการของข้อมูล

เมื่อใช้ปลายทางที่ใช้การแบ่งหน้าด้วยเวลา คุณจะเห็นการตอบสนอง JSON ต่อไปนี้:

{
  "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"
  }
}

จุดเชื่อมโยงที่แบ่งหน้าด้วยเวลารองรับพารามิเตอร์ต่อไปนี้:

  • until : ประทับเวลา Unix หรือค่าข้อมูล strtotime ที่ชี้ไปยังปลายทางของช่วงของข้อมูลที่อิงตามเวลา
  • since : ประทับเวลา Unix หรือค่าข้อมูล strtotime ที่ชี้ไปยังจุดเริ่มต้นของช่วงของข้อมูลที่อิงตามเวลา
  • limit : จำนวนอ็อบเจ็กต์สูงสุดที่อาจถูกส่งคืน การสืบค้นอาจส่งคืนค่าที่น้อยกว่าlimitเนื่องจากการฟิลเตอร์ อย่าหวังให้จำนวนผลลัพธ์ที่น้อยกว่าค่าlimitให้เป็นตัวระบุว่าการสืบค้นของคุณถึงปลายรายการข้อมูลแล้ว ให้ใช้การแยก next ออกแทน ตามที่ระบุไว้ด้านล้าง ตัวอย่างเช่น หากคุณตั้งค่าlimitไว้ที่ 10 และคุณได้ผลลัพธ์ 9 รายการ อาจมีข้อมูลมากกว่าที่แสดงแต่มีรายการหนึ่งรายการที่ถูกลบออกเนื่องจากการฟิลเตอร์ความเป็นส่วนตัว จุดเชื่อมโยงบางจุดเชื่อมโยงยังอาจมีค่าสูงสุดของlimitด้วยเหตุผลด้านประสิทธิภาพ การเรียก API จะส่งกลับลิงก์การแบ่งหน้าที่ถูกต้องในทุกกรณี
  • next : ปลายทาง API กราฟที่จะส่งกลับเพจถัดไปของข้อมูล
  • previous : ปลายทาง API กราฟที่จะส่งกลับเพจก่อนหน้าของข้อมูล

สำหรับผลลัพธ์ที่สอดคล้องกัน ให้ระบุทั้งพารามิเตอร์ since และ until อีกทั้งยังขอแนะนำว่าความต่างของเวลาสูงสุดควรจะไม่เกิน 6 เดือน

การแบ่งหน้าโดยอิงค่าออฟเซ็ต

การแบ่งหน้าโดยอิงค่าออฟเซ็ตสามารถนำมาใช้ได้หากคุณไม่สนใจการเรียงลำดับตามเวลาและเพียงต้องการให้ส่งกลับอ็อบเจ็กต์จำนวนหนึ่ง ซึ่งควรใช้ก็ต่อเมื่อจุดเชื่อมโยงไม่รองรับการแบ่งหน้าที่อิงเคอร์เซอร์หรือเวลาเท่านั้น

จุดเชื่อมโยงที่แบ่งหน้าแบบออฟเซ็ตรองรับพารามิเตอร์ต่อไปนี้:

  • offset : พารามิเตอร์นี้จะออฟเซ็ตจุดเริ่มต้นของแต่ละหน้าด้วยจำนวนที่กำหนด
  • limit : จำนวนอ็อบเจ็กต์สูงสุดที่อาจถูกส่งคืน การสืบค้นอาจส่งคืนค่าที่น้อยกว่าlimitเนื่องจากการฟิลเตอร์ อย่าหวังให้จำนวนผลลัพธ์ที่น้อยกว่าค่าlimitให้เป็นตัวระบุว่าการสืบค้นของคุณถึงปลายรายการข้อมูลแล้ว ให้ใช้การแยก next ออกแทน ตามที่ระบุไว้ด้านล้าง ตัวอย่างเช่น หากคุณตั้งค่าlimitไว้ที่ 10 และคุณได้ผลลัพธ์ 9 รายการ อาจมีข้อมูลมากกว่าที่แสดงแต่มีรายการหนึ่งรายการที่ถูกลบออกเนื่องจากการฟิลเตอร์ความเป็นส่วนตัว จุดเชื่อมโยงบางจุดเชื่อมโยงยังอาจมีค่าสูงสุดของlimitด้วยเหตุผลด้านประสิทธิภาพ การเรียก API จะส่งกลับลิงก์การแบ่งหน้าที่ถูกต้องในทุกกรณี
  • next : ปลายทาง API กราฟที่จะส่งกลับเพจถัดไปของข้อมูล หากไม่ระบุ นี่จะเป็นเพจสุดท้ายของข้อมูล เนื่องจากวิธีการแบ่งหน้าทำงานร่วมกับการมองเห็นได้และความเป็นส่วนตัว จึงเป็นไปได้ว่าเพจอาจว่างแต่มีลิงก์การแบ่งเป็นหน้า 'ถัดไป' หยุดการแบ่งหน้าเมื่อลิงก์ 'ถัดไป' ไม่ปรากฏอีก
  • previous : ปลายทาง API กราฟที่จะส่งกลับเพจก่อนหน้าของข้อมูล หากไม่ระบุ นี่จะเป็นเพจแรกของข้อมูล

โปรดทราบว่าหากมีการเพิ่มอ็อบเจ็กต์ใหม่ไปยังรายการที่มีการแบ่งเป็นหน้า เนื้อหาของแต่ละหน้าที่อิงค่าออฟเซ็ตจะเปลี่ยนไป

การแบ่งหน้าโดยอิงค่าออฟเซ็ตไม่ได้รับการรองรับการเรียก API เพื่อให้ได้ผลลัพธ์ที่สม่ำเสมอ เราขอแนะนำให้คุณแบ่งหน้าโดยการใช้ลิงก์ก่อนหน้า/ถัดไปที่เราส่งกลับไปในการตอบสนอง