2013-05-19 30 views
1

我被推入了一个特殊的情况,我无法确定什么是错的,什么是正确的。RESTful - 获得不同形式的相同资源的相同资源的不同URI

我有一个名为Invoice的资源。为了让我使用下面URI

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

一个JSON或XML表示当我想同样的资源的PDF我使用下面的URI:

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

上述两个网址的供应经过身份验证的请求。我们也希望使用GUID用于身份认证的请求,支持相同的资源,因此我们希望在下面的网址

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

使用上面的网址就像是一个永久的URL和任何人都可以访问此网址任意次数。我的困惑是,如上提供的URL是否是RESTful。因为在一个网址中,我使用的是数字型发票号码和永久性网址,因此我将其替换为GUID。

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

+0

当然,您可以使用不同的URL传递相同的文档。为什么不应该允许?我在真实世界的应用程序中多次看到它,并且我没有看到它应该错误的任何逻辑原因。 – dirkk

+0

@dirkk感谢您的确认,如果您还记得,您是否可以将我指向某个网址? – JPReddy

+0

对不起,他们是内部客户项目。不能这样做。 – dirkk

回答

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,并且仍然保持可用的短版本,您可能需要添加此“unnessecary”信息。或者想象一下senarios,在那里你会想添加更多访问资源的方式而不会破坏现有的资源。这听起来很常见,并且您不会因为同一资源有多个URI而违反任何规则。

如果您担心用户可能认为这两个资源因使用不同的URI而不同,您可以让一个URI重定向到另一个URI,以使其明确表示它完全相同的资源你点击了短链接,或者没有标题的链接)。

这里是relevant answer