2012-03-03 72 views
2

我有幾個Web服務調用,我想不出一個用REST做的好方法 - 他們覺得像'做'方法而不是數據操作。這個REST實現應該使用哪些資源?

一個只是說服務器「重新發送確認電子郵件給用戶xyz」,所以在SOAP中它可能是ResendConfirmationEmail(user)。這在REST中如何實現?什麼資源名稱應該在URI中使用?

另一種情況是我們用一些虛擬數據初始化數據庫並返回結果表和它們的行數,所以在SOAP中它可能是InitializeDatabase()。再說一次,在REST中URI應該是什麼樣子,並且這仍然可以作爲一個調用完成(初始化並返回數據庫摘要信息),還是必須將它分成兩個調用(一個用於初始化,一個用於獲取數據庫彙總信息)?

回答

2
  1. 重新發送(或發送對這個問題)不是冪等操作。這是POST的直接指示。作爲一個URI,我會建議沿着

    POST /user/1234/mailbox 
    

    線的東西。如果你真的想和超越,而且您的應用做了一些內部記錄的,或者具有一個界面到您的郵件隊列,則可能也很高興發送GET請求到新創建的資源(例如GET /user/1234/mailbox/<EMAIL ID>並查看電子郵件的狀態)。這顯然是一個鐘聲哨響的功能,但它可以讓你用RESTful資源思維來思考,即使在看似非典型的情況下。

  2. 與#1不同,初始化DB將被認爲是冪等的,但顯然是不安全的。 PUT是自然的候選人。由於Mr. Fielding himself put it,PUT並不一定意味着存儲一些東西。這是一個例子。至於URI,我會推薦一個標識您的系統或應用程序的標識。也許像/my-app-name或類似/conf/system的東西。人們甚至可以使用/來爭辯。您甚至可以在PUT請求的主體中傳遞配置選項。

    至於獲得系統的狀態,我會建議只是做一個單獨的GET請求到相同的URI,但我想不出爲什麼你也不能只是能夠包括這個相同的總結部分PUT響應。

    邊注:東西這是不安全的,你一定要確保你有到位了堅實的權威性層。

+0

嗨,謝謝你的回覆。你可以在PUTTING上擴展一下到'/ my-app-name'嗎?你會如何建議我向服務器表明我想重置數據庫,而不是爲該應用程序執行其他操作? – Jez 2012-03-03 19:15:19

+0

因此,在這種情況下,我想我會將每個「配置」或「服務」視爲資源。你可以使它更像'/ my-app-name/db',甚至只是'/ service/db'或'/ conf/db'。這樣你也可以管理與應用程序相關的其他服務。一個REST風格的應用程序本身是一個RESTful應用程序,這是一件非常美妙的事情。 – nategood 2012-03-03 19:32:09

+0

我明白將URI映射到數據庫概念的想法 - 我的意思是,我正在向該URI注入什麼?不是數據庫的內容,因爲我只是想告訴它「初始化數據庫」,而不是實際提供虛擬數據。 – Jez 2012-03-03 19:35:30

相關問題