Я изучаю, как разработать API RESTful, и я столкнулся с затруднительным положением.Как создать RESTful API, который запрашивает информацию о глаголе (например, потенциальный запрос POST)?
Скажите, что у меня есть конечная точка POST для выполнения действия. Действие связано с определенной стоимостью. Стоимость зависит от того, что такое действие, в частности, на теле POST. Например, учитывая эти два запроса:
POST /flooblinate
{"intensity": 50, "colorful": true, "blargs": [{"norg": 43}]}
POST /flooblinate
{"intensity": 100, "colorful": false, "blargs": []}
Произнесите один стоит 500, а второй один стоит 740.
Я хочу создать метод, который сообщит мне, что стоимость размещения действия будет быть. Поскольку я ничего не создаю и не обновляю, кажется, что GET является наиболее подходящим глаголом. Однако a request body with GET should not have any meaning. Это означает, что я должен поместить данные в строку запроса, скажем, по URL, кодирующего тело запроса передается в POST:
GET /flooblinate/getCost?body=%7B%22intensity%22%3A+50%2C+%22colorful%22%3A+true%2C+%22blargs%22%3A+%5B%7B%22norg%22%3A+43%7D%5D%7D
Это кажется меньше, чем идеал, так как это два формата данных для того же вещь. Но следующее:
POST /flooblinate/getCost
{"intensity": 50, "colorful": true, "blargs": [{"norg": 43}]}
Это также, кажется, меньше, чем идеал, так как это злоупотребление глагол POST для запроса информации, вместо того, чтобы создать или обновить что-нибудь.
Какой правильный выбор сделать здесь? Есть ли какая-то третья альтернатива? Есть ли способ переосмыслить этот проект в принципе, который избавит вас от необходимости сделать этот выбор?
# 1 звучит как самый подход RESTful. Было бы больше работать на заднем плане, чтобы поддержать это, но это может быть самое приятное в целом. О # 2, не злоупотреблять ли использование POST только для запроса данных? Как и в, не должно быть GET? POST is * "Метод POST используется, чтобы запросить, чтобы исходный сервер принял объект, заключенный в запросе, в качестве нового подчиненного ресурса, идентифицированного Request-URI в строке запроса. * *, А GET - *. Метод GET означает получение любой информации (в форме объекта), идентифицируемой Request-URI. "* (Из RFC2616, раздел 9) – Claudiu
Также почему вы пытаетесь избежать логических флагов вообще? – Claudiu
Когда дело доходит до булевых флагов, я некоторое время назад поддерживал [anti-if-campaign] (http://antiifcampaign.com/), и я сильно ассоциировал с ним случайный булевский флаг. Итак, поскольку я связываю логические с операторами if, я стараюсь избегать их, если это невозможно. – Opal