1

我目前正在研究一个接受大量数据并对数据执行几种不同类型分析的 API。与其强迫客户为他们希望执行的每种分析传递一次数据,我认为只提供一个 API 调用并让该调用接受数据和操作列表(即分析类型)是有意义的去表演。(这意味着我的 API 不是 RESTful 的,对吗?)这样我会失去一些功能的清晰度,但处理时间的增加很容易弥补这一点。

我的问题是关于请求应如何以 JSON 格式格式化。如果客户端只需要 POST 一组数据元素和一组要执行的操作,那么格式化会很容易。不幸的是,一些分析类型有需要设置的选项。我看到了一些前进的方向。

  1. 单独的操作和选项项目:

    {
        'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
        'actions': ['analysis_a', 'analysis_b', 'analysis_c'],
        'options': {'option_c': 'blah'}
    }
    

    此处由文档说明,option_c仅在启用时才需要设置analysis_c

  2. 单独的操作和选项项,选项显式绑定到操作:

    {
        'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
        'actions': ['analysis_a', 'analysis_b', 'analysis_c'],
        'options': {'analysis_c': {'option_c': 'blah'}}
    }
    
  3. 单个操作/选项项目,项目既作为列表又作为字典:

    {
        'data': [{'id': 1, 'content': 'blah'}, {'id': 2, 'content': 'blah}],
        'actions': {'analysis_a': {}, 'analysis_b': {}, 'analysis_c': {'option_c': 'blah'}}
    }
    
  4. 具有更多数据结构清晰度的单个操作/选项项:

    {
        '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 处理这种情况会更容易一些。

我很伤心,所以任何想法或建议将不胜感激。谢谢!

4

1 回答 1

1

我很欣赏选项 #3 和选项 #4,因为每个操作都是自包含的,这提供了更多的清晰度。

选择选项 #3 还是选项 #4 取决于您将如何执行操作,如果服务器有一些操作将按名称从操作列表中检索特定操作。选项#3 可能更好(因为选项#4 要求您迭代数组),如果不是,我认为选项#4 更好。

于 2013-05-10T07:57:52.747 回答