人気のある RESTful API 用に Python でクライアントを構築しています。多くのオプション値を持つエンドポイント用のメソッドを構築する最良の方法を見つけようとしています。
説明させてください。
まず、名前付き引数を適切な 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
}
]
}
私のマッパーは、上記のリクエストが必要とするようなネスト配列をサポートしていません。
では、これを解決するにはどうすればよいのでしょうか。ユーザーに本体の dict 表現を渡させる必要がありますか? エンド ユーザーのためにできる限り多くのことを行いながら、メソッド シグネチャを適切な長さに保つための他の良い方法はありますか?