【问题标题】:REST, cross-references and performances, which compromise?REST、交叉引用和性能,哪个妥协?
【发布时间】:2014-07-17 12:57:44
【问题描述】:

在阅读了关于 REST 响应中的嵌套结构的出色线程 REST Complex/Composite/Nested Resources 之后,我仍然有一个问题。就响应的性能而言,最佳选择是什么?

举个例子吧。

我有一个Category 对象,其中包含一些Questions。那些Questions 包含一些Answers。所有这些结构都有元信息。

现在,当查询像 GET http://<base_url>/categories/ 这样的 url 时,我是否应该只包括类别的描述,包括问题描述?哪一个,完整的描述还是简化的?

换句话说,它们之间的最佳解决方案是什么:

{
    "results":[
        {
          'id':1,
          'name':'category1',
          'description':'foobar',
          'questions':[
                   {
                       'id':1234,
                       'question':'My question',
                       'author' : 4235345,
                       'answers':[
                              {
                                  'id':56786,
                                  'user':456,
                                  'votes':6,
                                  'answer':'It's an answer !'
                               },
                               {
                                  'id':3486,
                                  'user':4564,
                                  'votes':2,
                                  'answer':'It's another answer !'
                               },
                           ]
                   },
                   ...
               ]
           }
           ...
      ]
}

或解决方案 2:

{
    "results":[
        {
          'id':1,
          'name':'category1',
          'description':'foobar',
          'questions':[
                   {
                       'id':1234,
                       'url':'http://foobar/questions/1234'
                       'answers':[
                              {
                                  'id':56786,
                                  'url':'http://foobar/answers/56786'
                               },
                               {
                                  'id':3486,
                                  'url':'http://foobar/answers/3486'
                               },
                           ]
                   },
                   ...
               ]
           }
           ...
      ]
}

或解决方案 3:

{
    "results":[
        {
          'id':1,
          'name':'category1',
          'description':'foobar',
          'questions':'http://foobar/categories/1/questions'
        }
        ...
     ]
}

或者也许是另一种解决方案?

谢谢!

【问题讨论】:

    标签: rest cross-reference


    【解决方案1】:

    这取决于应用程序将如何处理数据。如果它只是要显示一个类别列表,那么一次传输它需要的所有数据是非常低效的,特别是如果类别很多,这会减少用户的响应时间(绝对不不)。

    这些场景在很大程度上取决于数据的应用和使用。

    我们可以做的一个优化是,我们可以创建两个请求,

    GET http://<base_url>/categories
    

    这将立即返回最少的数据和另一个请求,

    GET http://<base_url>/categories?all=true
    

    这将返回所有数据。

    然后客户端应用程序可以进行一些巧妙的优化,例如,当用户请求类别时,发送请求一并立即呈现数据。然后在获得类别列表后,用户将空闲一段时间寻找,我们可以利用这个机会使用请求二来请求所有数据。

    但是,正如我所说,这在很大程度上取决于应用程序。

    【讨论】:

    • 谢谢你的回答,你猜对了,只是第一次显示分类。我的想法是请求完整数据,然后将其存储在应用程序缓存中。通过这样做,我不必在访问该类别时提出问题,因为这些都是已知的。这是“一个大请求”或“多个小请求”之间的二元性。但是如果说要根据应用使用情况来设计,那就更清楚了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2011-02-10
    • 2019-08-27
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-20
    • 1970-01-01
    相关资源
    最近更新 更多