文/仲瑋 范軼 代成琴
校園社交網絡 API設計方法
文/仲瑋 范軼 代成琴
近些年來,隨著社交網絡的發展,以校園信息服務為載體的校園社交作為一種新興媒介開始流傳起來。校園社交網絡基于社會網絡關系思想,將校園網作為平臺,實現了校園網內信息應用的社會化數據集成。
在校園社交網絡里,為廣大開發者和校園用戶提供開放數據的開發平臺至關重要。使用開發平臺提供的API(Application Programming Interface 應用程序接口)可以讓用戶無須通過Web接口就可以連接到校園社交網絡應用之中,并被允許在這個平臺上創建新的應用。使得Web、桌面、移動應用的多種操作成為可能,程序開發者的分工更加明確,降低了開發成本。因此,設計一個合理的API系統將有助于豐富校園網應用,構建以校園社交為核心的校園信息體系。
目前API的設計主要存在SOAP和REST兩種設計方案。前者基于SOA集成,表現了不同軟件構件之間通過各種過程或方法進行的交互,屬于面向服務架構;后者則將每個軟件構件看作一組數據庫表,屬于面向資源架構。由于REST具有輕量級應用、輸出人工可讀的結果集、易于構建、無需工具支持等優點, 目前各大互聯網廠商如Google、Twitter等多采取REST方案來構建API。
REST是英文Representational State Transfer(表述性狀態轉移)的縮寫,是近年來迅速興起的,一種基于HTTP、URI以及XML這些現有協議與標準的,針對網絡應用的設計和開發方式。它可以降低開發的復雜度,提高系統的可伸縮性。REST架構風格最初由Roy T. Fielding(HTTP/1.1協議專家組負責人)在其2000年的博士學位論文中提出, 其核心是可編輯的資源及其集合。每個資源或者集合有一個惟一的URI,系統以資源為中心,構建并提供一系列的Web服務。HTTP就是該架構風格的一個典型應用。從其誕生之日開始,它就因其可擴展性和簡單性受到越來越多的架構師和開發者們的青睞。
對于校園應用而言,良好的API設計可以提高校園第三方應用開發者的效率,易于用戶使用,并具有良好的擴展性。因此,我們的RESTFUL API設計方案應遵循以下基本原則:
1. 將系統上的所有事物都抽象為資源,每個資源對應惟一的資源標識;
2. 簡單直觀,將通用邏輯以組件的方式展示,遵循RESTful風格;
3. 開發人員友好性。API是一種為開發人員設計的產品,因此API的設計應對第三方程序開發者保持友好,如盡可能支持多種數據返回格式,在瀏覽器調試中易于輸入等;
4. 安全性。盡可能使用標準的安全協議,這樣在跨系統對接時會有更好的兼容性。同時充分考慮私有API的認證授權和安全控制,必要的API接口做好訪問頻率控制。
校園社交網絡的主要用戶群體是校園師生用戶,均需通過校園統一身份認證進行登錄,因此API的身份驗證也應以此為基礎,通過分享用戶信息、社會關系、消息、頭像等方式將信息擴展到其他第三方系統。采用分層的方式對公共業務進行設計并提供有效的API供模塊通信。在REST風格中,資源標識結構和URI模式的設計與API設計一脈相承,其設計如圖1所示。
1.HTTP Method 是REST利用Http實現的對資源的CURD功能,它提供了一個操作資源的統一接口,包括GET/POST/PUT/DELETE等。對于任何資源的操作都應該對應到前面方法中。
2.REST被稱為面向資源的開發,這說明對資源的抽象是設計API的一個重要環節。{resources}用于表示校園社交網絡API系統的主體資源名,如用戶屬性、標簽、頭像、社會關系等,{action_ name}則用于抽象對于資源的操作,同時與HTTP Method相對應,根據HTTP請求實現不同的對象操作。

圖1 RESTFUL API的URI設計
社交網絡中的資源,在描述了某種事物的同時,有時還存在著一定的層次結構關系。比如,系從屬于某個學院,班級從屬于系;學生信息可以從屬于班級,也可以從屬于某個公寓。當資源有這種層次關系的時候,需要使用復合的URI模式來幫助開發者更好地理解和設計資源。
3.開發者在發送一個REST API的請求同時,針對相同的資源根據場景的不同可能會希望得到不同的返回形式。比如使用javascript時希望得到JSON的返回,而使用C++時可能希望得到XML的返回。為了提供這種完備的內容協商能力,在這里設計了{format}參數,使用URI的模式直接用于定義響應和請求中的資源表述格式。
4.參數。在API中URI應設計的盡量簡短,這里使用參數的方式用于結果過濾、排序、搜索、分頁等相關功能。但過多的參數會導致URL的可讀性變差,更有甚者,可能會導致URL過長,使得API請求無法執行。因此參數的設置應在合理的范圍內使用,必要時設置別名來代替常用的過濾、搜索請求。
URI是RESTFUL API設計中非常重要的一個環節,在通過URI定義好了資源與允許的操作之后,為實現RESTFUL API,還須在以下幾方面進行設計。
REST架構的一個基本要求是保證操作語義的可見性,因此應正確地將API執行結果以及失敗的原因以HTTP狀態代碼的方式傳達給客戶程序,詳細描述操作是否成功、如果出錯原因是什么,并采取相應的后續動作。API的錯誤碼可以分為客戶端錯誤和服務器端錯誤兩部分。API應該至少將所有的客戶端錯誤以json形式返回。如圖2所示。
API的緩存處理是提高API使用效率的重要措施。包括model查詢結果緩存、URL頁面緩存、類對象緩存等。最簡單的方式可以采用HTTP自帶的緩存框架。HTTP 頭中有“Cache-control”字段來控制如何使用緩存,常見的取值有 private、no-cache、max-age、must-revalidate 等。
還有一種緩存方案,即通過支持條件請求與電子標簽ETag來處理緩存。當用戶請求數據內容時,系統在返回數據的同時,在HTTP頭中,將返回根據服務器內容的最后修改時間Last-Modified,或者根據服務器內容生成電子標簽ETag。當用戶再次請求數據時,就可以在HTTP請求中使用If-Modified-Since或者If-None-Match 頭信息,把上次請求得到的時間戳或者電子標簽傳給服務器。當收到一個有條件請求的HTTP頭的REST請求的時候,我們的程序需要將收到的時間戳或者電子標簽與當前內容作比較,就可以很容易地知道用戶請求的數據內容在這段時間是否發生過修改,并根據比較結果返回給用戶最新內容,或者用HTTP響應碼304告知用戶,內容沒有變化。

圖2 json形式錯誤信息返回示例
安全設計是API設計中不可回避的一項工作,在這里我們使用OAuth協議用于身份認證。校園社交網絡的API相當于授權外部應用訪問社交網絡站內資源,OAuth協議正適用于此。OAuth協議將與校園網已建設的統一身份認證系統相結合最終為面向最終用戶維度的API提供授權。對于身份認證之后的安全控制則主要通過應用控制,采用基于角色的方式來實現資源的訪問授權。
除了OAuth認證,還可以輔助使用其他的安全措施。比如對全部參數進行簽名防止篡改;在請求中增加一次性的Token,或者短時間內有效的Token;對內容加密防止數據泄露等等。
隨著云計算和移動計算的興起,許多企業愿意在互聯網上共享自己的數據、功能,對于校園社交網絡也是如此。開放API是大勢所趨,通過使用API,開發人員將可很方便地訪問社交網絡中的的海量內容,可以以編程的方式訪問一個特定用戶的信息,使得信息的傳遞存在了無限可能性。
RESTFUL API是校園社交網絡系統的基礎構架,因此在設計時需要從整個社交網絡設計的高度進行思考。REST把軟件架構的概念與網絡架構的概念相互結合起來,使得之成為可測量的分布式系統的理想狀態,提高了信息數據的處理能力和通訊效率。
(作者單位為哈爾濱工業大學網絡與信息中心)
OpenSSL是當今應用最廣泛的加密軟件之一,因此漏洞影響的范圍非常廣泛,幾乎包括所有利用openssl組件來實現ssl功能的服務,具體有:
1. 使用Apache及Nginx兩款軟件的https服務(tcp 443端口);
2. 使用ssl協議的加密pop3(tcp 995端口),加密SMTP(tcp 465端口)、IMAP(tcp 994端口)的郵件系統;
3.使用ssl協議并使用openssl做組件的vpn(tcp 443端口及1194端口)設備;
4.使用ssl協議的加密及時通訊XMPP(tcp 5222端口);
5.其他基于openssl組件開發的應用加密程序,如在線交易程序等;
需要說明的是,這個漏洞會泄露系統中原本加密的用戶名和密碼,并且即便被攻擊過也不會在系統上留下任何痕跡,因此如果您的系統使用openssl來加密登錄過程的話,除了要及時安裝補丁程序外,還需要對攻擊帶來后續影響進行評估。根據我們的檢測,只要您的系統存在該漏洞并且不是補丁發布后馬上進行升級的,十之八九都被攻擊者光顧過了,為安全起見建議通知從漏洞出現(4月7日晚)到您系統升級完后這段時間里登錄過系統的用戶更改密碼,避免賬號被他人利用。
(供稿:鄭先偉)