RestAPI。是否可以根据客户端配置要求可选参数?

时间:2020-05-25 07:44:12

标签: rest

我们正在设计RESTful API。

样品申请

{
    "transaction_id" : abc,
    "sale_value" : 100,
    "profit_value" : 2
}

profit_value 是一个可选字段。但是,根据客户端配置,该字段是必填字段,或者即使由客户端提供也被忽略(在这种情况下,我们自己计算并在响应中返回)。

那是好习惯吗?

即即使API规范将其定义为可选字段,也可以要求一个字段吗?

是否可以忽略提供了可选字段的字段?

1 个答案:

答案 0 :(得分:0)

在REST体系结构中,服务器应教客户如何实现某些目标。这与可浏览的网络非常相似,在HTML表单页面中,HTML表单页面不仅教用户关于客户端可以填充的可用数据元素的知识,而且教用户如何使用HTTP操作(HTTP端点发送请求)以及必须发送响应的媒体类型格式。

profit_value是一个可选字段。但是,根据客户端配置,该字段是必填字段,或者即使由客户端提供也被忽略(在这种情况下,我们自己计算并在响应中返回)。

那是好习惯吗?

如果您要教客户通过POST发送请求,则基本上according the resource's own specific semantics处理了请求。这意味着您当然可以根据自己的喜好忽略或更改某些用户输入,甚至拒绝包含或丢失某些输入数据的请求。

根据给定的问题说明,不清楚客户端本身是配置强制字段还是可选字段,还是由服务提供商本身提供的。因此,尚不清楚客户如何知道某个输入是强制输入还是可选输入(因此可能会被忽略)。如果服务器会忽略某个字段,那么最好的选择是根本不告诉客户端该字段,因此,不要在表单的形式表示形式格式中包含作为响应发送的控制元素。服务器到客户端。必选元素肯定会在服务器端进行评估,并且在进行约束验证(丢失或不在正确范围之内等)的情况下,服务器将通过 400 Bad Request 响应拒绝请求表示缺少某个预期的输入参数。数十年来,这就是HTTP和HTML的运行方式,而这基本上就是REST的行为方式。

通过 API规范我猜你是说像Swagger之类的东西?不幸的是,such API documentation与REST无关,因为它与常见RPC解决方案(CORBA,用于SOAP的WSDL,用于RMI的存根类等)的传统接口定义语言(IDL)非常相似。但是,在这种情况下,服务器不能真正支持客户端是必填字段,可选字段还是完全忽略该字段。您可能会引入其他资源,客户端可以查询该资源以了解其是否支持某个字段或参数,在这种情况下,请将其添加到请求中。但是,这需要非常清楚地记录下来,以避免在客户端造成混乱。