人人網開放平臺技術架構

本文檔介紹了人人網開放平臺技術架構的設計細節和接口定義,是一個大而全的文檔,涵蓋了人人網開放平臺對外提供的全部接口。若是你想了解人人網開放平臺的總體架構和原理,或者想查閱某個接口參數,那麼你必定能夠在這裏找到答案。web

人人網開放平臺的技術架構,正處於巨大的變革之中,正向着愈來愈標準化通用化的方向發展。可是,爲了保證兼容和過渡,咱們將在比較長的一段時間以內仍然按照舊的平臺架構提供以前的功能。將功能從舊的平臺架構向新的人人網開放平臺技術架構進行遷移將持續進行,這須要平臺方和第三方共同努力。爲了描述清楚,在文檔中涉及到一些新老接口的過渡狀況,將會詳細標明。編程

目錄

  [隱藏]

清晰分層的技術架構

新的人人網開放平臺技術架構遵循一個清晰的分層模型,架構圖以下所示:api

在上圖所示的分層架構中,人人網開放平臺提供了不一樣層次的功能。圖中紅色部分表示目前尚未提供的功能模塊,須要將來由平臺或開源社區來提供;黃色部分表示在舊的平臺架構中已經提供但正在往新的架構中遷移的功能模塊;其它顏色的是功能比較完整的功能模塊。瀏覽器

從圖中能夠看出,人人網開放平臺大概分爲三個層次,共同爲最上層的各類形式的第三方應用程序提供服務:安全

  • Core Service Layer: 實現了人人網對外提供的最底層的API,定義好了接口參數和調用流程,第三方或平臺方能夠根據這個層次的API在上面封裝SDK。
  • SDK layer: 由第三方或平臺方提供的針對各類開發語言或開發環境的SDK。
  • High SDK layer: 構建在Core Service Layer或SDK Layer之上的高級SDK,例如Discuz SDK就是基於JS SDK來封裝的。

第三方應用程序可使用任意三個層次提供的API進行開發。服務器

那麼,咱們爲何要推出這樣的分層架構呢?由於它具備以下好處:session

  • 通用性。更好地支持web、mobile、desktop等運行環境,提供了多種形式的API。即提供了須要受權才能使用的Rest API,也包括無需受權便可使用的Widget API。
  • 標準化。新的架構的一個很重要的特色就在於它的分層架構和明肯定義的API接口,這有利於第三方得到穩定清晰的編程環境。
  • 行業分工的清晰化。標準化帶來的好處之一,是能夠將SDK的開發維護工做交給第三方開源社區來完成,而不是所有由平臺來完成。開源社區在Core Service Layer層次提供的API上開發SDK,第三方應用開發者在SDK基礎上開發應用。
  • 易維護和易理解。清晰的分層模型和明肯定義的接口規範有利於下降平臺方的維護成本,也有利於第三方對平臺架構的理解。
  • 擴大開放範圍,提供更多新特性。在某些出於安全考慮而沒法經過Rest API開放的功能,如加好友功能,則能夠由新的Widget API來提供。

下面經過歸類的方式詳細介紹人人網開放平臺技術架構的全部細節。架構

Auth API

第三方若是想調用人人網提供的Rest API,則必須首先通過用戶受權。Auth API就是用來完成用戶受權的。app

目前,人人網開放平臺進行用戶受權遵循業界最新的標準OAuth 2.0,詳情請參考:用戶驗證與受權網站

Rest API

Rest API是人人網開放平臺提供的一種使用HTTP協議來調用的API,須要在完成用戶受權後才能調用。

各個Rest API的接口參數定義詳見Rest API

Widget API

Widget API是人人網開放平臺提供的一種在用戶控制下訪問用戶資源的一種API,因爲是在用戶控制下完成的,因此無需進行用戶受權(但用戶身份驗證仍是必需的)。這種API可以支持各類不一樣的運行環境,如web、mobile、桌面編程環境等等。

一個Widget可有擁有多種視圖,每一種視圖可以適應某個特定的運行環境。Widget能夠在web瀏覽器中運行,或嵌入到一個原生程序(Native Application)中,或嵌入到一個對話框中。

根據一般的用途,Widget大體能夠分爲兩類:Dialog和Plug-in。

Dialog

Dialog一般被用於彈出窗口或彈出對話框。通常在默認狀況下,一個Dialog不會在第三方應用中顯示出來,而是由某個用戶動做觸發彈出。

一般Dialog具備比較簡單的用戶界面。

下面是Dialog列表:

Feed DialogImage:New.gif

Feed Dialog提供的功能是經過彈框等方式在用戶確認後發送新鮮事到人人網。能夠支持web/wap網頁(web/wap網站以及站內應用)、移動客戶端、桌面客戶端等多種運行環境。

新版Feed Dialog的優勢:

  • 再也不依賴新鮮事模板
  • 再也不依賴用戶受權(舊版的自定義新鮮事須要用戶受權才能使用,是一個錯誤的流程)
  • 對更多終端顯示的支持

Request DialogImage:New.gif

Request Dialog提供的功能是經過彈框等方式在用戶確認後給好友發送應用邀請或禮物,支持「一對一」或「一對多」兩種方式。能夠支持web/wap網頁(web/wap網站以及站內應用)、移動客戶端、桌面客戶端等多種運行環境。

 

Plug-in

Plug-in一般在第三方應用中被用作一個嵌入的模塊或Box,默認顯示。

一般Plug-in具備比較複雜的用戶界面,功能也比較豐富。

注意:上面描述的Dialog和Plug-in之間的區別並非嚴格的技術上的區別,而只是用法上的區別。實際在技術上,二者的用法能夠互換。例如,經過用戶的觸發再彈出一個窗口來顯示Plug-in也是可行的。

下面是Plug-in列表:

人人喜歡

用戶在第三方應用看到喜歡的內容能夠點擊「喜歡按鈕」,同時將內容發送到人人網新鮮事。若是內容有對應公共主頁,用戶同時能夠成爲該公共主頁的粉絲,接受到來自該主頁的最新動態。

技術文檔詳見like,一個web配置和預覽界面:web喜歡按鈕的配置

Like Box(新版還未上線)

Like Box是一個爲公共主頁擁有者提供的社會化插件。公共主頁擁有者可直接將此box嵌入本身的應用(目前只支持web網站和web站內應用),用戶可在第三方網站上點擊喜歡成爲該主頁粉絲,並瀏覽該主頁新鮮事及現有的關注者。

在新版Like Box上線以前,可使用舊的粉絲小部件:技術文檔參見粉絲小部件,配置和預覽界面參見粉絲小部件的配置

新版Like Box的優勢:

  • 支持新鮮事瀏覽
  • 再也不依賴appId(舊的粉絲小部件錯誤地依賴appId參數,致使只能爲應用的公共主頁建立粉絲小部件),從而能夠用於人人網任何公共主頁

Comment Box

Comments Box是一個社會化插件,便於人人網用戶在第三方應用(目前只支持web網站和web站內應用)中發表評論。 相關文檔地址

Live Stream Box

可讓用戶在第三方應用(目前只支持web網站和web站內應用)中針對某一熱點話題進行實時討論,用戶的評論以人人網狀態的形式發送到人人網主頁。

技術文檔:xn:live-stream;配置和預覽界面:Live Stream Box配置

好友派

在第三方應用(目前只支持web網站和web站內應用)中顯示好友頭像列表的社會化插件,與好友進行交互,加強社交屬性。

技術文檔:xn:friendpile;配置和預覽界面:好友派配置

Callback API

Iframe callback

Iframe callback用於第三方開發Web站內應用,在Canvas頁(即http://apps.renren.com/yourapp)與人人網深刻整合。

Iframe類型的應用的接入方式,是在Canvas頁(即http://apps.renren.com/yourapp)經過iframe嵌入一個第三方的頁面,在iframe的src中傳遞一些xn_sig_xxx參數給第三方服務器。第三方服務器解析和驗證這些參數,取得用戶的標識(如uid, session key等),而後用session key去調用Rest API,獲取用戶更多信息,從而產生一個動態頁面。

xn_sig_xxx參數的相關信息(包括如何校驗這些參數)請參見關於xn_sig參數

XNML callback

XNML callback用於第三方開發Web站內應用Wap站內應用,在Canvas頁(即http://apps.renren.com/yourapp 或 http://mapps.renren.com/yourapp)與人人網深刻整合。

XNML類型的應用的接入方式,是當用戶訪問在Canvas頁(即http://apps.renren.com/yourapp 或 http://mapps.renren.com/yourapp)時,由平臺服務器代理用戶的請求,平臺服務器向第三方服務器發送POST請求。在這個POST請求中,傳遞一些xn_sig_xxx參數給第三方服務器。第三方服務器解析和驗證這些參數,取得用戶的標識(如uid, session key等),而後用session key去調用Rest API,獲取用戶更多信息,從而產生一個動態頁面。因爲安全緣由,這個動態頁面不能是普通的HTML頁面,只能使用由人人網開放平臺定義的XNML代碼來組裝頁面,返回給平臺服務器。最後平臺服務器將XNML代碼解析渲染成普通的HTML代碼,返回給瀏覽器。

xn_sig_xxx參數的相關信息(包括如何校驗這些參數)請參見關於xn_sig參數

在第三方服務器返回平臺服務器響應時,能夠分別使用下列三個技術來書寫標籤、CSS和JavaScript:

Real-Time API

Real-Time API是一種高級的API形式,使用方式是:第三方應用能夠訂閱用戶在人人網的一些信息變化(如收到提醒、好友關係變化、我的信息變化等),由人人網服務器在訂閱信息發生變化時主動將消息推送給第三方,從而能夠完成一些實時消息提醒之類的高級功能。詳見Real time api

 

各類SDK

SDK一部分由人人網開放平臺官方提供,一部分由開源社區提供。以開源代碼的方法是進行維護。

目前提供的SDK請參閱SDK

開放平臺領域的社會化分工

新的通過清晰分層的人人網開放平臺技術架構,有利於促進開放平臺領域的社會化分工。

在以前,第三方應用開發者所使用的全部API,大部分都由開放平臺官方提供,包括各類開發SDK。而通過架構分層,底層的Core Service Layer提供的API被清晰地定義,就能夠將底層接口的開發和SDK的開發明確的區分開來。這樣帶來的好處是:開放平臺集中精力提供底層的接口,致力於增長接口種類,而上層的SDK封裝工做能夠由第三方開發者本身或開源社區來進行。

爲了促進開放平臺領域的發展,人人網開放平臺倡導開源精神,集中開源社區的力量,對有利於第三方開發者進行開發或接入的代碼進行開源管理。這這些開源的代碼一部分由人人網開放平臺官方開發出初始版本,而後發佈爲開源的license,由開源社區來管理;另外一部分直接由開源社區來貢獻。

歡迎加入人人網開源項目

相關文章
相關標籤/搜索