0

人気のある 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 表現を渡させる必要がありますか? エンド ユーザーのためにできる限り多くのことを行いながら、メソッド シグネチャを適切な長さに保つための他の良い方法はありますか?

4

1 に答える 1

0

ここでの問題は、実際にはこれらの API の概念をオブジェクトでモデル化していないため、それらに責任を委任できないことです。この種の状況に直面したとき、私は 2 つのモデルを作成します。API の低レベル OO 表現と、ドメインの高レベル OO モデルです。このようにして、アプリケーションのすべての概念 (API とドメイン) が表現されるため、適切と思われる方法で委任できます。ここには、これを詳細に説明した同様の質問がいくつかあります。

リモート データとローカル オブジェクトのマッピング/デカップリング

サーバーからさまざまなリクエストを行うアプリに最適な設計パターン

HTH

于 2013-01-24T12:17:51.107 に答える