具有未定义数量的参数的API

时间:2016-01-18 23:43:06

标签: api architecture

我正在构建一个API,我允许用户传递2个不同的自定义字段列表。 API基本上是这样的:

  

def动作(类型,名称,日期,name_custom_1,name_custom_2,name_custom_3,date_custom_1,date_custom_2,date_custom_3,date_custom_4)

因此,类型,名称日期是此API的参数,并且是必需的。

name_custom_*date_custom_*是可选项,我可以0, 1, 2, 3 ... 由于技术原因,我对name_custom和4到date_cutom的限制为3,但最终这个限制可能会增加(但永远不会完全删除)

现在我的问题是,从用户的角度来看,制作此API的最佳方式是什么:

  

def动作(类型,名称,日期,name_custom_1,name_custom_2,name_custom_3,date_custom_1,date_custom_2,date_custom_3,date_custom_4)

  

def动作(类型,名称,日期,names_custom,dates_custom):

names_customdates_custom是一个不能大于X的列表。

我在两者之间挣扎,并在两者中找到价值和逻辑。有什么建议?

1 个答案:

答案 0 :(得分:0)

列表参数提供了更清晰的解决方案,因为:

  1. 函数签名中的参数较少,使文档更容易为人类阅读。
  2. 变革更具弹性。假设您决定将自定义参数的最大数量从4更改为5.在列表方法中,更改更简单。
  3. 即使在函数调用中有5个参数也比平常更多,并且通常被认为是草率的(参见How many parameters are too many?)。您可能需要考虑在此处引入一个类或几个类。根据您的应用程序,创建封装名称和自定义名称列表的类,以及封装日期和自定义日期列表的类可能是有意义的吗?也许这个动作本身更适合作为一个有许多setter方法的类?

    换句话说,如果您的函数变长,或者参数列表变长,通常表明在您的设计下面有等待发现的类。