najlepsze podejście do projektowania spoczynkowej usługi internetowej z danymi binarnymi, które mają być pobierane z przeglądarki
Zajmuję się tworzeniem usługi internetowej odpoczynku json, która zostanie wykorzystana z jednej aplikacji internetowej zbudowanej z backbone.js
Ten interfejs API umożliwi konsumentom przesyłanie plików związanych z pewną jednostką, takich jak raporty PDF związane z projektem
Poszukując i wykonując jakieś badania nad przepełnieniem stosu, przyszedłem z tymi możliwymi podejściami:
Pierwsze podejście: pole danych zakodowane w base64
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
content: '<base64 encoded binary data>'
}
Drugie podejście: wieloczęściowy post:
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
}
w odpowiedzi otrzymam identyfikator raportu, a wraz z nim wydam inny post
POST: /api/projects/234/reports/1/content
enctype=multipart/form-data
a następnie wyślij dane binarne
(Zerknij na to:https://stackoverflow.com/a/3938816/47633)
Trzecie podejście: opublikuj dane binarne w osobnym zasobie i zapisz href
najpierw generuję losowy klucz u klienta i umieszczam tam zawartość binarną
POST: /api/files/E4304205-29B7-48EE-A359-74250E19EFC4
enctype=multipart/form-data
i wtedy
POST: /api/projects/234/reports
{
author: 'xxxx',
abstract: 'xxxx',
filename: 'xxxx',
filesize: 222,
href: '/api/files/E4304205-29B7-48EE-A359-74250E19EFC4'
}
(Zobacz:https://stackoverflow.com/a/4032079/47633)
Chciałem tylko wiedzieć, czy jest jakieś inne podejście, które mógłbym wykorzystać, zalety / wady każdego z nich i czy istnieje jakikolwiek ustalony sposób radzenia sobie z tego rodzaju wymaganiami
Wielkim argumentem, jaki widzę w pierwszym podejściu, jest to, że muszę w pełni załadować i zakodować plik base64 na kliencie
kilka przydatnych zasobów:
Prześlij dane binarne do aplikacji RESTfulJaki jest dobry sposób przesyłania danych binarnych do usługi API REST HTTP?Jak przesłać plik z metadanymi za pomocą usługi internetowej REST?Zły pomysł na przeniesienie dużego ładunku za pomocą usług internetowych?https://stackoverflow.com/a/5528267/47633