Ответ 1
Зачем вам нужны сеансы? Это для целей аутентификации и авторизации? Если это так, я бы использовал http basic с SSL или digest. Как таковой нет начального или конечного сеанса, поскольку HTTP не имеет статуса и заголовки безопасности отправляются по каждому запросу.
Предложение ресурса для загрузки было бы непосредственно отображать как частную файловую систему
# returns all files and subdirs of root dir
GET /{userId}/files
GET /{userId}/files/file1
GET /{userId}/files/dir1
# create or update file
PUT /{userId}/files/file2
При загрузке содержимого файла вы будете использовать тип многостраничного контента.
Пересмотренный ответ после комментария
Я бы запрограммировал ваше разделение файлового содержимого и полезной нагрузки, введя ссылку (в файл-содержимое) внутри загружаемой полезной нагрузки. Это облегчает структуру ресурсов.
Ресурс 'upload' представления:
{
"upload-content" : "http://storage.org/2a34cafa" ,
"metadata" : "{ .... }"
}
Действия с ресурсами:
# upload file resource
POST /files
-> HTTP 201 CREATED
-> target location is shown by HTTP header 'Location: /files/2a34cafa
# /uploads as naming feels a bit more natural as /files
POST /sessions/{sessionId}/uploads
-> HTTP 201 CREATED
-> HTTP header: 'Location: /sessions/{sessionId}/uploads/1
-> also returning payload
# Updating upload (like metadata)
/PUT/sessions/{sessionId}/uploads/1