在RESTURI的第一级之后使用超媒体?

在RESTURI的第一级之后使用超媒体?,rest,Rest,我想你从来没有像这样的模板: http://myapi.com/cage/12/pigs/23-给我笼子12里的猪23 我认为标准或RESTAPI通常不会附加在/pigs/23上。我想你只需要将所有内容保持在一个级别,这样如果我想要那只猪,它就可以通过猪服务并向/pigs/23 换句话说,你永远不会看到像这样的url进入RESTful API: http://myapi.com/cage/12/pigs/23 因为在将其映射到pigs服务中的特定方法时,您将如何处理它?你能从猪服务的GetBy

我想你从来没有像这样的模板:

http://myapi.com/cage/12/pigs/23
-给我笼子12里的猪23

我认为标准或RESTAPI通常不会附加在/pigs/23上。我想你只需要将所有内容保持在一个级别,这样如果我想要那只猪,它就可以通过猪服务
并向/pigs/23

换句话说,你永远不会看到像这样的url进入RESTful API:

http://myapi.com/cage/12/pigs/23
因为在将其映射到pigs服务中的特定方法时,您将如何处理它?你能从猪服务的GetByCage(int-id,int-cageId)中去掉12的笼子id吗

我认为这会变得太复杂,因为我可以在给定的资源中看到大量此类BySomething方法,如果您考虑到所有资源都在API中这样做,这些方法可能会变得不一致或不可维护

如果我没有记错的话,我相信人们会把它保持在[resource]/[id]-一个级别,这意味着你永远不会超过Uri中的初始资源或id,你就到此为止。然后在响应中,您使用超媒体为消费者提供另一个Uri以访问其他资源

所以在
http://myapi.com/cage/12/pigs/23
真的不应该是这样。它应该是一个对/cage/12的调用,你可以得到cage表示。然后在cage json对象中,您将看到一个属性,可能类似于
http://myapi.com/pigs/23
然后再打一个电话?这是2个调用,可能会很重,而不是像上面那样通过将子资源放入Uri来进行一个调用(pig是cage的子资源)。因此,您是否将子资源作为超媒体(主资源中的链接)放入其中并停止,这意味着在REST API中,您永远不会超出您请求的第一个资源,您不会在url本身中列出子资源,而是使用超媒体并将其嵌入到第一个资源中……对吗

不知道,但我也发现了:

这没有什么问题

myapi.com/cage/12/pigs/34
如果这在您返回的资源上下文中有意义。如果
清管器34
仅在
笼子12
中有意义,并且与
笼子09
中的
清管器34
不同,则这是正确的方法。如果您的客户端希望使用URL
myapi.com/cage/12/pigs
查询笼子12中的所有清管器,这也是有意义的,它应该返回该笼子中所有清管器的URL


一般来说,不要强调URL在服务器上解析有多困难,几乎所有用于web开发的语言都有库可以帮助您完成这一任务。思考与资源表示相关的有意义的内容

我已经想出了自己的解决办法。也就是说,使用超媒体作为管理资源链接(关系)的手段,而不是让用户处理更长的复杂URI

不管怎样,看看这个,你就会明白,他说得很完美


如果您要使用RESTful和超媒体,那么URI设计应该是最不重要的方面之一——因为除了调用方希望从几个公开的URI开始,所有其他URI都是由您的服务在响应中提供的——因此,无论它们当前是什么,您都可以稍后改变主意并提供不同的URI。如果笼子负责给它们的猪编号,这样两个笼子有一只猪23,而那些不是同一只猪,那么我认为您显示的第一个URI是非常好的。URI是最不重要的,因为现在它只有一件事,每次调用都会简化为一个原子资源,所以是的,超媒体是推动关系等的因素,还有查询字符串中的过滤。我正在考虑改用超媒体,这样我们就不用担心像这样复杂的URL了。我们只有第一级的URL,或者[resource]/(全部给我)或者[resource]/{id},之后我们就不需要任何东西了。嗯,你必须这样做,这是后端设计的一部分,也是与REST相关的可用性。我不担心解析,而是方法命名,方法将位于何处(什么控制器或服务),更重要的是可伸缩性。使用超媒体比让url过于复杂更好。原子资源意味着每个资源只提供简单的积垢,仅此而已。别胡说八道。超媒体解决了这个问题,还提供了许多其他好处。你说的超媒体是什么意思?使用超媒体不会或不应该影响您的URL。至于有非常短的URL,如果它适合您的资源层次结构,那就好了。在你们给出的例子中,这似乎不合适。猪被关在笼子里,这反映在URL中。缩短所有URL并不反映这种关系。如果这意味着您在客户端失去了语义含义,那么您不应该这样做来简化服务器上的代码。那么您就不理解超媒体(资源链接)。注意这一点,它将允许您对RESTAPI进行修剪,而不会有那么多复杂的URL。我明白什么是超媒体。URL不应该硬编码到客户机中,而应该在它遍历资源时被发现,这并不意味着一旦客户机真的这样做了,资源层次结构就无关紧要了。例如,如果您的URL是api.com/cages/12,当客户端到达pig 45时链接到api.com/pigs/45,它如何返回到cage 12?您要么告诉客户机记住它以前所在的URL(如何?),要么将框架的URL嵌入到pig资源中。如果URL是api.com/cage/12/pigs/45,那么客户端只需反向跟踪URL。您能解释一下您的意思吗?链接消失了,视频也不是可以浏览的东西。