• 沒有找到結果。

應用程式介面提供的服務

三、 系統分析與實作

3.2 應用程式介面實作

3.2.4 應用程式介面提供的服務

如圖 3-13,DOD API 由 NCTUAdapter、Token 機制與書後附件檔案三個部分組成,

並藉由這三部分交互作用提供 DOD API 的各項服務 (Services),服務的要求方式為以 URI 搭配 HTTP 方法 (GET、POST 等等)。

其中 NCTUAdapter 可能因更換自動化系統而被改寫;Token 可使用資料庫而非記憶 體儲存;書後附件檔案可以被存成 ISO 9660 格式或是壓縮檔,收到要求時再經過解壓

39

縮後傳回,甚至存在雲儲存 (Cloud Storage) 中。不管內部的如何變化,DOD API 需保 證對外開放的服務其要求方式不變。

圖 3-13 DOD API 組成圖

DOD API 總共包含了五個服務:

1. 驗證帳號密碼 http://ServerIP/accounts/login 2. 取得驗證圖片 http://ServerIP/accounts/captcha 3. 取得讀者目前借閱紀錄 http://ServerIP/records 4. 取得書後附件檔案結構 http://ServerIP/discs/[條碼號]

5. 下載書後附件檔案 http://ServerIP/discs/[條碼號]/[檔案名稱]

將五個服務分述於下:

40

1. 驗證帳號密碼 http://ServerIP/accounts/login

此服務最主要目的為檢查帳號密碼並發給一個 Token,使用者之後每次要求其它 API 服務時,必需將此 Token 附加於 HTTP 要求中,詳細流程圖如圖 3-14。回傳的結果 為圖 3-15。此功能設計上較為複雜,需考慮下列三點:

(1). Token 產生後不能永遠存在記憶體中,否則將耗盡所有記憶體資源,必須有機制對 不再使用的 Token 進行刪除並將記憶體回收,本研究的作法是如果在六十分鐘內此 Token 未被使用就刪除 Token。

(2). 由帳號密碼的錯誤次數,送出要求的頻率等等特徵,判斷要求此服務的是人還是機 器,決定要求 CAPTCHA 挑戰。本研究的作法是只要帳號密碼錯誤一次就要求 CAPTCHA 挑戰。

(3). 與自動化系統連結認證帳號密碼則是使用 NCTUAdapter 以傳入的帳號 (userid) 與 密碼(password)為參數呼叫 GetUser 方法,如果傳回的 User 物件不為 NULL 即代表 認證成功並發給 Token。

41

圖 3-14 DOD API 之帳號密碼認證服務流程圖

42

圖 3-15 Token 之 XML 格式示例與說明

2. 取得驗證圖片 http://ServerIP/accounts/captcha

當 DOD API 判斷需要 CAPTCHA 挑戰時,會回傳使用者如圖 3-15 第三部分格式的 XML,使用者者解析 XML 得到 Token (並非認證成功後傳回的 Token),並將其包含在 HTTP 表頭中,對 http://ServerIP/accounts/captcha 發出 HTTP 請求,即可得到一個如圖 3-16 的圖形驗證碼。

認證成功回傳 Token

<?xml version="1.0" encoding="utf-8"?>

<Token>

<Id>ASP.NET_SessionId=ipstt345ohytw255rxwgnkfs</Id>

</Token>

認證失敗

<?xml version="1.0" encoding="utf-8"?>

<Error>

<Message> UnAuthentication</Message>

<Token/>

</Error>

認證失敗要求進行 CAPTCHA 挑戰

<?xml version="1.0" encoding="utf-8"?>

<Error>

<Message>CaptchaRequired</Message>

<Token>ASP.NET_SessionId=knwvmq332om0ee3o3r3dvhbn</Token>

</Error>

<Token>:用以取得驗證圖片的 token,並非系統 token

<Id>:即為 token

43

HTTP 要求(Request)

GET /acounts/captcha HTTP/1.1 Host : http://ServerIP

Cookie : ASP.NET_SessionId=knwvmq332om0ee3o3r3dvhbn HTTP 回應(Response)

圖 3-16 圖形驗證碼

3. 取得讀者目前借閱紀錄 http://ServerIP/records

此服務功能為傳回讀者的目前借閱紀錄,使用者發出的 HTTP 請求需包含認證成功 後取得的 Token,DOD API 以 Token 判斷讀者是否登入成功,之後以 Token 為索引取得 帳號(userid),並實例化 NCTUAdapter 使用 GetRecordsByUserId 方法取得讀者目前借閱 紀錄回傳給讀者,詳細的流程圖如圖 3-17。回傳的結果為圖 3-18。

44

圖 3-17 DOD API 之取得讀者目前借閱紀錄服務流程圖

45

圖 3-18 借閱紀錄 XML 格式示例與說明

<?xml version="1.0" encoding="utf-8"?>

<List>

<DiscSize>640000000</DiscSize>

<Rights>

<UserId>0796795451</UserId>

<BeginDate>2009-11-02T12:12:00</BeginDate>

<EndDate>2010-01-02T23:59:00</EndDate>

</Rights>

<DiscSize>640000000</DiscSize>

<Rights>

<UserId>0796795451</UserId>

<BeginDate>2009-11-02T12:12:00</BeginDate>

<EndDate>2010-01-02T23:59:00</EndDate>

</Rights>

<DiscId>:條碼號(唯一 ID)

<DiscName>:書後附件名稱

<DiscSize>:書後附件光碟容量

<UserId>:讀者 ID

<BeginDate>:借閱日期

<EndDate>:歸還日期

46

4. 取得書後附件檔案結構 http://ServerIP/discs/[條碼號]

此服務功能為取得指定條碼號的書後附件檔案結構,使用者除傳入 Token 外還需提 供書後附件條碼號(discid),DOD API 將書後附件的目錄與檔案結構表示成 XML 格式,

並回傳給使用者,詳細的流程圖如圖 3-19。回傳的結果為圖 3-20。

圖 3-19 DOD API 之取得書後附件目錄與檔案結構服務流程圖

47

圖 3-20 書後附件檔案結構 XML 格式示例與說明

<?xml version="1.0" encoding="utf-8"?>

<Dictionary>

<Attributes>Archive</Attributes>

<CreationTime>2009-11-18T19:06:00.84375+08:00</CreationTime>

<LastAccessTime>2009-11-20T04:51:42.9375+08:00</LastAccessTime>

<LastWriteTime>1999-06-01T19:44:08+08:00</LastWriteTime>

<Length>825</Length>

<FileName>setup_notes.txt</FileName>

</FileInformation>

</value>

</item>

<item>

<key>

<string>\Chapter2</string>

</key>

<value>

<FileInformation>

<Attributes>Directory</Attributes>

<CreationTime>2009-11-18T19:06:00.84375+08:00</CreationTime>

<LastAccessTime>2009-11-25T15:51:42.03125+08:00</LastAccessTime>

<LastWriteTime>2009-11-18T19:06:00.96875+08:00</LastWriteTime>

<Length>0</Length>

48

5. 下載書後附件檔案 http://ServerIP/discs/[條碼號]/[檔案名稱]

此服務功能為取得書後附件檔案,使用者提供 Token,條碼號與檔案名稱,DOD API 回傳二進位檔案,詳細的流程圖如圖 3-21。

圖 3-21 下載書後附件檔案

49

相關文件