2013-05-14 55 views
4

我正在現有應用程序之上創建一個REST API。其中一項功能需要將json數據與用戶上傳的文件一起使用。REST API Design將JSON數據和文件發送到同一請求中的api

我不確定如何將相同請求中的文件和json數據發送到REST API?

我json的一部分工作,我測試使用curl:

curl -XPOST http://localhost:8080/myapp/foo -d '{"mydata": { 
    "name": "somename", 
    "gender": "male" 
}}' 
//I would like to send an image (say, profile image) with the above request as well. 

我使用的是Grails應用程序,所以我得到這個數據在我的控制器像這樣:new Foo(params.mydata)

問題

  • 是否可以發送JSON數據和文件在同一請求API?如果是這樣,我怎樣才能使用捲曲或REST控制檯(鉻擴展)
  • 這個請求的contentType會是什麼?
  • 我打算髮送另一種格式的數據,如果這意味着我可以在同一請求中發送文件和其他數據(字符串)。我不是綁在JSON

更新

我發現another SO question被問同樣的事情。從the answer to that question似乎只有三個選擇,並沒有一個表示它可能在同一個請求中發送json數據和文件。這是非常令人沮喪的......我會繼續討論這個問題,看看是否有人有其他想法。

回答

2

我認爲做到這一點的「正確」方法是使用多部分信息。這樣,您可以使用相應的正確MIME類型發佈JSON和圖像。 wikipedia article on multipart mime types就是這樣一個例子。它看起來像Apache httpcommons和澤西支持這種事情,顯然curl does too!

+0

我很困惑。你的回答是令人鼓舞的,但我發現了另一個與我的問題一致的SO問題,似乎只有三種選擇可用。沒有一個說JSON數據和文件可以在相同的請求發送:http://stackoverflow.com/questions/4083702/posting-a-file-and-data-to-restful-webservice-as-json – birdy

+2

I即將建議在發佈的鏈接中包含選項3的內容 - 發送元數據,服務器響應一個URI以發佈圖像,將圖像發送到該URI。不過,多部分/混合MIME類型允許您在同一條消息中擁有多個內容類型,並由您定義的任何「邊界」分隔。這將使整體內容類型= multipart/mixed,然後接下來的兩個塊是application/json,然後是image/jpeg。 – David

+0

好的,讓我試試'multipart/mixed'內容類型,它有兩個塊'application/json'和'image/jpeg'。等等,第二塊'image/jpeg'將如何工作?將文件上傳?試圖找出如何發送此請求作爲與REST控制檯Chrome插件測試:) – birdy

相關問題