簡體   English   中英

為RESTful POST api使用multipart / form-data Content Type是一個好習慣嗎?

[英]Does using multipart/form-data Content Type for a RESTful POST api a good practice?

我有一種情況,我必須編寫一個api來創建一個資源,我需要接受的數據字段是一個基本上是html文件內容的字符串。 正如我所看到的,我可以選擇將整個事物構造為json對象,其中此字段是帶有urlencoded html字符串的字符串字段,並且內容類型為multipart / form-data,其中每個字段和html字符串( UTF-8編碼)是消息的一部分。
不使用json是我不滿意的事情,因為我覺得違反REST標准沒有構建我即將創建的實體的內容因此消費者失去了信息,因為他們無法立即看到我的信息關於提供給它的數據的api定義。 但實際上multipart / form-data處理像html文件內容更好,更有效的東西,因為我不必對它進行urlencode,也可以控制char編碼。
在當前背景下什么是更好的方法並堅持RESTful原則? 我還應該注意其他權衡嗎? 如何用嵌入的巨大字符串字段(~200 Kb)解析json?
編輯 : - 我正在閱讀有關SO的一些類似問題,其中一個突出的方法是使用元數據進行第一次調用以創建實體,然后將文件作為UPDATE進程上傳到我們使用的創建實體的兩步方法多部分/格式的數據。 在這種情況下,我想,我要問的是聲音是一種方法,我在單個api調用中將元數據和文件作為多部分數據發送,其中每個元數據字段實際上是多部分消息的一部分,文件也是如此。

將文件上傳到REST API的規范方法是使用multipart / form-data。 正如W3推薦指南所說:

內容類型“multipart / form-data”應該用於提交包含文件,非ASCII數據和二進制數據的表單。

Multipart / form-data比base64具有代表二進制數據的優勢。 堅持REST / Http理念,簡化API客戶端的開發。

從Forms:multipart / form-data返回值

W3推薦指南

好的做法是每當文件與數據庫字段一起上傳到服務器時使用multipart / form-data。 不要將base64 JSON字符串作為請求發送到您的Rest API,因為它可能會破壞文件或降低應用程序的性能。

就為消費者記錄multipart / form-data Rest API而言,您必須強制API使用者使用您在Web服務中預定義的相同表單字段。

從表單返回值:multipart / form-data

我開始在客戶端的每個地方使用FormData對象,代替常規表單輸入字段,用於動態REST帖子。 FormData在各種教程中都是積極的,所以我選擇了它。

然而,在線下,這導致我將表單數據解碼為我的Go結構時出現問題。 FormData對象作為“multipart / form-data”發送(無論發送的文件如何),我相信Go中的解碼器沒有將原始數據轉換回字符串形式。 最終我的SQL查詢引起了恐慌,因為十六進制數據是在字符串應該發送的地方發送的。

因此,通過一些調整,我可以使用FormData但是我決定恢復簡單的通用建議:僅對發送文件時的特殊情況使用“multipart / form-data”。 否則,只需使用常規的“application / x-www-form-urlencoded”即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM