REST Создание ресурса по запросу

Скажем, мне нужно предоставить услугу, где я могу запросить анализ пользователя за определенный период времени (общие действия, действия, отношения и т. д.). Я бы сразу подумал об этом как:

/users/{userId}/analyses - POST
/users/{userId}/analyses/{analysisId} - GET

Проблема здесь в том, где возникает ресурс «анализа» — он по своей сути основан на запросах, поскольку это служба, которая будет выполнять этот сложный анализ, а также служба, которая имеет самое последнее состояние пользователя. данные. Короче говоря, он не существует до запроса.

В моем текущем мышлении у меня есть три варианта запроса анализа в первый раз (с тем же поиском):

/users/{userId}/analyses?from=2017-01-01&to=2018-01-01 - GET
/users/{userId}/analyses - POST { "from": "2017-01-01", "to": "2018-01-01" }
/users/{userId}/analyses?from=2017-01-01&to=2018-01-01 - POST

Мне нравится GET с параметрами запроса, так как я запрашиваю ресурс и определяю объем пользовательских данных, которые будут использоваться, пока не узнаю, что ресурс может меняться между запросами (на основе данных на серверной части или изменения логики обработки), и что мне нужно будет позвонить во второй раз, чтобы отправить этот ресурс.

Мне нравится POST с телом запроса, так как я ожидаю, что ресурс будет создан, пока я не узнаю, что состояние, которое я передал, не является состоянием, которое я верну, когда я получу это позже, и это даже не того же типа гипермедиа.

Мне нравится POST с параметрами запроса и без тела, так как я создаю ресурс и определяю область этого ресурса, но я все еще передаю состояние, которое не является типом ресурса или конечного носителя, и я практически не видел другого примеры POST с параметрами запроса.

У кого-нибудь есть опыт таких действий в RESTful?


person It's an account    schedule 31.01.2018    source источник


Ответы (1)


На мой взгляд, использование GET /users/{userId}/analyses?from=...&to=... — хороший подход.

Вы запрашиваете ресурс типа analysis, что означает, что вы должны использовать HTTP-команду GET. Вы передаете параметры, чтобы ограничить область. То, что ресурс может измениться между двумя запросами, не является проблемой. Вы запрашиваете ресурс в определенном состоянии, и это состояние может быть изменено сразу после вашего GET запроса. Сравните это с ресурсом коллекции, где другим клиентам разрешено что-то POST.

Использование POST будет означать, что вы хотите, чтобы клиенты создавали ресурс типа analysis со всеми необходимыми данными, что, как я понимаю, неверно в вашем случае. Ваши собственные контраргументы для второго и третьего примера, на мой взгляд, правильны.

person braunpet    schedule 01.02.2018