2013-08-14 18 views
15

Mam serwer i muszę przesłać pliki wraz z niektórymi polami od klienta do serwera. Obecnie korzystam ze standardowej wieloczęściowej/formularza danych.Czy korzystasz z multipart/form-data lepiej niż JSON + Base64?

Zauważyłem jednak, że używanie wieloczęściowych/formularzy danych nie jest idealne. Obiekty na moim serwerze mogą zawierać inne obiekty zagnieżdżone w nich, a zatem są reprezentowane jako obiekt JSON z innymi osadzonymi obiektami JSON.

Chciałbym, aby klient zaczął tworzyć żądania POST/PUT przy użyciu reprezentacji JSON dokładnie takiej, jakiej oczekiwałby w żądaniu GET dla serwera, w trybie REST-ful. W ten sposób nie muszę spłaszczać pól, które mogą być zagnieżdżone w kilku warstwach obiektu JSON w celu użycia danych wieloczęściowych/formularzy.

Problem polega na tym, że JSON nie reprezentuje danych binarnych. Multipart/form-data nie ma sposobu na reprezentowanie pól zagnieżdżonych w wartościach innych pól. Ale znacznie lepiej radzi sobie z przesyłaniem plików.

Nie rozumiem, jak to zaprojektować. Czy mam po prostu przesłać klientowi JSON z polami zakodowanymi w base64 i przyjąć 25% trafień? Czy powinienem mieć reprezentowany obiekt JSON jako pewną zmienną "json" w żądaniu Multipart/dane formularza, a pliki binarne powinny być przesłane jako inna zmienna?

Odpowiedz

6

razie mam tylko JSON wysyłania klienta z polami kodowanych w base64 i wziąć 25% trafienie?

Uderzenie wyniesie 33%, ponieważ 4/3 = 1,33.

Albo powinienem mieć obiekt JSON jest reprezentowany jako pewnego rodzaju „json” zmiennej we wniosku/form-data wielowarstwowym i mieć binarne pliki mają być dodane jako innej zmiennej?

To powinno zadziałać.

Można również rozważyć następujące podejście: wysłać wszystkie pliki przy użyciu wieloczęściowego, a następnie uzyskać kilka identyfikatorów plików w odpowiedzi. Umieść te identyfikatory w swoim jsonie i wyślij je w dowolny sposób. Takie podejście może być korzystne, jeśli masz wiele scenariuszy, w których wysyłasz pliki: możesz zawsze wysłać je na serwer z tym samym żądaniem, a następnie uzyskać ich identyfikatory; po tym zrób z nimi to, co lubisz.

+0

Interesujące jest ostatnie podejście promujące oddzielne połączenia (jedno dla obrazu wieloczęściowego i drugie dla danych JSON). Jedynym problemem są dwa wywołania interfejsu API zamiast jednego. Oczywiście, ten handel jest specyficzny dla aplikacji. –

Powiązane problemy