Как остаться RESTful со сложным API - PullRequest
0 голосов
/ 18 апреля 2011

Мои настройки: Rails 2.3.10, Ruby 1.8.7

Мне нужно реализовать API, который по сути является GET, но в зависимости от даты может также включать действия DELETE и POST.Позвольте мне объяснить, для определенного дня, API должен добавить 10 элементов в одну таблицу, случайно выбранную из другой таблицы, но это делается только один раз в день.Если добавленные элементы относятся к предыдущему дню, то API должен удалить эти элементы и случайно добавить 10 новых.Если в один и тот же день сделано несколько вызовов API, то это просто GET после первоначального создания.Надеюсь, в этом есть какой-то смысл.

Как бы я реализовал это как RESTful API, если это вообще возможно.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2011

Как насчет?

GET /Items

Если наступил следующий день, то сгенерируйте 10 новых предметов, прежде чем возвращать их.Если следующий день не наступил, верните те же 10 предметов, которые вы вернули ранее.Нет причин, по которым сервер не может обновить элементы на основе GET.Клиент не запрашивает обновление, поэтому запрос все еще считается безопасным.

0 голосов
/ 18 апреля 2011

Не уверен, правильно ли я вас понимаю, но, просто взглянув на это, я могу подумать только о следующем: какая ужасная вещь - выполнить добавление, которое в зависимости от того, что было добавлено, выполняет удаление.Неуважение, но серьезно.Или, может быть, именно так вы это описываете.

Как бы то ни было, если вы хотите иметь RESTful API, вы должны относиться к GET и PUT по-разному.

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

Определите URI для своего ресурса, скажем / random-items

  • a GET /random-items, в котором вы получаете от 0 до 10 элементов, находящихся в настоящий момент в системе.

  • a PUT/random-items с пустым телом выполняет следующие действия:

    • удаляет все случайные элементы, добавленные вчера или ранее
    • добавляет столько случайных элементов, сколько необходимо длязавершить 10
  • вызов DELETE /random-items) должен вернуть 405 Method Not Allowed http код ошибки.

  • вызов POST / random-items` следует добавить не более 10 элементов, удаляя по мере необходимости.

  • /random-items/x является действительным URI, если x является одним из элементов, находящихся в данный момент в /случайные элементы.

    • A GET должен вернуть ему представление или 404, если он не существует
    • A DELETE, чтобы удалить его из-под /random-items или 404если он не существует
    • A PUT, ему следует изменить его значение, если оно имеет смысл (или вернуть 405)
    • A POST, которое должно вернуть 405 всегда

Это должно дать вам RESTful API скелета сорта.

Однако, если вы настаиваете, или вам нужно перегрузить GET, чтобы он выполнял дополненияи удаления за сценой, тогда вы делаете это без RESTful.

Это само по себе неплохо, если вы законно в этом нуждаетесь (поскольку ни одна архитектурная парадигма не является универсально применимой.) Но вам нужнопонять, что означает RESTful и когда / почему / как его сломать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...