在REST调用的输入参数中放置什么

在REST调用的输入参数中放置什么,rest,http,api-design,Rest,Http,Api Design,我正在与一位开发人员争论,需要一些外部视角。 定义RESTAPI时,输入参数通常是什么 假设我们有下面的调用GetCarByModelName,您是否希望它接受一个输入,即ModelName字符串、enum、what ever或ModelName所在的整个Car对象,然后函数的内部工作将查看ModelName并忽略所有其他信息(如果提供) 1. GetCarByModelName(ModelName) 2. GetCarByModelName(Car) Car { Type : stri

我正在与一位开发人员争论,需要一些外部视角。 定义RESTAPI时,输入参数通常是什么

假设我们有下面的调用GetCarByModelName,您是否希望它接受一个输入,即ModelName字符串、enum、what ever或ModelName所在的整个Car对象,然后函数的内部工作将查看ModelName并忽略所有其他信息(如果提供)

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

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

首先,让我们把事情弄清楚——HTTP get并发送一个JSON主体,这似乎是您想要做的

其他人自己评论说:

但是,GET的服务器语义受到限制,因此 any,对请求没有语义意义。。。。所以,是的,你可以 用GET发送一个body,不,这样做是没有用的

在你提到的问题中:

其中,ModelName位于字段的 该函数将查看ModelName并忽略所有其他参数 是否提供了相关信息

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

Car
{
  Type : string
  Weight : int
  ProductionYearStart : DateTime
  ProductionYearStop : DateTime
  Price : Decimal
  ModelName : string
  BrandName : string
}
一般来说,无论是一个字段还是多个字段,您都不应该发送带有主体的HTTP GET,所以您可能会说您都错了

GetCarByModelName显然具有HTTP GET请求的语义。 在一个普通的RESTAPI中,有人会希望您拥有一个汽车资源,可以通过模型名称查询该资源。但是,让我们给它一些上下文-一辆车在一家汽车经销商商店,用户希望得到一份宝马X5型汽车的清单。这应该类似于:

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

尝试使用实体对象来描述查询很快就会失败。在a、b、c中有一个modelName是一个非常合理的查询。或者价格在10000到20000之间。这与汽车等级有什么关系?所以是的,将查询输入与Car类分开。