编写API的好处:自动包含嵌套对象,而不是完全包含,或者提供一个参数来指定要包含的对象?

编写API的好处:自动包含嵌套对象,而不是完全包含,或者提供一个参数来指定要包含的对象?,api,relation,nested-includes,Api,Relation,Nested Includes,例如,我们有一个名为ServiceConfig的实体,它包含一个指向服务的指针和一个专业的。如果返回时不包括字段,则如下所示: { 'type': '__Pointer', 'className': 'Service', 'objectId': 'q92he840' } 此时,他们可以再次查询以检索该服务。但是,他们通常需要服务名称。在这种情况下,每次都必须再次查询才能获得服务是低效的 选项: 自动返回服务。在这种情况下,我们应该自动返回该服务的行业,以防他们需要。

例如,我们有一个名为
ServiceConfig
的实体,它包含一个指向
服务的
指针
和一个
专业的
。如果返回时不包括字段,则如下所示:

{
    'type': '__Pointer', 
    'className': 'Service', 
    'objectId': 'q92he840'
}
此时,他们可以再次查询以检索该服务。但是,他们通常需要
服务
名称。在这种情况下,每次都必须再次查询才能获得服务是低效的

选项:

  • 自动返回
    服务
    。在这种情况下,我们应该自动返回该
    服务的
    行业
    ,以防他们需要。。。这同样适用于所有人。似乎我们在这里返回数据太频繁了

  • 允许他们传递一个指定要包含哪些实体的
    includes
    参数。Format是一个字符串数组,使用
    可以允许它们包含子类。在这种情况下,
    ['Professional','Service.Industry']
    将起作用


  • 谁能确定为什么任何一种解决方案都比其他解决方案更好?我觉得最后一个解决方案是最好的,但是在我所看到的API中,这样做似乎并不常见。

    在发布初始版本之前,这是一个很好的API设计决策。这两种方法都是有效的,这完全取决于您认为客户机使用API的最常见方式

    您可以考虑以下几点:

  • 您可能更喜欢第一种方法,即不预先提供所有数据。有时,这关系到效率,有时也关系到安全性,并确保仅在需要时根据授权获取任何其他重要数据
  • 实现第二种方法需要您的团队付出更多的努力来设计/编写和测试API。因此,你可能想考虑你想在1版
  • 中投入多少精力。
  • 例如,由于您有嵌套数据,第二种方法将很好地为您服务。事实上,有几个公共API可以做到这一点。例如,请查看LinkedIn公共API,特别是部分,其中可以指定要返回的字段或其他信息
  • 看看您编写的一些客户机应用程序,如果您能够确定某些数据是预先需要的,那么它可以帮助设计返回数据
  • 最终,监视API使用情况并对调用的数量进行一些分析,调用的方法将为您下一步的操作提供良好的输入
  • 如果我必须做出选择,并且在努力方面有更多的余地,我会选择第二个选项,即使它最初是一个简单的版本