2012-07-25 53 views
0

最近,我一直在努力使用Python和Flask爲最終用戶公開RESTful API。目前,它只有GET方法,沒有發佈......直到現在。關於獲取RESTful GET JSON輸出並將其重定向到POST JSON輸入的想法

對我做出的一個有趣的請求是弄清楚是否可以接受GET請求,該請求輸出到JSON並將其重定向到另一個Web服務作爲POST請求。

認爲它像通過Web服務複製數據,如果這是有道理的。或者可能像「GET-redirect data-POST」。

爲了進一步推動點回家,我有一個簡單的GET請求:

urllib2.Request("http://localhost:5000/request/security/773/20110101") 

輸出爲JSON,我想利用這些數據,並張貼回:

http://localhost:5000/submit/transaction/773/20110101 

假設數據映射是一對一的(它是)。有沒有辦法做到這一點在服務器端的一個電話?這甚至是一件聰明的事情嗎?只是尋找想法,想法和意見。

+0

我遠離Web服務專家(因此評論),但我正在閱讀的一本書建議,要製作一個適當的RESTful應用程序,使用的HTTP動詞需要與其預期目的相匹配。雖然這不能回答你的問題,但我會在這種情況下詢問「爲什麼」。正如http://www.ibm.com/developerworks/webservices/library/ws-restful/中提到的*使用HTTP方法顯式*部分所述。 – Jared 2012-07-25 20:03:28

+0

感謝您的評論,Jared。我也遠離WS大師,但從我一直在閱讀的內容來看,O'Reilly的「RESTful Web服務手冊」描述了執行交易的一章。我希望查詢的內容或許是擴展了這個概念,並將GET請求的輸出和這些成爲我的交易。如果你有這本書,這是第213頁。 – Carlos 2012-07-25 20:08:19

+0

@ mastashaka57我沒有這本書。我認爲我擔心的問題是如果您將GET轉發到POST。請求的核心仍然有GET請求。如果這個請求會修改數據,我會非常不願意做一個GET請求,因爲這些請求可以被保存/緩存/等等。 – Jared 2012-07-25 21:24:33

回答

1

看起來很簡單。爲什麼不直接從你的請求/安全處理程序發帖?

def request_security_handler(): 
    .... 
    data = "Data" 
    urllib2.Request("/submit/transaction/773/20110101", data) 
    return data 

如果發佈是一個可選的東西,你可以做一個得到這樣的:

urllib2.Request("http://localhost:5000/request/security/773/20110101?RepostResultTo=/submit/transaction/773/20110101") 

然後:

def request_security_handler(RepostResultTo): 
    .... 
    data = "Data" 
    urllib2.Request(RepostResultTo, data) 
    return data 

在任何情況下這是一個單輪與服務器一起,服務器將不得不對POST進行自我檢測。客戶將無法從GET獲得結果,然後進行2次往返POST。

+0

感謝您的詳細回覆。 POST實際上是一項可選任務。 – Carlos 2012-07-25 20:16:14

+0

問題:我非常喜歡可選POST的概念。我是否可以使用自定義URI進行這種處理?也許我可以使用'http:// localhost:5000/submit/transfer/{account from}/{account to}/{date from}/{date to}?在服務器端,它會將適當的GET消息路由到/ request/security並將適當的POST消息路由到/ submit/transaction。輸入變量將覆蓋我的請求。也許你可以展示一些更詳細的例子? – Carlos 2012-07-25 20:40:50

+0

Yikes,這真的違背GET請求沒有任何副作用(超出日誌記錄和訪客計數)。@ mastashake57,如果你真的希望它在一個請求中進行,則反過來執行:POST到接收服務器,並提供有關如何獲取信息的信息,以便在POST請求的實體主體中發佈。 – 2012-07-26 06:38:33