5

私はPythonから始めて、eBay WebサービスのXMLリクエストを構築しようとしています:

さて、私の質問は次のとおりです。

言って、これは私の機能です:

def findBestMatchItemDetailsAcrossStores():
     request = """<?xml version="1.0" encoding="utf-8"?>
     <findBestMatchItemDetailsAcrossStoresRequest xmlns="http://www.ebay.com/marketplace/search/v1/services">
     <siteResultsPerPage>50</siteResultsPerPage>
     <entriesPerPage>50</entriesPerPage>
     <ignoreFeatured>true</ignoreFeatured>
     <keywords>ipod</keywords> <-----REQUIRED
     <itemFilter>
     <paramName>PriceMin</paramName>
     <paramValue>50</paramValue>
     <name>Currency</name>
     <value>USD</value>
     </itemFilter>
     <itemFilter>
     <paramName>PriceMax</paramName>
     <paramValue>100</paramValue>
     </itemFilter>
     </findBestMatchItemDetailsAcrossStoresRequest>"""
     return get_response(findBestMatchItemDetailsAcrossStores.__name__, request)

ここで、キーワードは唯一の必須フィールドです。では、どのようにメソッドを構築すればよいでしょうか? 方法は次のとおりです。

  1. オブジェクトを作成し、それを func(object) に渡します: Java の方法
  2. すべての引数を渡します: func(a=val1, b=val2, c=val3, d=val4 など)
  3. **kwargs を使用し、関数を呼び出す人を信頼してください。彼は正しいキーと値を渡します。キーを使用して実際に XML タグを作成するからです。

アップデート:

リクエストに表示されるすべての xml タグは、ユーザーが渡す必要があります。ただし、キーワード渡す必要があり、必要に応じて他のキーワードを渡すこともできます。

助言がありますか?

4

3 に答える 3

7

Noneすべてのパラメータを適切なデフォルト (またはデフォルトのみ) で関数シグネチャに入れることをお勧めします。ええ、関数自体にもう少し入力する必要がありますが、インターフェイスはきれいで、自己文書化されており、ebay ドキュメントや関数ソースで可能なパラメーターを検索する必要がないため、使いやすいものになります。後で時間を節約できます。

于 2011-06-03T06:21:41.273 に答える
0

すべてに名前付きパラメーターを使用します。これを行うことで、デフォルト値を割り当てるのが非常に簡単になり、(デフォルトを省略して) 必要なパラメーターをユーザーに提供させることが非常に簡単になります。

于 2011-06-03T06:58:17.243 に答える
0

メッセージをクラスとしてモデル化するのはどうですか?

class FindBestMatchItemDetailsAcrossStoresRequest:
     def __init__(self,keywords):
         self.keywords = keywords # required parameters in the constructor
         # set up the default values....etc
         self.siteResultsPerPage = 50 
         self.name = 'Currency'


     def send(self):
         # build message from self.xxx
         return get_response()


 #usage
 req = FindBestMatchItemDetailsAcrossStoresRequest('ipod')
 response = req.send()

 #usage with optional args

 req.siteResultsPerPage = 150
 response = req.send()
于 2011-06-03T06:12:48.760 に答える