在RESTful网站中,每个资源都应该由URI标识。但是,我应该如何处理关系数据库中所谓的“弱实体”,也就是说,只有在与另一个资源相关时才有意义的资源?它们是否也有指向它们的特定URI?
举个例子:假设我有一个网站,用于显示城市中发生的事件。每个活动都可以有用户发布的评论。
event
是一种资源,具有相应的URI(/events/:id
)。
但是每个comment
也应该有一个URI吗?像/events/:eventid/comments/:commentid
一样?注释只有在与相应事件关联时才有意义,因此只有表示一条消息的页面似乎很奇怪/不必要。我只希望评论出现在活动的页面上。
我猜/events/:eventid/comments/:commentid
URI可以用于DELETE
请求,但它应该返回GET
个请求?
答案 0 :(得分:3)
event
是一种资源,具有相应的URI(/events/:id
)。 但是每个comment
也应该有一个URI吗?喜欢/events/:eventid/comments/:commentid
?
如果comment
是资源,则它必须具有标识符,但并不意味着您必须支持此类资源的所有操作。如果目标资源不支持某种方法,服务器可以返回带有405
状态代码的响应:
405
(方法不允许)状态代码表示请求行中接收的方法由源服务器知道,但目标资源不支持。 [...]
我猜
/events/:eventid/comments/:commentid
URI可以用于DELETE
请求,但它应该返回GET
个请求?
返回具有给定标识符的注释的表示。
答案 1 :(得分:2)
在RESTful网站中,每个资源都应该由URI标识。但是我应该如何处理所谓的弱实体"在关系数据库中,也就是说,只有在与另一个资源相关时才有意义的资源?它们是否也有指向它们的特定URI?
这取决于。需要认识到的一件重要事情是资源和实体不是一对一。您可以拥有许多资源(网页),其中包含来自同一实体的信息。
Jim Webber用这种方式描述了这种区别
网络不是您的域名,它是一个文档管理系统。所有HTTP谓词都适用于文档管理域。 URI不会映射到域对象 - 这违反了封装。
Domain Driven Design for Restful Systems
我想/ events /:eventid / comments /:commentid URI可以用于DELETE请求,但它应该返回给GET请求呢?
如Cassio所述,如果客户端错误地使用不受支持的方法发送请求,则405 Method Not Allowed是正确的状态代码。 OPTIONS是用于通知客户资源当前支持哪些方法的适当机制。
您也可以通过将客户端重定向到/events/:eventId
资源来进行响应;利用URI Fragment support并将客户端重定向到/events/:eventid#:commentid
甚至是有意义的 - 允许客户端使用自己的片段发现来识别事件表示中的特定注释。
或者,如果您希望支持有用的集成,则可以让此资源返回一个公开集成的表示。
答案 2 :(得分:0)
这实际上取决于客户端如何使用域名。应用程序是否希望获取事件的所有注释列表?用户是否可以更新他们的通讯?或者他们是匿名评论?
如果您打算只使用同一页面显示事件和评论的后端信息,那么您不需要单独的评论API。如果您想向应用程序供应商打开数据集(也许您可能希望将来开发应用程序),那么评论api会很方便。即获取活动的所有评论。