我想你有没有像这样的UriTemplates:
http://myapi.com/cage/12/pigs/23
- 给我12只笼子里的猪23
我认为标准版或REST API通常不会粘贴在/ pigs / 23上。我想你只是将所有东西保持在一个水平,所以如果我想要那只猪,它会从Pig服务中获得它and by sending a request to /pigs/23
换句话说,你永远不会看到这样的网址进入RESTful API:
http://myapi.com/cage/12/pigs/23
因为你在处理猪服务中的特定方法时如何处理?你会从pig服务的GetByCage(int id,int cageId)中删除12的cageId吗?
我认为这会变得太复杂,因为我可以在给定的资源中看到大量的这类BySomething方法,如果你考虑在API中执行此操作的所有资源,这些方法可能会变得不一致或不可维护。
如果我不是不正确,我相信人们只将它保留到[资源] / [id] - 一个级别意味着你永远不会超越Uri中的初始资源或id,你就会停在那里。然后在响应中使用超媒体为消费者提供另一个Uri以获取其他资源。
所以在http://myapi.com/cage/12/pigs/23
的情况下,它应该永远不会那样。它应该是对/ cage / 12的调用,你得到那个笼子表示。然后在笼子json对象中你会看到一个属性可能像http://myapi.com/pigs/23
并再打一次电话?这是2次调用,可能很重,而不是以某种方式通过将子资源放入Uri中来进行一次调用(猪是笼子的子资源)。所以你把sub resoure作为超媒体(主要资源中的链接)放在那里,然后停在那里,这意味着在REST API中你永远不会超出你请求的第一个资源,你不会在url本身列出子资源,而是使用超媒体相反,并将其嵌入第一个资源......对吗?
不知道,但我也发现了这个: http://stateless.co/hal_specification.html
答案 0 :(得分:2)
没有错
myapi.com/cage/12/pigs/34
如果在您返回的资源的上下文中有意义。如果pig 34
仅在cage 12
的上下文中有意义,并且与pig 34
中的cage 09
不同,那么这尤其正确,那么这将是正确的方法它。如果您的客户想要使用URL myapi.com/cage/12/pigs
查询笼子12中的所有猪,这也是有意义的,这应该返回该笼子中所有猪的URL。
通常不要强调URL在您的服务器上解析的难度,几乎每种用于Web开发的语言都有库来帮助解决这个问题。想一想与资源表示有关的内容。
答案 1 :(得分:0)
我已经找到了自己的解决方案。那就是使用超媒体作为管理资源链接(关系)的手段,而不是处理并让您的用户处理更复杂的URI。
无论如何,看着这个,你就明白了,他说得很完美。
https://www.youtube.com/watch?feature=player_embedded&v=5WXYw4J4QOU