设计REST资源以管理列表

设计REST资源以管理列表,rest,Rest,假设我想设计一个用于管理列表的REST存储。 列表条目的外观如下所示: POST /list/positions/swap/0/2 // swap the position of two elements POST /list/positions/move/1/0 // move the element at 1 to 0 0 有趣的信息 我会这样设计资源: POST /list/positions/swap/0/2 // swap the position of

假设我想设计一个用于管理列表的REST存储。 列表条目的外观如下所示:

POST   /list/positions/swap/0/2   // swap the position of two elements
POST   /list/positions/move/1/0   // move the element at 1 to 0

0
有趣的信息
我会这样设计资源:

POST   /list/positions/swap/0/2   // swap the position of two elements
POST   /list/positions/move/1/0   // move the element at 1 to 0
GET/list///返回所有列表项
GET/list/{position}//返回位于{position}的列表项
DELETE/list/{position}//删除{position}处的列表项
PUT/list/first//更新第一个列表条目
PUT/list/last//update last list条目
将/list/{position}//更新条目置于{position}
POST/list/last//在最后一个位置插入新的列表条目
POST/list/first//在第一个位置插入新的列表条目
POST/list/{position}//在{position}处插入一个新的列表项并移动所有
//条目从列表中的
//在插入前位于{position}。
这是合法的休息资源吗?如果没有,有没有办法设计一个rest资源,以便它可以管理一个列表

编辑

谢谢你的投入,它确实有帮助。 我同意nategood和darrel的观点,即使用first和last作为特殊标识符是完全合法的(另请参见我的文章)。当然,我可以不使用圣德喇嘛建议的那些神奇的标识符,但这将剥夺我在我现在想向你介绍的帖子请求中使用它们的可能性

在再次考虑设计时,我想在我的资源设计建议中添加两个附加功能

POST/list/{position1}/swap/{position2}//交换两个元素的位置
POST/list/{position1}/move/{position2}//将{position1}处的元素移动到
//{position2}并移动所有条目
//从下面的列表开始
//位于{position2}的条目
//可能的用途
POST/list/first/swap/last//swap first与last元素
POST/list/42/swap/2//将元素42与元素2互换
POST/list/first/move/42//将第一个元素移动到位置42
//你明白了。。。
你觉得怎么样?

只是一些想法:

  • 像…/first或…/last这样的URL有点像rpc
  • 列表项似乎是其自身的资源,因此最终应将其作为一个资源来处理,例如:

    GET /list/3/item/2
    
  • 这需要时间来让一个人的头脑清醒


    • 您的资源设计完全符合我的理解。您可以通过引入一个简单的规则来改进您的设计,去掉第一个和最后一个魔术索引功能:如果没有提供位置,则最后一个项目是更新的,或者该项目插入到最后一个位置。如果你引入这条规则,你就不再需要先到后了。第一个字符串只是一个表示索引0的神奇字符串,由于上面的规则,最后一个字符串已过时

      正如@miku所说,你的物品可能是它们自己的资源。如果计划更通用的资源列表设计,其中需要在一个列表中管理不同的资源类型(例如,列表可以管理任务、会议、约会),则列表项可以再次引用(使用资源url)到项目资源。使用这种引用方法,可以将列表保留功能与列表项表示完全解耦

      编辑:

      这个问题有一个移动的目标:)

      您可以将所有与职位相关的操作建模为资源,将操作建模为您创建的子资源,如下所示:

      POST   /list/positions/swap/0/2   // swap the position of two elements
      POST   /list/positions/move/1/0   // move the element at 1 to 0
      
      如果操作成功与否,此positions资源可以返回一个(HTTP)状态,一个“operation”资源的句柄(通过location header),您可以在其中检查操作的状态,以防您想要移动、交换异步、返回资源,从而为您提供所有列表位置操作的某种日志


      将职位建模为资源的想法是从书中偷来的,作者将两个银行账户之间的转账交易建模为资源。

      关于
      /first
      /last
      的“RPC ish”是什么?它们与RESTful API中的URI一样好。我可能只建议这些资源有一个
      Location
      头,指向同一资源的规范URI(例如
      Location:/list/0
      头中返回的
      GET/first
      )。@nategood;我不是REST专家(我仍在阅读Fieldings的论文…)——但我想到一件事:URL应该是稳定的(因为它们可以识别资源),而且
      /first
      /last
      可能会频繁更改。无论如何,对于RESTful的东西来说,/first和/last可能很好。@miku first和last的概念是完全稳定的。内容可能会改变,但这是完全正常的。miku你说得对,应该可以引用列表元素的数据/资源。关于这一点,你将如何处理?是否返回对资源的引用或直接返回整个资源?是否保存对列表中管理的资源的引用?顺便说一句,消除“第一个”和“最后一个”的解决方案是个好主意,但请参阅我的编辑中关于特殊标识符的使用。很抱歉编辑太晚,但有时会产生一些想法:P再次是一个很好的建议,我特别喜欢返回一个句柄来检查操作的状态。很抱歉,我必须指出:
      /swap
      /move
      是操作,其余的只能在url中包含资源名称。