Привет. Как в REST решается следующая задача: загрузка нескольких файлов + текстовые данные, причем, методом PUT? Как вгрузить 1 файл понятно, как отправить данные тоже понятно, но как отправить несколько файлов, причем с данными. Интересуют только best-practices. Нужно ведь сперва очистить тело запроса от файлов, сохранив их во временном хранилище (php://temp, хотя бы), затем уже читать текстовые данные (json-представление). Но как понять где что, и как различить 1 файл от другого? Или все-же PUT не используется для таких сложных задач?
Рест вообще штука слабо применимая в условиях пхп. Её просто за уши притягивают. Но. Что мешает тебе обработать твой запрос как угодно, ведь по факту это один запрос? Чего тебя пугает?
multipart/form-data А put или post - да никакой разницы Если не очень много мелких файлов - можно base64 в основном теле. Хотя чаще все же грузят файлы по-одному.
А как обработать multipart/form-data штатными средствами PHP? Видел скрипты парсящие запрос, но они грузят весь запрос в память.. а если там 1гб файл!? т.е. посылают файл POST запросом и возвращают данные для привязки файла к сущности? Типо как фейсбук делает? --- Добавлено --- Насколько мне известно, REST и PHP друг к другу никакого отношения не имеют, как и любой другой ЯП. REST это все-же клиент-серверная архитектура. Ничего. Просто хочу знать как люди делают и как правильно.
А он его сам обрабатывает, это классическая схема отправки формы, файлы будут доступны в $_FILES, а вот json выковыривать из input. В случае реста скорее наоборот, создание сущности, а потом пост на что-то вроде /сущность/ID/file Ну а что мешает посмотреть, как он делает
PUT даже и не думает обрабатывать. Весь PUT находится в потоке php://input, и никакие переменные не заполняются, независимо от заголовков. Ну так я посмотрел, вот и говорю. Если делать публикацию с изображением, то он сперва картинку грузит а потом уже по нажатию кнопки сохраняет все остальное.
Ну да, все так, не сообразил сразу. Но у меня есть серьезное подозрение, что там данные будут записаны во временный файл, который уже по php://input будет доступен, так что с памятью должно быть все ок. Но утверждать не берусь - нужно посмотреть исходники. Он, видимо, грузит в галерею, а потом уже прикрепляет из галереи. Короче, зависит от общей архитектуры, каких-либо стандартов тут нет.
не, я тестил через REST клиент (Postman, расширение для хрома, обалденная штука), все данные находятся в потоке. На php.net есть пример как загрузить 1 файл PUTом, там читается из php://input и пишется в файл. Ну, в принципе схема понятна, отделяем данные от ресурсов, сохраняя по отдельности. Других вариантов походу и нет, либо они не практичны.
Поток может быть файлом. В этом и суть потока, что ты со своей стороны не знаешь, из чего ты читаешь. Это нужно эксперементировать. Загрузи файл в несколько гигов и смотри расход памяти в процессе этого
типа того. Только вот пхпшники страдают странным и пытаются натянуть ужа на глобус, подбирая HTTP-коды ответа под свои задачи, что бред. Это раз. Два, в случае с сайтом иногда бывает удобно что-то добавить, что-то поменять, что-то удалить в одном запросе и нет никаких причин этого не делать.