1. 程式人生 > >測試RESTful Web Services的三種方法

測試RESTful Web Services的三種方法

如今網站搞個開放API,弄個RESTful Web Services似乎早不是新鮮事了。尤其在Twitter、Facebook、Google等先行者的推動下,獲取其他網站的資源並進行Mashup變得越來越普遍。如今在SNS大行其道的日子裡,你不搞個“推薦該內容到人人網/開心網/新浪微博”這樣的連結,你都不好意思出去見人說“我是做網站的”。

就連我院的線上教學支援系統都打算分離出核心資料(即學生和課程的資訊),通過REST風格的Web服務來提供這些中心資料,支援其他功能(例如課程論壇、作業釋出和提交等)的實現。這樣做的好處自然是分離的資料可以再提供給今後更多的服務使用,比起傳統的全部使用本地資料庫的方法減少了冗餘和錯誤的產生。而其缺點在於加大了開發難度,以前可以很輕鬆的諸如資料表中外來鍵的功能全部得從第三方資源實現,一定程度上降低了網站的執行效率。同時,進行REST的開發和測試也變得不那麼直接了。雖然各種語言都有HTTP請求相關的類庫,但是本著

不重複發明輪子的精神,本文介紹了幾種方便的測試RESTful Web Services的工具。

REST簡單介紹

所謂REST,是Representational State Transfer,這個詞彙的中文翻譯很不統一,而且很晦澀,有叫“具象狀態傳輸”,有叫“表象化狀態轉變”,等等。通俗地講,REST風格的Web服務,是通過一個簡潔清晰的URI來提供資源連結,客戶端通過對URI傳送HTTP請求獲得這些資源,而獲取和處理資源的過程讓客戶端應用的狀態發生改變(不像那些遠端過程呼叫那麼直接地發生改變)。一般常用的對資源進行CRUD(Create, Read, Update 和 Delete)的四種HTTP方法分別是POST, GET, PUT, DELETE。一般的Web瀏覽器基本只會用到GET和POST兩種方法,但是根據
RFC 2616,HTTP請求方法除了前面提到的四種還有OPTIONS, HEAD, TRACE, CONNECT,一共8種。

REST源於Roy Fielding在2000年的博士論文,而關於RESTful Web服務最著名的書便是本文題圖的《RESTful Web Services》。順便提一句,我只是說說而已,這兩個東西我都沒看過,估計看了也看不懂。

RESTful Web Services測試工具推薦

不瞭解精深的理論沒關係,我們只要會使用就行了。

命令列控的最愛:cURL

cURL是一個很強大的支援各種協議的檔案傳輸工具,用它來進行RESTful Web Services的測試簡直是小菜一碟。這個工具基本上類Unix作業系統(各種Linux、Mac OS X)都自帶了,而Windows使用者就得去額外
下載了。

cURL的命令引數非常多,一般用於RESTful Web Services測試要用到下面四種引數:

  • -d/–data <data>:POST資料內容
  • -X/–request <command>:指定請求的方法(使用-d時就自動設為POST了)
  • -H/–header <line>:設定header資訊
  • -I/–head:只顯示返回的HTTP頭資訊
一個最簡單的例子,資源的獲取,不需要強行指定GET方法,直接在curl後面跟上URL即可:

[code light=”true”]
[email protected] ~
$ curl http://dayanjia.com/api/user/101250001/
{"id":"student1","name":"\u5b66\u751f\u4e00","num":"101250001",
"grade":"20101","courses":[{"id":1,"name":"\u8bfe\u7a0b\u4e00",
"active":false,"identity":0,"instructors":[{"id":"teacher1","na
me":"\u8001\u5e08\u4e00"}]},{"id":2,"name":"\u8bfe\u7a0b\u4e8c"
,"active":true,"identity":0,"instructors":[{"id":"teacher2","na
me":"\u8001\u5e08\u4e8c"}]},{"id":3,"name":"\u8bfe\u7a0b\u4e09"
,"active":true,"identity":0,"instructors":[{"id":"teacher3","na
me":"\u8001\u5e08\u4e09"}]}]}
[/code]

再看刪除遠端的一條記錄,並返回HTTP頭檢查操作是否成功:

[code light=”true”]
[email protected] ~
$ curl -I -X DELETE http://dayanjia.com/api/course/1/
HTTP/1.1 200 OK
Date: Thu, 12 Aug 2010 16:50:46 GMT
Server: LiteSpeed
Connection: close
X-Powered-By: PHP/5.2.14
Content-Type: text/html
Content-Length: 0
[/code]

需要指出的是,如果使用-d或者其他某些引數就不能直接看到返回的HTTP頭了,即不能將-d和-I同時使用。解決的辦法是採用-D/--dump-header引數並指定一個檔名,將header的資料儲存下來檢視。

瀏覽器控的最愛:各種外掛

既然普通的瀏覽器不支援除了GET和POST以外的操作,檢視和傳送HTTP header都很苦難,那就讓外掛來擴充套件它的功能吧!讓人們不離開瀏覽器就能進行各種測試,也是一種非常方便的選擇。如果你喜歡下面介紹的外掛,不妨到相應的頁面上給它們評星以支援作者的勞動。

Chrome下有一個Simple REST Client外掛,提供了一個簡單的表單進行各種HTTP操作,並可以看到返回的資訊。

Chrome下的外掛顯得有些寒磣,那麼同樣深受開發者喜愛的Firefox也有一款名為RESTClient的外掛,這款外掛由國人開發,功能上支援Basic和OAuth的登入header傳送,並且對於返回的XML資料還可以高亮顯示。

咖啡控的最愛:RESTClient

這裡的咖啡是什麼,你懂的。名字同樣很樸素,這是一個用Java寫的測試小工具,專案主頁上提到它有命令列和GUI兩種版本。為了方便操作我們選擇GUI版本來看看。既然是一款軟體,顯然就比剛才介紹的瀏覽器外掛功能更加強大。它支援應答正文的JSON和XML縮排和高亮,還可以一鍵搭建一個RESTful服務端,另外還提供了單元測試的功能。介紹的三種工具中,我最喜歡的還是這款了,尤其是它的縮排高亮功能非常實用,方便檢視。

RESTClient Tool 客戶端:下載:http://www.softpedia.com/get/Programming/Other-Programming-Files/RESTClient-Tool.shtml 原文轉載:http://blog.dayanjia.com/2010/08/3-ways-to-test-restful-web-services/