【问题标题】:Representing a LEFT JOIN in a REST endpoint在 REST 端点中表示 LEFT JOIN
【发布时间】:2015-07-29 03:03:21
【问题描述】:

我试图在我的 api 设计中保持合理的 RESTful,并且我需要生成与左连接等效的端点之一,我对我提出的任何选项都不太满意.

我有一些设备资源,我需要一个端点来输出设备及其最后的访问记录。有时,如果它是最近配置的设备,他们将没有 AccessRecord,但我仍然希望它在列表中。这感觉非常非 REST,代表一种不存在但需要即需要的资源。

我考虑过以下方法:

1) /devices/last_access_records 返回添加了附加“last_access_record”字段的设备资源数组。

2) /devices/last_access_records 返回一个 Device 数组,AccessRecord 元组,如果 AccessRecord 不存在,则为 null。

3) /devices/last_access_records 返回一个 Device 数组,AccessRecord 元组,并且不包括没有任何 AccessRecords 的设备,并且要求 api 使用者再次调用 /devices 以获取所有设备并进行自己的差异。

还有其他几个。

从 api 设计的角度来看,3 似乎最正确,2 很好,而且 Erlang-y,但元组不能很好地转换为 json。

是否有其他一些清晰/干净的方法可以在 RESTful api 中表示这种事情,或者这只是事情发生故障并且您做出权衡选择的一种情况?

【问题讨论】:

    标签: rest asp.net-web-api api-design


    【解决方案1】:

    这可能会回答您的问题,并且我相信它与您的选项 2 一致(如果它不为 null,则具有该值,否则将其丢弃):https://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml#Empty/Null_Property_Values

    我认为您的第一个或第二个选项效果很好,无论您明确将 null 作为 AccessRecord 的值,还是在没有值时省略它(后者更节省空间/时间。)我认为如果 AccessRecord 是选项 1 更合适根据您的设计,设备的属性;否则选项2。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 2016-12-16
      • 1970-01-01
      相关资源
      最近更新 更多