我目前正在研究一个接受大量数据并对数据执行几种不同类型分析的 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 可能是我最不喜欢的,但在不久的将来,我们的一些分析类型将要求设置相同的选项(必须具有相同的值),并且使用选项 #1 处理这种情况会更容易一些。
我很伤心,所以任何想法或建议将不胜感激。谢谢!