Chúng tôi đang phát triển máy chủ với API REST, chấp nhận và phản hồi với JSON. Vấn đề là, nếu bạn cần tải lên hình ảnh từ máy khách đến máy chủ. Lưu ý rằng tôi đang nói về trường hợp sử dụng, nơi thực thể (người dùng) có thể có các tệp (carPhoto, licensePhoto) và cũng có các thuộc tính khác (tên, email ...), nhưng khi bạn tạo người dùng mới, bạn không gửi những hình ảnh này, chúng được thêm sau quá trình đăng ký.REST API - tập tin (tức là hình ảnh) chế biến - thực hành tốt nhất
Các giải pháp tôi biết, nhưng mỗi người trong số họ có một số sai sót
1. Sử dụng multipart/form-data thay vì JSON
tốt: POST và PUT yêu cầu như RESTful càng tốt, chúng có thể chứa các đầu vào văn bản cùng với tệp.
khuyết điểm: Nó không phải là JSON nữa, đó là dễ dàng hơn nhiều để kiểm tra, gỡ lỗi, vv so sánh với multipart/form-data
2. Cho phép cập nhật tập tin riêng biệt theo yêu cầu
POST để tạo người dùng mới không cho phép thêm hình ảnh (trong trường hợp sử dụng của chúng tôi như thế nào khi tôi bắt đầu), tải lên hình ảnh được thực hiện theo yêu cầu PUT dưới dạng multipart/form-data cho ví dụ/người dùng/4/carPhoto
tốt: Mọi thứ (ngoại trừ việc tải lên tệp) vẫn còn trong JSON, thật dễ dàng để kiểm tra và gỡ lỗi (bạn có thể ghi lại các yêu cầu JSON hoàn chỉnh mà không sợ độ dài của chúng)
cons: Nó không trực quan, bạn không thể POST hoặc PUT tất cả các biến của thực thể cùng một lúc và cũng địa chỉ này /users/4/carPhoto
có thể được xem xét nhiều hơn như một bộ sưu tập (trường hợp sử dụng chuẩn cho REST API trông như thế này /users/4/shipments
). Thông thường bạn không thể (và không muốn) GET/PUT mỗi biến của thực thể, ví dụ như người dùng/4/tên. Bạn có thể lấy tên bằng GET và thay đổi nó bằng PUT ở người dùng/4. Nếu có cái gì đó sau khi id, nó thường là bộ sưu tập khác, như người dùng/4/đánh giá
3. Sử dụng Base64
Gửi nó như JSON nhưng file mã hóa với Base64.
tốt: Tương tự như giải pháp đầu tiên, dịch vụ RESTful càng tốt.
khuyết điểm: Một lần nữa, kiểm tra và gỡ lỗi là tồi tệ hơn rất nhiều (cơ thể có thể có megabyte dữ liệu), có sự gia tăng về kích thước và cũng trong thời gian xử lý trong cả hai - client và server
Tôi thực sự muốn sử dụng giải pháp không. 2, nhưng nó có khuyết điểm của nó ... Bất cứ ai cũng có thể cho tôi một cái nhìn sâu sắc hơn về "những gì là tốt nhất" giải pháp?
Mục tiêu của tôi là có các dịch vụ RESTful với nhiều tiêu chuẩn được bao gồm nhất có thể, trong khi tôi muốn giữ nó càng đơn giản càng tốt.
Bạn cũng có thể thấy điều này hữu ích: http://stackoverflow.com/questions/4083702/posting-a-file-and-data-to-restful-webservice-as-json – Markon
Tôi biết chủ đề này cũ nhưng chúng tôi đã gặp vấn đề này gần đây. Cách tiếp cận tốt nhất mà chúng tôi có được là tương tự như số của bạn 2. Chúng tôi tải tệp lên thẳng API và sau đó đính kèm các tệp này vào mô hình. Với kịch bản này, bạn có thể tạo hình ảnh tải lên trước, sau hoặc tại cùng một trang với biểu mẫu, không thực sự quan trọng. Thảo luận tốt! –
@TiagoMatos - vâng, chính xác, tôi đã mô tả nó trong một câu trả lời mà gần đây tôi đã chấp nhận – libik