2011-07-21 73 views
5

是在REST资源的JSON(或XML)表示中使用URI的最佳做法,例如REST资源的JSON表示应该使用相关资源的URI吗?

例如,对于具有附件列表的资源,其中每个附件都有一个可用于使用URL像http://myserver.com/resources/attachments/检索:

{ 
    fileName: "screenshot.png" 
    contentType: "application/octet-stream" 
    id: 52004 
} 

是否也应该添加一个uri元素像

{ 
    fileName: "screenshot.png" 
    contentType: "application/octet-stream" 
    id: 52004 
    uri: /resources/attachments/52004 
} 

回答

8

是的,我认为你应该包括一个链接到集合中的每个项目。没有链接的API不是RESTful(更重要的是,没有那么有用)。如果您认为人类客户宁愿有一个链接,而不是指示如何通过ID申请一个项目,这同样适用于非人类客户。你也应该给客户的项目如何与当前资源的一些想法提供了一个链接关系:

link : { uri: "/resources/attachments/52004", rel: "/rels/file-attachment" } 

约翰

+1

如果你这样做,那么“id”成员是完全多余的。 – fumanchu

+0

@fumanchu好点 –

+0

“id”参数不是完全多余的。响应中有一个ID允许最终用户通过API重构,网址版本控制和可能作为引用该资源的其他调用的过滤器来唯一标识该资源。 – trcarden

0

如果是完全无用的,因为你仍然需要发送从S的信息如果用户请求了资源,并且您从资源的id中获取资源,而不是URI,那么这个问题就很严重。

此外,有时某些资源不需要URI,因为它们永远不会被请求或不能直接请求。

+0

从对REST的维基百科条目:“A资源基本上可以是任何连贯可以解决的有意义的概念。“在网络上,识别资源的方式是通过URI而不是数据库ID。 –