Что поместить во входной аргумент вызова REST - PullRequest
0 голосов
/ 25 февраля 2019

У меня спор с коллегой-разработчиком, и мне нужна внешняя перспектива.При определении REST Api, что обычно иметь в качестве входного аргумента?

Скажем, у нас есть следующий вызов GetCarByModelName, вы ожидаете, что он будет принимать один вход, а именно ModelName (string, enum, что угодно)или весь объект Car, где ModelName находится в полях, а затем внутренние функции функции будут смотреть на ModelName и игнорировать всю остальную информацию, если она предоставлена?

1. GetCarByModelName(ModelName) 
2. GetCarByModelName(Car)

Car
{
  Type : string
  Weight : int
  ProductionYearStart : DateTime
  ProductionYearStop : DateTime
  Price : Decimal
  ModelName : string
  BrandName : string
}

1 Ответ

0 голосов
/ 25 февраля 2019

Сначала давайте что-то уберем - HTTP GET и отправка тела JSON (что похоже на то, что вы собираетесь делать).

автор из REST сам прокомментировал здесь , что:

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

В вопросе, который вы упомянули:

где ModelName находится в одном из полей, и тогда внутренняя работа функции будет смотреть на ModelName и игнорировать всю другую информацию, если она предоставлена?

Как правило, не следует отправлять HTTP GET с теломНеважно, одно или несколько полей (так что вы можете сказать, что оба не правы).

GetCarByModelName, очевидно, имеет семантику HTTP GET-запроса.В обычном API REST кто-то может ожидать, что у вас будет ресурс Car, к которому можно обратиться по названию модели.Но давайте вкратце расскажем об этом: автомобиль находится в автосалоне, и пользователь хочет получить список автомобилей BMW модели X5.Это должно выглядеть примерно так:

HTTP GET /api/cardealer/{carDealerId}/cars?modelName=BMW%20X5
...