• 沒有找到結果。

第四章 系統設計與實作

4.2 伺服器端之系統設計

4.2.4 伺服器端 API

我們將伺服器端提供的功能包裝為一組 API,供客戶端程式、網頁瀏覽器以及第三 方系統存取。客戶端以 HTTP 呼叫這些 API,伺服器提供相應的服務,API 的回應以及 輸出資料則為 XML 格式,以方便呼叫端處理回傳的資料。文字編碼則考量國際化的需 求,為 UTF-8。

API 回傳的訊息有兩種,若失敗會回傳:

<result type="error"> //result type 為 error <errtype>SOME_ERROR_TYPE</errtype> //錯誤類型

<message>SOME_ERROR_MESSAGE</message> //錯誤訊息

</result>

成功則有兩種可能,若是要求進行某個動作(如要求登入),成功會回傳:

<result type="success"> // result type為 success <message>SOME_SUCCESS_MESSAGE</message> //某動作成功的訊息

</result>

若是向伺服器要求資料(如要求聯絡人清單),則是下列的格式

<result type="TYPE_OF_DATA"> //result type為資料的類型

<data1> //以 XML 表示的資料列表

</result>

各 API 以功能區別,描述如下:

使用者認證、登入階段管理 z api_login

參數:username, password

客戶端登入,傳入使用者之帳號密碼,系統會根據帳號密碼來確認使用者的身 份 , 若 成 功 , 會 啟 動 一 登 入 階 段 (session) , 並回 傳 成 功 訊 息 。 必 須 先 以 api_login 登入,才可呼叫其餘的 API,否則系統會拒絕用戶端的 API 呼叫,並 回傳 AUTH_NOT_LOGIN_YET 錯誤。

可能回傳的失敗類型:

AUTH_LOGIN_ERROR:登入錯誤

z api_logout 參數:無

客戶端登出,呼叫時系統會結束之前呼叫 api_login 所建立之登入階段。若成 功會回傳成功訊息。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

z api_keep_alive 參數:無

維護目前進行中的登入階段,避免因為逾時而被系統判定客戶端已離線。不過 登入後呼叫任何 API 存取時,伺服器都會隱含地進行這個動作,故此 API 是供 客戶端已知自己一段時間不會與伺服器端溝通,而又必須維護登入狀態時使用。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

z api_get_activities 參數:無

回傳某使用者目前進行中的所有登入階段內容。

成功時回傳的資料格式如下:

<result type="activities">

<activity>

<sessionid>[ID OF SESSION1]</sessionid>

</activity>

<activity>

</activity>

...

</result>

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

使用者認證、登入階段管理 z api_get_profile

參數:無

供客戶端取得使用者的個人資訊,包含使用者名稱、電子郵件帳戶、偏好設定 等。密碼因為是以單向加密儲存在資料庫,故不回傳給客戶端,若客戶端要更 改密碼,可以使用 api_set_profile。

成功時回傳的資料格式如下:

<result type="profile">

<username>[USERNAME OF USER]</username>

<nickname>[NICKNAME OF USER]</nickname>

<email>[EAMIL OF USER]</email >

<preference>[PREFERENCE OF USER]</preference>

</result>

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

z api_set_profile

參數:nickname、password、email、preference

設定使用者個人資料,包括密碼,暱稱、電子郵件位址以及偏好設定。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

聯絡人與群組管理 z api_add_contact

參數:cid,given_name,surname,telephone_number,cellphone_number, fax_number,address_state_or_province,address_country,address_city,ad dress_street,email,msn,skype

根據傳入的資料在伺服器端資料庫裡新增一個聯絡人,如果有傳入 cid 欄位,

就會將新聯絡人的 Contact ID 設定為傳入的 cid,若沒有則由伺服器自動產 生。此動作會將新聯絡人之 LAST_MODIFICATION_TIME 設為產生此聯絡人時之 時間。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

CONTACT_EMPTY_INFO:傳入的聯絡人資料為空

z api_delete_contact 參數:cid

根據傳入的 cid,從伺服器端資料庫裡刪除指定 Contact ID 的聯絡人。同時 也會砍除 GROUP_ENTRIES 裡包含此聯絡人 CID 之記錄。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 CONTACT_EMPTY_CID:傳入的 CID 為空

z api_modify_contact

參數:cid,given_name,surname,telephone_number,cellphone_number, fax_number,address_state_or_province,address_country,address_city,ad dress_street,email,msn,skype

根據傳入的資料修改伺服器端資料庫裡由 cid 指定的聯絡人資料。此動作會將 聯絡人之 LAST_MODIFICATION_TIME 設為修改聯絡人資料時之時間。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 CONTACT_EMPTY_CID:傳入的 CID 為空

z api_get_contacts 參數:cids

參 數 cids 為 聯 絡 人 Contact ID 之 序 列 , 各 CID 間 以 逗 號 分 隔 (cid1,cid2,cid3,...)。伺服器端會傳回 cids 指定之複數聯絡人資料,若未指 定 cids,則會回傳屬於該使用者之所有聯絡人資料。

成功時回傳的資料格式如下:

<result type="contact_list">

<contact>

<cid>[CID OF CONTACT]</cid>

<surname>[SURNAME OF CONTACT]</surname>

<given_name>[GIVEN NAME OF CONTACT]</given_name>

<telephone_number>[TELEPHONE # OF CONTACT]</telephone_number>

<cellphone_number>[CELLPHONE # OF CONTACT]</cellphone_number>

<fax_number>[FAX # OF CONTACT]</fax_number>

<address_state_or_province>

[ADDRESS - STATE OR PROVINCE OF CONTACT]

</address_state_or_province>

<address_country>

[ADDRESS - COUNTRT OF CONTACT]

</address_country>

<address_city>

[ADDRESS – CITY OF CONTACT]

</address_city>

<address_street>

[ADDRESS – STREET OF CONTACT]

</address_street>

<email>[E-MAIL OF CONTACT]</email>

<msn>[MSN MESSENGER SIGNIN NAME OF CONTACT]</msn>

<Skype>[SKYPE SIGNIN NAME OF CONTACT]</skype>

<last_modification_time>

[LAST MODIFICATION TIME OF CONTACT RECORD]

</last_modification_time>

<msn_status>[MSN MESSENGER STATUS OF CONTACT]</msn_status>

<skype_status>[SKYPE STATUS OF CONTACT]</skype_status>

</contact>

<contact> ... </contact>

...

</result>

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

z api_add_group 參數:gid,name

根據傳入的群組名稱在伺服器端資料庫裡新增一個群組,如果有傳入 gid 欄位,

就會將新群組的 Group ID 設定為傳入的 gid,若沒有則由伺服器自動產生。此 動作會將新群組之 LAST_MODIFICATION_TIME 設為產生此群組時之時間。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

GROUP_EMPTY_NAME:傳入的群組名稱為空

z api_delete_group 參數:gid

根據傳入的 gid,從伺服器端資料庫裡刪除指定 Croup ID 之群組。同時也會砍 除 GROUP_ENTRIES 裡關於此群組之記錄,包括此群組所包含之元素,以及包含 此群組為元素之群組。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 CONTACT_EMPTY_GID:傳入的 GID 為空

z api_modify_group 參數:gid,name

根據傳入的資料修改伺服器端資料庫裡由 gid 指定之群組資料。此動作會將該 群組之 LAST_MODIFICATION_TIME 設為修改群組資料時之時間。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 CONTACT_EMPTY_GID:傳入的 GID 為空 GROUP_EMPTY_NAME:欲修改之群組名稱為空

z api_get_groups 參數:gids

參 數 gids 為 群 組 Group ID 之 序 列 , 各 GID 間 以 逗 號 分 隔 (gid1,gid2,gid3,...)。伺服器端會傳回 gids 指定之複數群組資料,若未指定 gids,則會回傳屬於該使用者之所有群組資料。

成功時回傳的資料格式如下:

<result type="group_list">

<group>

<gid>[GID OF GROUP]</gid>

<name>[NAME OF GROUP]</name>

<last_modification_time>

[LAST MODIFICATION TIME OF GROUP RECORD]

</last_modification_time>

<entries>

</result>

可能回傳的失敗類型:

z api_add_entry_to_group 參數:gid,id

將 id 指定之元素加入由 gid 指定之群組為群組元素,id 可為 cid 或 gid。此 API 會檢查母群組以及元素是否將形成循環包含,若形成循環包含則會拒絕要求並 回 傳 錯 誤 類 型 。 加 入 一 個 群 組 元 素 將 會 使 母 群 組 gid 之 LAST_MODIFICATION_TIME 改變為加入群組元素之時間,但不會改變群組元素 id 之 LAST_MODIFICATION_TIME。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 GROUP_EMPTY_GID:傳入的 GID 為空 GROUP_EMPTY_ID:傳入之群組元素 ID 為空 GROUP_PARENT_UNEXISTED:指定之母群組不存在 GROUP_INVALID_ENTRY_ID:傳入之群組元素 ID 不正確 GROUP_ENTRY_UNEXISTED:指定之群組元素不存在 GROUP_CYCLIC_ENTRY:加入群組元素將形成循環包含

z api_delete_entry_from_group 參數:gid,id

將群組元素 id 自 gid 指定之群組中刪除,id 可為 cid 或 gid。刪除群組元素並 不會將該聯絡人或群組自資料庫中刪除。刪除一個群組元素將會使母群組 gid 之 LAST_MODIFICATION_TIME 改變為刪除群組元素之時間,但不會改變群組元素 id 之 LAST_MODIFICATION_TIME。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入 GROUP_EMPTY_GID:傳入的 GID 為空 GROUP_EMPTY_ID:傳入之群組元素 ID 為空

GROUP_PARENT_UNEXISTED:指定之群組元素不存在

z api_clear_all 參數:無

清空目前使用者所擁有之所有聯絡人與群組內容。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

聯絡人上線狀態更新

z api_set_presence.php 參數:type,cids,status

設定聯絡人之即時通訊上線狀態。type 指定上線狀態的類型, 如 msn, Skype,…

cids 指 定 要 設 定 狀 態 的 聯 絡 人 CID 序 列 , CID 間 以 逗 號 分 隔 (cid1,cid2,...)status 指定對應 cid1,cid2,...的上線狀態,也以逗號分隔 (status1,status2,...)。接受的參數值視 type 類型而不同,msn 類型與 skype 類型可接受之狀態值根據 MSN 與 Skype 之官方設定訂定,列於錯誤! 找不到參 照來源。。若 cids 與 status 包含之序列長度不同,會以 cids 為主,若 cids 數量比 status 少,則剩下的會設為 MSN_UNKNOWN、SKYPE_UNKNOWN。若只有傳入 type 而 cids 為空,則會全部設成 status1,若沒有 status1, 則會設成 MSN_UNKNOWN、SKYPE_UNKNOWN。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

PRESENCE_UNKNOWN_TYPE:系統不認識指定之上線狀態類型

表6 聯絡人上線狀態可接受之參數 msn 類型之狀態 skype 類型之狀態

MSN_ONLINE SKYPE_ONLINE MSN_OFFLINE SKYPE_OFFLINE MSN_AWAY SKYPE_AWAY MSN_IDLE SKYPE_NA MSN_BE_RIGHT_BACK SKYPE_DND

MSN_BUSY SKYPE_SKYPEME MSN_ON_THE_PHONE SKYPE_SKYPEOUT

MSN_OUT_TO_LUNCH SKYPE_UNKNOWN*

MSN_UNKNOWN*

伺服器端時間存取

z api_get_server_time.php 參數:無

取得目前伺服器端之時間,可作為同步比對之用。傳回之時間時區皆為 GMT,格 式為 ISO 8601:YYYY-MM-DD HH:NN:SS。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

z api_get_last_modification_time.php 參數:無

取得目前伺服器端屬於目前使用者之群組與聯絡人最後修改時間,可做為客戶 端判定是否更新資料之依據。傳回之時間時區皆為 GMT,格式為 ISO 8601:

YYYY-MM-DD HH:NN:SS。

可能回傳的失敗類型:

AUTH_NOT_LOGIN_YET:尚未登入

除上述之 API 傳回錯誤類型外,若伺服器端在執行 API 之過程中出現錯誤,也可能 回傳一些錯誤類型:

DB_CONNECTION_ERROR:資料庫連線錯誤 DB_SELECTION_ERROR:資料庫選擇錯誤 DB_QUERY_ERROR:資料庫查詢錯誤

相關文件