2014-09-25 8 views
0

Я создаю веб-API, и у меня есть сценарий, когда пользователи захотят загружать кучу данных навалом, которые затем будут загружаться в базу данных в виде нескольких отдельных записей. Эти данные могут быть совершенно новыми и, следовательно, созданы, или данные могут уже существовать и, таким образом, обновляться. Определения для POST и PUT, похоже, ожидают работать только с одним фрагментом данных, а созданный код состояния отражает это при предоставлении местоположения.Как разрешить пользователю создавать/обновлять объемные данные и сохранять спокойствие?

У меня уже есть методы, которые позволяют создавать или обновлять один кусок данных. Должен ли я писать дополнительные методы для облегчения создания и обновления этих объемных данных или я должен ожидать, что пользователь сделает индивидуальные вызовы (возможно, сотни тысяч раз) для загрузки своих данных? Что я должен возвращать в отношении кодов состояния и других данных? Какие глаголы запроса должны определять эти массовые вызовы?

ответ

0

Способ RESTful для создания нескольких элементов внутри коллекции - использовать PUT для всей коллекции.

Таким образом вы делаете запрос на замену всей коллекции, поэтому вам необходимо передать как старые, так и новые элементы, но новые будут созданы сервером.

Предположим, у вас был только один элемент в коллекции предметов, называемый «старый элемент». Здесь вы запрашиваете обновление коллекции, чтобы иметь два новых элемента.

PUT /items 

[{ Name: "old item"}, { Name: "new item 1"}, { Name: "new item 1"}] 

Вам не нужно возвращать любое содержимое внутри успешного ответа PUT, потому что успех в данном случае означает, что точное состояние Запрашиваемый вами был применен. Поэтому он оставляет код состояния 204.

И так как вы обновляете весь комплект ресурс, вы не возвращаете 201 независимо от того, были ли созданы новые объекты или нет.

+0

Параметры/тело вызова API - это то, что я уже выложил. Я наклонялся к ПУТ, так что это хорошо. Но настоящие (жесткие) вопросы, которые я должен соблюдать, это: 1) это хорошая идея или ее следует избегать? 2) что должно быть возвращено пользователю? Нормально? Должен ли быть создан, если что-то было вставлено или были сделаны только вставки? Каким должен быть контент? Есть ли что-то еще, о чем я не думал? – Ellesedil

+0

Одна проблема с не возвращением содержимого из этого запроса: если он создает новые элементы коллекции, вы не будете знать их идентификаторы. Поэтому, если вам нужны эти идентификаторы, [RFC2616] (https://www.ietf.org/rfc/rfc2616.txt) явно запрещает возвращать контент из PUT. – astreltsov

+0

Я считаю, что ваш комментарий/редактировать неправильно. PUT, стр. 54: «Если новый ресурс создан, исходный сервер ДОЛЖЕН информировать пользовательский агент через ответ 201 (создан)». – Ellesedil

Смежные вопросы