如何在RESTful网站中处理“弱”资源?

如何在RESTful网站中处理“弱”资源?,rest,Rest,在RESTful网站中,每个资源都应该由URI标识。但是,我应该如何处理关系数据库中所谓的弱实体,即仅在与其他资源相关时才有意义的资源?它们是否也应该有指向它们的特定URI 举个例子:假设我有一个网站,用来展示一个城市正在发生的事件。每个事件都可以由用户发布评论 事件是一种资源,具有相应的URI/events/:id。 但是每个评论也应该有一个URI吗?比如/events/:eventid/comments/:commentid?注释只有在与相应的事件关联时才有意义,因此有一个只表示一条消息的页

在RESTful网站中,每个资源都应该由URI标识。但是,我应该如何处理关系数据库中所谓的弱实体,即仅在与其他资源相关时才有意义的资源?它们是否也应该有指向它们的特定URI

举个例子:假设我有一个网站,用来展示一个城市正在发生的事件。每个事件都可以由用户发布评论

事件是一种资源,具有相应的URI/events/:id。 但是每个评论也应该有一个URI吗?比如/events/:eventid/comments/:commentid?注释只有在与相应的事件关联时才有意义,因此有一个只表示一条消息的页面似乎很奇怪/没有必要。我只希望评论出现在活动页面上


我猜/events/:eventid/comments/:commentid URI可以用于删除请求,但是它应该返回到GET请求中什么呢?

这实际上取决于客户端希望如何处理域。应用程序是否希望获取事件所有评论的列表?是否允许用户更新其通讯?还是匿名评论


如果您计划只使用同一个页面来显示事件和注释的后端信息,那么您通常不需要单独的注释api。如果您希望向应用程序供应商打开数据集,那么您可能希望在将来开发一个应用程序,而comments api将非常方便。i、 e.获取事件的所有评论。

这实际上取决于客户端希望如何处理域。应用程序是否希望获取事件所有评论的列表?是否允许用户更新其通讯?还是匿名评论

如果您计划只使用同一个页面来显示事件和注释的后端信息,那么您通常不需要单独的注释api。如果您希望向应用程序供应商打开数据集,那么您可能希望在将来开发一个应用程序,而comments api将非常方便。i、 e.获取活动的所有评论

事件是一种资源,具有相应的URI/events/:id。 但是每个评论也应该有一个URI吗?比如/events/:eventid/comments/:commentid

若注释是一个资源,它必须有一个标识符,但这并不意味着您必须支持此类资源的所有操作。如果目标资源不支持某个方法,服务器可以返回带有状态代码的响应:

405 Method Not Allowed状态代码表示在请求行中接收到的方法是源服务器已知的,但目标资源不支持该方法。[……]

我猜/events/:eventid/comments/:commentid URI可以用于删除请求,但是它应该返回什么到GET请求呢

返回具有给定标识符的注释表示形式

事件是一种资源,具有相应的URI/events/:id。 但是每个评论也应该有一个URI吗?比如/events/:eventid/comments/:commentid

若注释是一个资源,它必须有一个标识符,但这并不意味着您必须支持此类资源的所有操作。如果目标资源不支持某个方法,服务器可以返回带有状态代码的响应:

405 Method Not Allowed状态代码表示在请求行中接收到的方法是源服务器已知的,但目标资源不支持该方法。[……]

我猜/events/:eventid/comments/:commentid URI可以用于删除请求,但是它应该返回什么到GET请求呢

返回具有给定标识符的注释表示形式

在RESTful网站中,每个资源都应该由URI标识。但是,我应该如何处理关系数据库中所谓的弱实体,即仅在与其他资源相关时才有意义的资源?它们是否也应该有指向它们的特定URI

视情况而定。需要认识到的一件重要事情是,资源和实体不是一对一的。您可以拥有多个资源网页,其中包含来自同一实体的信息

吉姆·韦伯这样描述了这种区别

网络不是你的领域,它是一个文档管理系统。所有HTTP谓词都适用于文档管理域。URI不映射到域对象,这违反了封装

我猜/events/:eventid/comments/:commentid URI可以用于删除请求,但是它应该返回什么到GET请求呢

如中所述,是在客户端错误地使用不受支持的方法发送请求时要使用的正确状态代码。是通知客户端资源当前支持哪些方法的适当机制

您还可以让它通过将客户端重定向到/events/:eventId资源进行响应;甚至可以利用并将客户机重定向到/events/:eventid:commentid——允许 客户端使用其自己的片段发现来识别事件表示中的特定注释

或者,如果您希望支持一些有用的集成,那么您可以让此资源返回一个公开集成的表示

在RESTful网站中,每个资源都应该由URI标识。但是,我应该如何处理关系数据库中所谓的弱实体,即仅在与其他资源相关时才有意义的资源?它们是否也应该有指向它们的特定URI

视情况而定。需要认识到的一件重要事情是,资源和实体不是一对一的。您可以拥有多个资源网页,其中包含来自同一实体的信息

吉姆·韦伯这样描述了这种区别

网络不是你的领域,它是一个文档管理系统。所有HTTP谓词都适用于文档管理域。URI不映射到域对象,这违反了封装

我猜/events/:eventid/comments/:commentid URI可以用于删除请求,但是它应该返回什么到GET请求呢

如中所述,是在客户端错误地使用不受支持的方法发送请求时要使用的正确状态代码。是通知客户端资源当前支持哪些方法的适当机制

您还可以让它通过将客户端重定向到/events/:eventId资源进行响应;甚至可以利用并将客户机重定向到/events/:eventid:commentid——允许客户机使用自己的片段发现来识别事件表示中的特定注释

或者,如果您希望支持一些有用的集成,您可以让此资源返回一个公开集成的表示。

获取连接超时获取连接超时