私はAPIを書いていて、次のことを行うための最もPython的な方法は何だろうと思っていました。
私はさまざまなWeb呼び出しを行うための一連のメソッドを作成していますが、引数は主にポストデータのキーと値に変換されます。
私がこれまで書いてきた方法は、ほとんどこのようなものです。
def doSomething(self,param1,param2,param3):
payload={"param1":param1,
"param2":param2,
"param3":param3}
return self.request("do/something",payload)
これには、変更される可能性のあるパラメーター名を繰り返さなければならないという欠点がすでにありますが、このパターンはそれほど悪くはありません。
次のケースは、私がより良い方法を考えようとした理由です。この場合、呼び出しには4つのオプションの引数があります
def doSomethingElse(self,param1,param2=None,param3=None,param4=None,param5=None):
payload= {"param1":param1}
if param2:
payload["param2"]= param2
if param3:
payload["param3"]= param3
# ... etc ...
self.request("do/something/else",payload)
私の最初の考えはこれを行うことでした:
def doSomethingElse(self,param1,**params):
payload = {"param1":param1}
payload.update(params)
self.request("do/something/else",payload)
あるいは:
def doSomethingElse(self,**payload):
self.request("do/something/else",payload)
2つ目は素晴らしくシンプルですが、デフォルト以外の引数なしでメソッドを呼び出すことができます。しかし、どちらの場合も、APIを使用するとメソッドの署名が失われ、ユーザーはパラメーターが何であるかを知りません(期待される署名をドキュメント文字列に書き込むことができることはわかっていますが、スペルミスのキーワードが送信されるのを防ぎたいです)。
私はこれを行うための素晴らしいpythonicソリューションが必要だと思っています、何かアイデアはありますか?
編集
私が十分に明確にしなかった重要な点は、引数が呼び出しの投稿データで送信されていることだと思います。最初の例のように、それらのキーだけが送信できるようにしたいのdoSomethingElse
です。 tこれらの5つの名前付きパラメーター以外のものを送信します。