[F10_WebComp] 期末專題報告 - Web API實作與心得

 

Introduction

本專題主要在一個已建立好的服務上發展Web API實作,其中使用到REST軟體架構以及Zend Framework為開發工具。實驗資料來自於SHS健康管理系統,資料內容包含使用者健康記錄(身高、體重、血壓、血糖等多種資料)以及睡眠記錄,本專題針對使用者健康記錄部分實作Web API,內容包含資料的輸入與輸出,並標準資料交換格式做傳輸(XML與JSON)。除了實驗性開發外,希望本系統未來能夠與認證授權機制結合,在真正提供服務的平台上運作,供第三方服務或開發者使用資料做混搭。接下來的章節會針對各項技術與背景做較深入的介紹。

 

Web API

廣義來說,Web API是一種HttpRequest訊息的集合,其內容主要含有架構性的資料(例如XML、JSON、HTML等具有標準格式的資料),透過Http做資料交換與傳送。目前許多Web服務都已提供相當多的API與相關教學,提供函式庫以及教學範例讓開發者能夠輕易上手,取得服務的資料,從各種服務取得的資料重新運用,成為新的應用或服務(Mashup)。

目前Web API發展方向逐漸趨向於使用REST架構,取代SOAP的地位,主要原因在於,SOAP是具有標準的一種通訊協定(Peotocol),使用這個通訊協定交換資料,必須根據SOAP所訂定的格式建立XML,然後才能將資料放入其中,中間程序較繁瑣,限制也較多。而相較於SOAP,REST提供了簡便的方式達到資料交換的效果,並且對資料內容並沒有多加限制或規範,對API提供者以及第三方開發者而言無非是一種更好的選擇。因此本專題在開發架構部分使用了REST軟體架構,讓API在開發上以及使用上都能更加方便,透過HttpRequest就能達到取得、傳送資料的效果。

 

REST Architecture

REST是由Roy Fielding博士所提出的一種軟體設計架構,與SOAP在本質上相差甚多,REST屬於一種「風格」(style),在設計上沒有強制的限制,只要風格類似即可;而SOAP是一種通訊協定(Protocol),在使用上必須遵照其規範通訊才能被機器所接受。REST精神在於使用Uri指定並存取資源,存取包含了新增、刪除、查詢以及修改,正好對應到HTTP Request的POST、DELETE、GET、PUT等類型的請求方法。資源的表現形式沒有特別的限制,端看解讀的是人或機器,可根據不同接收端給予更彈性的調整。

REST在傳輸上遵守Client-Server的架構,Client端向Server發送Http Request(可能含有POST資料或GET附加的參數等等),Server確認資訊無誤後便根據對方所要求的資料取出並送至要求端(Http Response),資料則放在Response內,Client可自行解析或運用。

如同前文所提,本專題使用REST設計整個軟體架構,要求端只需要有發送Http Request能力以及解析XML資料的平台或程式即可,不需要規定語言以及特定系統要求,達到跨平台、跨程式語言的效果。

 

Zend Framework

Zend是一種開放原始碼、完全物件導向、建基於PHP上的一個網路應用開發框架(framework),並且提供了MVC(model、view、controller)模板供開發者建置,搭配物件導向概念以及模組化設計,可以節省開發時間並且讓系統易於維護。除此之外,Zend提供豐富的函式庫與功能,讓開發者不需要從底層開始開發,例如支援多種資料庫(MYSQL、DB2、Oracle等等)以及REST Client/Server等物件,開發者只需要呼叫物件並使用其函式即可達到功能。目前已有一些知名網路服務提供Zend framework的API開發教學與應用,例如Google、Amazon、YAHOO!、Flickr等等,而本專題也將參考這些服務的API並使用Zend元件建構出自己的Web API系統。

 

Implement

本專題主要運用到以下幾種Zend framework的元件來實作系統:

Server端: 

Zend \ REST \ Server

Zend \ DB \ MySQL

Zend \ JSON

Client端: 

Zend \ REST \ Client

Zend \ HTTPClient

功能部分則是完成新增資料以及輸出資料的部分,如下表所示:

新增健康記錄資料 

匯入資料( XML )

 

流程:

1. Client端將健康記錄包裝成標準匯入格式 

2. 資料放入POST參數中 

3. 指定Uri並送出HTTP Request

4. 格式若正確 資料將匯入系統資料庫 

 

查詢健康記錄資料 

取得健康記錄資料 

指定資料格式( XML、JSON ) 

 

流程:

1. Client端指定Uri與相關參數(包括指定輸出格式)

2. 送出HTTP GET Request

3. 系統送出XML或JSON格式資料 

 

 

Future Work

完成移植並運作於正式的系統

 

實現完整的MVC架構,使往後接任開發者能夠方便管理與維護,甚至開發延伸功能等工作。

 

結合認證與授權機制,使隱私性的資料(個人健康記錄)獲得保障。

 

提供完整Guideline與教學,讓更多第三方服務參與混搭與開發更多的延伸服務。