Chúng tôi đang phát triển máy chủ với API REST, chấp nhận và trả lời bằng JSON. Vấn đề là, nếu bạn cần tải hình ảnh từ máy khách lên máy chủ.
Lưu ý: và tôi cũng đang nói về trường hợp sử dụng trong đó thực thể (người dùng) có thể có nhiều 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 Không gửi những hình ảnh này, chúng được thêm vào sau quá trình đăng ký.
Các giải pháp tôi biết, nhưng mỗi giải pháp đều có một số sai sót
1. Sử dụng nhiều dữ liệu / biểu mẫu dữ liệu thay vì JSON
tốt : Các yêu cầu POST và PUT càng RESTful càng tốt, chúng có thể chứa các kiểu nhập văn bản cùng với tệp.
Nhược điểm : Nó không phải là JSON nữa, dễ kiểm tra, gỡ lỗi hơn, v.v. so với đa dữ liệu / biểu mẫu dữ liệu
2. Cho phép cập nhật các tệp riêng biệt
Yêu cầu POST để tạo người dùng mới không cho phép thêm hình ảnh (điều này cũng ổn trong trường hợp sử dụng của chúng tôi như tôi đã nói lúc đầu), tải lên hình ảnh được thực hiện bởi yêu cầu PUT dưới dạng nhiều dữ liệu / biểu mẫu cho ví dụ / users / 4 / carPhoto
tốt : Mọi thứ (ngoại trừ tệp tự tải lên) vẫn còn trong JSON, rất dễ kiểm tra và gỡ lỗi (bạn có thể đăng nhập hoàn thành các yêu cầu JSON mà không sợ độ dài của chúng)
Nhược điểm : 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à địa chỉ này /users/4/carPhoto
có thể được coi là một bộ sưu tập (trường hợp sử dụng tiêu chuẩn cho API REST trông như thế này /users/4/shipments
). Thông thường, bạn không thể (và không muốn) NHẬN / PUT từng biến thực thể, ví dụ 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 tại người dùng / 4. Nếu có một cái gì đó sau id, nó thường là một bộ sưu tập khác, như người dùng / 4 / đánh giá
3. Sử dụng Base64
Gửi dưới dạng JSON nhưng mã hóa tệp bằng Base64.
tốt : Giống như giải pháp đầu tiên, đó là dịch vụ RESTful nhất có thể.
Nhược điểm : Một lần nữa, kiểm tra và gỡ lỗi tồi tệ hơn rất nhiều (cơ thể có thể có megabyte dữ liệu), có sự gia tăng kích thước và cả thời gian xử lý ở cả - máy khách và máy chủ
Tôi thực sự muốn sử dụng giải pháp không. 2, nhưng nó có nhược điểm của nó ... Bất cứ ai cũng có thể cho tôi cái nhìn sâu sắc hơn về giải pháp "cái gì là tốt nhất"?
Mục tiêu của tôi là có các dịch vụ RESTful với càng nhiều tiêu chuẩn càng tốt, trong khi tôi muốn giữ nó đơn giản nhất có thể.