2013-01-03 30 views
1

我都是爲REST webservices服務的,我的公司有一個適用於REST而不是SOAP的策略。面向非資源型web服務的RESTful

但是,我需要公開一個不適合資源範例的web服務。它本質上是一個計算,我需要發送大量參數(大約20個字段)並檢索一個數字。

我想過使用HTTP POST並在請求正文中發送JSON對象。這裏的問題是,我的web服務支持SOAP-WS和REST,並且這種方法不會落入任何這些類別中。

我的問題是,這裏有什麼選擇?我可以使它適合RESTful WS嗎?

回答

4

正如你所提到的,當你在資源上公開CRUD操作時,REST很有意義。通常這些資源被保存在一些數據庫或存儲機制中。

在你的情況下,我猜沒有存儲或資源(你提供了一堆數字並得到一個結果,沒有被存儲,是真的嗎?)。所以你將無法真正將這樣的WS稱爲「RESTful」。

這就是說REST更多的是「哲學」。你可以拿起你喜歡的作品並使用它們。你的想法是實現一個POST,在輸入JSON結構並返回一個JSON結果聽起來不錯。你也可以發佈POST「application/x-www-form-urlencoded」內容(一個常規的表單提交併返回結果爲「text/plain」,如果有意義的話)

這個想法是構建一個簡單易懂,易於操作的WS。 。肥皂-WS正好相反;)

0

我看不出有任何理由爲什麼不能RESTful的。考慮一個特定的計算運行是一個擁有自己身份的資源(/calculation/ID123);然後您可以執行POST到/calculation以創建一個新的,在/calculation/ID123/paramA上使用GET/PUT以使用特定參數,並在GET上使用/calculation/ID123/result來檢索計算結果(或說明計算結果不可用於一些原因)。當然,在/calculation上的GET將是您可以看到的已保存計算列表的檢索,/calculation/ID123上的GET將檢索上面概述的子資源(以及您想要提供的任何其他信息)的描述,以及清除特定的計算是一個DELETE。

擁有大量子資源和高度瞬態資源沒有任何問題。要記住的重要一點是,客戶端不應該使用URL。 (我不知道在這種情況下內容協商是否有用;這實際上取決於我想的特定計算。)

+0

恕我直言,這似乎有點矯枉過正。我相信這裏問題的自然本質就是函數*,就像'f(x)= ...'一樣,儘管可以強制進入,但這不是真正的資源。 –