1

我被推到一个特殊的境地,我无法决定什么是错的,什么是对的。

我有一个名为 Invoice 的资源。要获得 JSON 或 XML 表示,我使用下面的 URI

somedomain.com/inovices/{InvoiceNumber} - Invoice number is numeric
Accept: application/xml

当我想要相同资源的 PDF 时,我使用以下 URI:

somedomain.com/inovices/{InvoiceNumber} - Invoice number is numeric
Accept: application/pdf

上述两个 url 都用于经过身份验证的请求。我们还希望使用 GUID 支持未经身份验证的请求的相同资源,因此我们希望使用以下 URL

somedomain.com/inovices/{GUID}
Accept: application/pdf

上面的 URL 就像一个永久 URL,任何人都可以多次访问这个 URL。我的困惑是提供上述 URL 是否是 RESTful 的。因为在一个 URL 中我使用的是数字发票号码,而对于永久 URL,我将其替换为 GUID。

我觉得这是错误的原因是相同的资源用两个不同的 URI(数字和 GUID)表示,即使它们返回相同的资源。还是只是我的假设是错误的?是否反对任何 REST 约束是我无法理解的?

4

1 回答 1

1

指向同一资源的所有不同 URI 都没有问题。这不仅没问题,有时也被推荐,如果这会给用户增加价值的话。

想想这些例子:

GET /api/users/543
GET /api/users/bob-marley

或者,就像这样:

GET /questions/16637720/restful-different-uri-of-same-resource-to-get-different-forms-of-same-resource
GET /q/16637720/1118323

类似的例子到处都是。如果要对用户或SEO有所帮助,您可能需要添加此“不必要的”信息,并且仍然保持简短版本可用。或者想象一下情景,您希望在不破坏现有资源的情况下添加更多访问资源的方式。对我来说这听起来很常见,您不会因为同一资源拥有多个 URI 而违反任何规则。

如果您担心用户可能会认为这两种资源不同,因为她使用了不同的 URI,您可以将一个 URI 重定向到另一个,以明确表明它是完全相同的资源(就像当您点击短链接,或没有主题标题的链接)。

这是一个相关的答案

于 2013-05-19T19:39:56.447 回答