您好,登錄后才能下訂單哦!
這篇文章主要介紹“JSON文件上傳操作實例分析”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“JSON文件上傳操作實例分析”文章能幫助大家解決問題。
一個常見的錯誤是關注操作所需的特定文件格式。相反,我們應該考慮我們想要表達的操作。文件格式僅決定用于操作的媒體類型。
例如,假設我們要設計一個 API,讓用戶將頭像圖片上傳到他們的用戶帳戶。
在這里,出于各種原因,將頭像圖像與用戶帳戶資源分開通常是一個好主意:
頭像圖像不太可能改變,因此它可能是緩存的一個很好的候選者。另一方面,用戶帳戶資源可能包含諸如上次登錄日期之類的經常更改的內容。
并非所有訪問用戶帳戶的客戶端都可能對頭像圖像感興趣。因此,可以節省帶寬。
對于客戶端來說,通常最好單獨加載圖像(想想使用 <img> 標簽的 Web 應用程序)
可以通過以下方式訪問用戶帳戶資源:
/users/<user-id>
我們可以想出一個代表頭像圖像的簡單子資源:
/users/<user-id>/avatar
上傳頭像是一個簡單的替換操作,可以通過 PUT 表示:
PUT /users/<user-id>/avatar
Content-Type: image/jpeg
<image data>
如果用戶想要刪除他的頭像,我們可以使用簡單的 DELETE 操作:
DELETE /users/<user-id>/avatar
當然,客戶需要一種顯示頭像的方法。因此,我們可以使用 GET 提供下載操作:
GET /users/<user-id>/avatar
返回
HTTP/1.1 200 Ok
Content-Type: image/jpeg
<image data>
在這個簡單的例子中,我們使用了一個帶有常見更新、刪除、獲取操作的新子資源。唯一的區別是我們使用圖像媒體類型而不是 JSON 或 XML。
讓我們看一個不同的例子。
假設我們提供了一個 API 來管理產品數據。我們希望通過一個選項來擴展此 API,從上傳的 CSV 文件中導入產品。我們應該考慮一種表達產品導入操作的方法,而不是考慮文件上傳。
可能最簡單的方法是將 POST 請求發送到單獨的資源:
POST /product-import
Content-Type: text/csv
<csv data>
或者,我們也可以將其視為產品的批量操作。PATCH
方法是一種表達對集合的批量操作的可能方式。在這種情況下,CSV 文檔描述了對產品集合的期望更改。
例如:
PATCH /products
Content-Type: text/csv
action,id,name,price
create,,Cool Gadget,3.99
create,,Nice cap,9.50
delete,42,,
此示例創建兩個新產品并刪除 id 為42的產品。
處理文件上傳可能需要相當長的時間。所以考慮將其設計為異步 REST 操作。
在某些情況下,我們可能需要將額外的元數據附加到文件中。例如,假設我們有一個 API,用戶可以在其中上傳假日照片。除了實際的圖像數據,照片還可能包含描述、拍攝地點等。
在這里,我會推薦使用兩個單獨的操作,原因與上一節中關于頭像圖像的原因類似。即使這里的情況有點不同(數據直接鏈接到圖像),它通常也是更簡單的方法。
在這種情況下,我們可以首先通過發送實際圖像來創建照片資源:
POST /photos
Content-Type: image/jpeg
<image data>
作為回應,我們得到:
HTTP/1.1 201 Created
Location: /photos/123
之后,我們可以將額外的元數據附加到照片中:
當然,我們也可以反過來設計,在圖像之前發送元數據。
如果無法在單獨的請求中拆分文件內容和元數據,我們可以使用Base64 編碼將文件嵌入到 JSON/XML 文檔中。使用 Base64 編碼,我們可以將二進制格式轉換為文本表示,該文本表示可以集成到其他基于文本的格式中,例如 JSON 或 XML。
示例請求可能如下所示:
POST /photos
Content-Type: application/json
{
"width": "1280",
"height": "920",
"filename": "funny-cat.jpg",
"image": "TmljZSBleGFt...cGxlIHRleHQ="
}
在單個請求/響應中傳輸圖像數據和元數據的另一種可能方法是多部分媒體類型。
多部分媒體類型需要一個邊界參數,用作不同正文部分之間的分隔符。以下請求由兩個正文部分組成。第一個包含圖像,而第二個部分包含元數據。
例如:
POST /photos
Content-Type: multipart/mixed; boundary=foobar
--foobar
Content-Type: image/jpeg
<image data>
--foobar
Content-Type: application/json
{
"width": "1280",
"height": "920",
"filename": "funny-cat.jpg"
}
--foobar--
不幸的是,多部分請求/響應通常很難處理。例如,并非每個 REST 客戶端都能夠構建這些請求,并且很難在單元測試中驗證響應。
關于“JSON文件上傳操作實例分析”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。