HDa*_*ave 7 java rest web-services jax-rs
我们有一些实体既有唯一的业务ID(例如"my-unique-name"),也有内部UUID(例如aa54-342-dffdf-55445-effab).什么是提供可以使用任一方法返回资源的REST URI的好方法.
方法1 - 有两个资源URL(丑陋!!!):
/富逐ID /我的唯一名称
/富逐UUID/aa54-342-dffdf-55445-effab
方法2 - 始终使用查询参数(即使它返回单个项目......似乎是un-rest-lke)
/富?ID =我的唯一名称
/富?=的uuid aa54-342-dffdf-55445-effab
方法3 - 让网络服务弄清楚{id}是否是UUID(这可能容易出错,但在所有likihood中都可以正常工作......
方法4 - 使用UUID,允许业务ID作为查询参数(不知道这是否可行)
/富?ID =我的唯一名称
/富/ aa54-342-dffdf-55445-effab
任何想法都表示赞赏.
我会使用类似于选项4的东西.使用路径段中的UUID作为单个资源URL.使用备用URL作为一种搜索URL
例如
GET /foo?name=my-unique-name
303 See Other
Location: http://example.org/foo/aa54-342-dffdf-55445-effab
Run Code Online (Sandbox Code Playgroud)
您不希望有两个URL都返回具有相同资源的200.这会导致缓存污染.
现在,您可以自由地将GET"搜索样式"URL用于其他类型的搜索.
GET /foo?account=other-unique-value
303 See Other
Location: http://example.org/foo/aa54-342-dffdf-55445-effab
Run Code Online (Sandbox Code Playgroud)
或者你甚至可以搜索非独特的东西.
GET /foo?country=a-non-unique-value
200 OK
Content-Type: application/vnd.hal+xml
<resource href="http://example.org/foo?country=a-non-unique-value">
<resource rel="urn:acme:foo" href="http://example.org/foo/aa54-342-dffdf-55445-effab"/>
<resource rel="urn:acme:foo" href="http://example.org/foo/ba54-299-weras-55445-effab"/>
<resource rel="urn:acme:foo" href="http://example.org/foo/ca54-743-werre-23434-effab"/>
<resource>
Run Code Online (Sandbox Code Playgroud)
选择一个作为规范,307将另一个重定向到它.如果不这样做,则会冒两个URI返回不同数据的风险,因为它们已在不同的时间或生命周期进行缓存.通过从一个重定向到另一个,您允许PUT,POST或DELETE请求使单个规范URI的缓存无效.使用307而不是302,以便"历史"客户端不会将POST更改为GET.我推荐方法1,让UUID重定向到商业ID只是因为它更漂亮.
归档时间: |
|
查看次数: |
2261 次 |
最近记录: |