【问题标题】:Validating inputs representing Resources and Sub-resources in REST验证 REST 中表示资源和子资源的输入
【发布时间】:2014-09-23 15:07:43
【问题描述】:

我有一个名为 user 的资源和一个名为 images 的子资源。要访问特定图像,唯一的方法是使用 URL:/users/{userId}/images/{imageId}。

数据库架构使得一个用户可以拥有多个图像。

客户端向我们发送“{userId}”和“{imageId}”的输入。我必须验证这些输入。我的问题是关于验证“{imageId}”输入。我有两个选择:

选项 1:验证特定 imageId 是否属于该 userId。如果我没有看到给定 userId 的图像,则抛出“给定 userId 没有图像”的错误。

选项 2:验证具有给定“{imageId}”的图像是否存在。抛出错误提示“具有给定 imageId 的图像不存在”。然后再次验证(另一个数据库检查)给定的“{imageId}”是否属于那个“{userId}”。

在上述两个选项中,哪个选项是正确的方法?

【问题讨论】:

    标签: web-services api validation rest


    【解决方案1】:

    我有一个名为 user 的资源和一个名为 images 的子资源。至 访问特定图像,唯一的方法是使用 URL: /users/{userId}/images/{imageId}。数据库模式是这样的 用户可以有多个图像。

    我想你误解了REST的URI结构限制:

    没有关于如何构建 URI 的限制。

    您可以使用自己的约定,没关系,因为客户端与 URI 结构解耦...例如我可以说我的图像在/images/{imageId} 下。这是完全有效的......

    您不必将资源映射到实体,而对于复杂的应用程序,您将无法做到这一点。

    在上述两个选项中,哪个选项是正确的方法?

    您可以用消息发回 404,即 URI 下没有资源。关于 URI 结构的错误消息对客户端没有任何意义。 URI 对客户端是不透明的。

    【讨论】:

    • 感谢您的回复。我知道我可以将图像表示为“/images/{imageId}”。我特别想强调这样一个事实,即由于某种原因,客户端无法访问图像,除非 url 是:“/users/userId/images/imageId”,并且这不能更改,因为这是它已经配置的方式。根据您的回复,我认为您是在要求我选择选项 1。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-02-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    相关资源
    最近更新 更多