在REST端点中表示LEFT JOIN

时间:2015-05-17 16:19:39

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

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

我有一些设备资源,我需要一个端点,它将输出设备及其最后一个AccessRecord。有时,如果它是最近配置的设备,它们将没有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来获取所有设备并执行他们自己的diff。

还有其他几个人。

从api设计的角度来看,

3似乎是最正确的,2是很好的和Erlang-y但是元组不能很好地转换为json。

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

1 个答案:

答案 0 :(得分:0)

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

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