2013-08-14 72 views
15

Tôi có một máy chủ và tôi cần tải lên các tệp cùng với một số trường từ máy khách đến máy chủ. Tôi hiện đang sử dụng dữ liệu đa chuẩn/biểu mẫu.Có sử dụng multipart/form-data tốt hơn không thì JSON + Base64?

Tuy nhiên, tôi đã thấy rằng việc sử dụng dữ liệu nhiều phần/biểu mẫu không phải là lý tưởng. Các đối tượng trên máy chủ của tôi có thể có các đối tượng khác được lồng trong chúng, và do đó được biểu diễn như một đối tượng JSON với các đối tượng JSON khác được nhúng bên trong.

Tôi muốn khách hàng bắt đầu thực hiện các yêu cầu POST/PUT bằng cách sử dụng biểu diễn JSON chính xác như mong đợi trong yêu cầu GET đến máy chủ, theo cách REST-ful. Bằng cách này, tôi không phải làm phẳng các trường có thể được lồng ghép một vài lớp trong đối tượng JSON để sử dụng dữ liệu nhiều phần/biểu mẫu.

Vấn đề là, JSON không đại diện cho dữ liệu nhị phân. Multipart/form-data dường như không có cách để biểu diễn các trường được lồng trong các giá trị của các trường khác. Nhưng nó có xử lý tốt hơn các tập tin tải lên.

Tôi không biết cách thiết kế này. Tôi có nên chỉ có khách hàng tải lên JSON với các trường được mã hóa trong base64 và nhận 25% lượt truy cập không? Hoặc tôi nên có đối tượng JSON được đại diện như một loại biến "json" trong yêu cầu dữ liệu đa dạng/biểu mẫu và có tệp nhị phân được tải lên dưới dạng biến khác không?

Trả lời

6

Tôi có nên tải ứng dụng khách lên JSON với các trường được mã hóa trong base64 và nhận 25% lượt truy cập không?

Lần truy cập sẽ là 33% kể từ 4/3 = 1,33.

Hoặc tôi nên có đối tượng JSON được biểu diễn dưới dạng một số loại "json" biến trong một yêu cầu/form-data dung nhiều, và có nhị phân tập tin được tải lên như một biến khác?

Điều này sẽ hiệu quả.

Bạn cũng có thể xem xét cách tiếp cận này: gửi tất cả các tệp bằng cách sử dụng nhiều phần, sau đó nhận một số nhận dạng tệp dưới dạng phản hồi. Đặt số nhận dạng này vào json của bạn và gửi nó theo cách bạn muốn. Cách tiếp cận này có thể mang lại lợi ích nếu bạn có nhiều tình huống trong đó bạn gửi tệp: bạn luôn có thể gửi chúng đến máy chủ với cùng một yêu cầu, sau đó nhận danh tính của chúng; sau đó làm với họ những gì bạn thích.

+0

Cách tiếp cận cuối cùng ủng hộ các cuộc gọi riêng biệt (một cho hình ảnh Multipart và một cho dữ liệu JSON) là thú vị. Mối quan tâm duy nhất là 2 cuộc gọi API thay vì một cuộc gọi API. Ofcourse, thương mại này tắt là ứng dụng cụ thể. –