2013-05-10 44 views
1

我目前正在研究一個接受大量數據並對數據執行幾種不同類型分析的API。我認爲只提供一個API調用並讓該調用接受數據和一系列操作(即分析類型)是有意義的,而不是強迫客戶爲他們希望執行的每種分析傳遞一次數據,去表演。 (這意味着我的API不是RESTful的,對嗎?)這樣我會失去一些清晰的功能,但處理時間的增加很容易彌補這一點。設計一個數據驅動的JSON API

我的問題是關於如何將請求格式化爲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。

我很破,所以任何想法或建議將不勝感激。謝謝!

回答

1

我很欣賞選項#3和選項#4,因爲每個動作都是自包含的,它提供了更多的清晰度。

選擇選項#3還是選項#4取決於您將如何執行操作,如果服務器有某些操作會按操作名稱從操作列表中檢索特定操作。選項#3可能會更好(因爲選項#4要求你迭代數組),否則,我認爲選項#4更好。