星期五, 7月 05, 2013

Restful Web API 服務與測試分離

過去我的 Restful Web API 在跨域限制下為了方便,都把服務本身與測試服務的網頁放在同一個網站,但這讓人蠻不舒服的。想要把它們分開,網路上大致流傳著兩種解法:JSONP 與 Cross-origin resource sharing,研究之後發現,前者其實改變了服務的介面,不敢領教,所以決定用後者。有幾個要點(假設服務在 http://localhost/myService,測試首頁在 http://localhost:12345/test.html):
  • 服務端要設定對測試來源開放,以 IIS 7 為例,在 Web.config configuration -> system.webServer -> httpProtocol -> customHeaders 需要以下的節點:<add name="Access-Control-Allow-Origin" value="http://localhost:12345" />
  • 測試端我用的是 jQuery 發送 Ajax,它當然也要知道服務在哪提供,像這樣:$.ajax({url: "http://localhost/myService", success: ..., error: ...});
  • 測試端使用的瀏覽器會挑,像 IE 10 以前都不行,但 Firefox、Chrome 就沒這問題,可能要注意一下。
  • 若在 Visual Studio 同一 Solution,StartUp Project 設在測試專案,Start Page 設在測試首頁,服務專案的 Properties -> Web -> Start Actions 設在「Don't open a page. Wait for a request from an external application.」,這樣才會同時載入兩個網站。

沒有留言:

張貼留言