我正在用 Python 为流行的 RESTful API 构建客户端,并且试图找出为具有许多可选值的端点构建方法的最佳方法。
让我解释。
首先,我有一个方法可以将命名参数转换为适当的 json 表示。
def map_kwargs_to_payload(self, **kwargs):
payload = {}
for key in kwargs:
payload[key] = kwargs[key]
return payload
这使我可以创建如下所示的函数签名:
def some_rest_method(**kwargs):
payload = map_kwargs_to_payload(**kwargs)
self.transmit('PUT', '/endpoint', payload)
这很好用——当用户有很多选项可以传递给该方法时,它使我不必做类似下面的事情。
def some_rest_method(setting_1=None, setting_2=None, setting_3=None, etc...):
但是它失败的地方是当请求主体想要像下面这样的东西时,端点有几个可选的主体参数:
{
"setting_1" : foo,
"setting_2" : foo,
"setting_3" : [{
"IsEnabled" : 1,
"Type" : x
}, {
"IsEnabled" : 1,
"Type" : x
}
]
}
我的映射器不支持上述请求所需的嵌套数组。
那么我应该如何解决这个问题呢?我应该让用户传入身体的字典表示吗?有没有其他更好的方法来保持我的方法签名的合理长度,同时为最终用户做尽可能多的事情?