Graph API基本原理

一個臉書應用程式,除了本身自己的功能外,會需要臉書的不過就是需要它的社交網路,取取資料、改改資料或貼貼資料。對使用Graph API而言,就是CRU(Create、Read、Update)。那Delete勒?我想除非是一個臉書功能相關的管理程式,像是Facebook手機版,否則不太會需要用到Delete。這些操作的內容,其實是對應到HTTP不同種類的request:

  • HTTP Get: Read。Graph API中最廣泛的使用,取資料就靠它。
  • HTTP Post: Create、Update、Delete。新增、修改、刪除資料都可以透過它,但大都用於新增修改
  • HTTP Delete: Delete。刪除資料就靠它,但並非所有的Client都支援Delete的Request,所以POST request也提供刪除的功能。

為了讓大家容易了解,接下來我會透過範例,並使用Graph API Explorer示範這些操作。

  • 我想知道我的好友中,有幾個裝這個應用程式。
  • 我要發佈訊息到塗鴉牆。
  • 我要刪除我發布的訊息。

先前介紹Graph API所提到的操作,都是很單純的用HTTP Get去取得資料。今天在這我就介紹給大家一定會使用到的應用: 取得已安裝應用程式的朋友。在我的國軍登出倒數計時器APP中,提供了朋友的資訊,讓你知道有多少人安裝了這個APP。

除了主要功能會用到外,要邀請朋友當然也會需要去濾掉那些已經安裝的朋友們拉! 送禮物或索討禮物也會想先發給安裝的朋友們! 那我們該如何取到這樣的資訊呢?

「透過HTTP Get去取得朋友的清單,接著使用Field Selection功能去顯示出User Object的installed欄位。」

這個操作僅會使用到User的Object,包含friends connection與installed field。讓我們看看透過Explorer Query的結果:

如上圖所示,如果User的結果中有installed且為true,就代表它有安裝這個APP。

使用Graph API取資料,我認為要點是: 「先思考你要找的東西中心點為何? 它所對應的物件為何? 此中心點與要找的東西關聯性為何? 最後才看看你要的屬性為何?」

除了上述提到的Field Selection功能,Graph API還支援PagingLocaleSearch等功能。有興趣的鄉民可以至各連結或Document中研究與練習。

HTTP Post

常見如讚(like)、貼文(feed)、回文(comment)等,都是Post操作,使用也相當簡單。

假設我想告訴大家輔大操場有正妹,還要點讚推文好讓大家都看的到。我要做兩個Post操作: feed與like,
貼文(feed)的格式為:

https://graph.facebook.com/PROFILE_ID/feed
讚(like)的格式為:
https://graph.facebook.com/OBJECT_ID/likes

因為我要發佈到我的塗鴉牆,所以PROFILE_ID是我的ID或用me替代。接著新增一個field(Post操作才有),key為message,value就是把輔大有正妹的消息告訴大家。接著加上feed的connection:


在做完貼文的操作後,我們可以取得一個ID(這是PROFILE_ID和POST_ID串起來的),這就是OBJECT_ID。將它加上likes的connection:


最後到塗鴉牆上,就可以發現有幾個色坏(我除外)來點讚了:


當你想新增或修改什麼東西的時候,「先看看中心物件為何?再看看此中心物件與你要新增修改的關係為何?」。這樣子就可以透過文件看看該如何做,去達到你想要的結果:

像打卡中心就是自己(User Object),checkins就是關係connections。從文件中可以知道必須至少給它地點ID與座標所在的參數。

Delete也相當容易,直接指定OBJECT_ID即可。

https://graph.facebook.com/OBJECT_ID
像是要砍掉在Post範例中的貼文:

需要另外注意的是:有些刪除動作是要打斷connections。之前點讚是透過對某物件的likes connections做Post,收回讚就是對某物件的likes connections做Delete就可以了!
我認為訣竅是:「刪物件用ID,斷連結用ID+Connections。」

不管是先前的Graph API介紹或本篇文章,目的都是為了讓大家了解“根本”,其實早就有人將Graph API包裝成各自語言的API了。但API該如何使用,或是如何擴充API都必須了解Graph API之根本才行。希望Graph API介紹系列的文章能給予大家一些幫助。

友藏內心獨白: 花時間閱讀Document並將所知整理成文章,比寫Code還累阿!