如何命名资源标识符?

时间:2009-08-24 12:16:17

标签: rest uri

我有一个Restful网络服务。预订房间可以改变。哪个URI是更好的解决方案?

a)http://localhost/hotel/Xhotel/Reservation/15

b)http://localhost/hotel/Xhotel/Room/4/Reservation/15

c)http://localhost/hotel/Xhotel/Reservation/15/Room/4

4 个答案:

答案 0 :(得分:2)

这仅取决于您的要求。

例如,如果预订可以跨越多个房间,那么选项b)和c)将不是访问完整预订的好网址。

另一个问题是,如果您的预订ID在所有房间中都是唯一的,或者如果需要房间ID以便唯一地标识预订。

答案 1 :(得分:0)

首先你写RESTful。 REST是缩写。
其次,你应该通过预订ID访问它们,所以第一个选项是最好的 预订(唯一密钥:预订ID)有许多房间(忘记密钥:预订ID) 使用第二个选项查看特定房间的预订。 您还可以使用第三个选项显示预订中有关房间的数据。

答案 2 :(得分:0)

资源的每个表示应该只有一个URI。如果预订是重要部分,并且房间可以更改,则不要在URI中包含房间号。但是,只要遵循约束条件,REST就不会特别关注URI的外观。

答案 3 :(得分:0)

问题不在于URL或URI,问题是如果上面描述的对这3个选项的请求只是为了美化LINK或者你要抓住或从以下请求获得所有结果:

<强> A)

$_GET['hotel'] = "Xhotel";
$_GET['Reservation'] = 15;

<强> b)中

$_GET['hotel'] = "Xhotel";
$_GET['Room'] = 4;
$_GET['Reservation'] = 15;

<强> c)中

$_GET['hotel'] = "Xhotel";
$_GET['Reservation'] = 15;
$_GET['Room'] = 4;

这是我们可以从你拥有的3种格式获得的,而后两种格式是相同的。

如果您要利用请求中的数据,那就没关系,如果不是这样只会让您的程序看起来更大而没有效果,所以建议您第一次只做预订

尝试根据酒店UUID将预订ID设为 UUID v3或v5 ,以使其唯一。