在REST调用的输入参数中放置什么
我正在与一位开发人员争论,需要一些外部视角。 定义RESTAPI时,输入参数通常是什么 假设我们有下面的调用GetCarByModelName,您是否希望它接受一个输入,即ModelName字符串、enum、what ever或ModelName所在的整个Car对象,然后函数的内部工作将查看ModelName并忽略所有其他信息(如果提供)在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
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类分开。