端点的RESTful设计,只过滤和返回最新创建的资源

端点的RESTful设计,只过滤和返回最新创建的资源,rest,restful-url,Rest,Restful Url,我有一个应用程序,用户可以为给定的子资源创建多个子资源。假设端点如下所示: POST /main-resources/{id}/sub-resources 子资源包含一段受日期限制的时间,作为正文的一部分,类似于: { "startDate": "2018-10-10", "endDate": "2018-12-12" } 他们也考虑值对象。就应用程序而言,它们没有id(即使它们是由SQL数据库备份的,实际上它们有id),因为在这种情况下,不通过主资源搜索子资源是没有意义的

我有一个应用程序,用户可以为给定的子资源创建多个子资源。假设端点如下所示:

POST /main-resources/{id}/sub-resources
子资源包含一段受日期限制的时间,作为正文的一部分,类似于:

{
    "startDate": "2018-10-10",
    "endDate": "2018-12-12"
}

他们也考虑值对象。就应用程序而言,它们没有id(即使它们是由SQL数据库备份的,实际上它们有id),因为在这种情况下,不通过主资源搜索子资源是没有意义的

现在,我想创建一个端点,允许用户查找给定主资源的子资源,但它必须返回最近创建的一个端点,该端点的时间段包含给定的日期。如下所示:

GET /main-resources/{id}/sub-resources/latest?date=2018-11-11
我的问题是,
最新的
对我来说就像一个过滤器
latest
每次调用时都会返回不同的值,这取决于用户是否创建了新的子资源,据我所知,它不是RESTful的。与前面的端点不同,我认为它应该更像:

GET /main-resources/{id}/sub-resources?latest=true&date=2018-11-11

这提供了更多的选项,但在我的用例中实际上并不需要

这样做,用户通常会期望一个结果,但这将关闭其他类型过滤的大门,比如只按日期过滤

因此,基本上我可以选择创建一个端点,其中包含
latest
作为路径变量,该变量将返回单个元素,或者将其用作参数,该参数通常必须返回元素列表,即使此过滤器指定用户只需要一个元素,这会让客户端更恼火

还有其他选择吗

我的问题是,
最新的
对我来说就像一个过滤器
latest
每次调用时都会返回不同的值,这取决于用户是否创建了新的子资源,据我所知,它不是RESTful的

最新的
标识符似乎还不错。请参阅菲尔丁博士论文中的以下引用,其中定义了REST架构风格:

有些资源是静态的,在创建后的任何时候检查时,它们总是对应于相同的值集。其他人的价值随着时间的推移有很大程度的差异。对于资源来说,唯一需要是静态的是映射的语义,因为语义是区分一个资源和另一个资源的地方

例如,学术论文的“作者首选版本”是一个映射,其值随时间而变化,而“发表在X会议记录中的论文”的映射是静态的。这是两种不同的资源,即使它们在某个时间点都映射到相同的值。这种区别是必要的,这样两种资源都可以被独立地识别和引用。软件工程中的一个类似示例是,当参考“最新版本”、“版本号1.2.7”或“橙色版本中包含的版本”时,版本控制源代码文件的单独标识


没有所谓的
restfulurl
。URL(整个字符串)只是指向资源的指针。它不应该传达任何抽象的含义,因此您在URI中输入的字符在REST体系结构中并不相关。URI的语义是通过
链接关系名称
获取的,例如
当前
(在集合中)或
最新版本
,两者都有。是的,当我指URI时,你说我不应该说URL是对的。这是我第一次读到
链接关系名称
。从我读到的一小部分内容来看,它似乎更侧重于用于查找其他资源的链接,比如在实现HATEOAS时。
GET /main-resources/{id}/sub-resources?limit=1&date=2018-11-11&order=desc