我目前正在研究一种API,它接受大量数据并对数据执行一些不同类型的分析。不是强迫客户端为他们希望执行的每种分析传递一次数据,我认为只提供一个API调用并让该调用接受数据和操作列表(即分析类型)是有意义的。去表演。 (这意味着我的API不是RESTful,对吧?)我会以这种方式失去一些功能清晰度,但处理时间的增加很容易弥补这一点。
我的问题是如何使用JSON格式化请求。如果客户端只需要POST一组数据元素和一系列要执行的操作,那么格式化将很容易。不幸的是,一些分析类型具有需要设置的选项。我看到了一些前进的方法。
单独的操作和选项:
{
'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
'actions': ['analysis_a', 'analysis_b', 'analysis_c'],
'options': {'option_c': 'blah'}
}
此处需要注意的是,只有在option_c
启用时才需要设置analysis_c
。
单独的操作和选项,其中的选项与操作明确相关:
{
'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
'actions': ['analysis_a', 'analysis_b', 'analysis_c'],
'options': {'analysis_c': {'option_c': 'blah'}}
}
单个操作/选项,项目同时充当列表和字典:
{
'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
'actions': {'analysis_a': {}, 'analysis_b': {}, 'analysis_c': {'option_c': 'blah'}}
}
单一操作/选项项目,数据结构清晰度更高:
{
'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
'actions': [
{'action': 'analysis_a'}, {'action': 'analysis_b'}, {'action': 'analysis_c', 'options': {'option_c': 'blah'}}
]
}
选项#1可能是我最不喜欢的,但在不久的将来,我们的一些分析类型将要求设置相同的选项(必须具有相同的值),并且这种情况使用Option更容易处理#1。
我很伤心,所以任何想法或建议都会非常感激。谢谢!
答案 0 :(得分:1)
我感谢选项#3和选项#4,因为每个动作都是自包含的,这提供了更多的清晰度。
选择选项#3还是选项#4取决于您将如何执行操作,如果服务器有某些操作将按名称从操作列表中检索特定操作。选项#3可能更好(因为选项#4要求你迭代数组),如果没有,我认为选项#4更好。