可以使用什么URI来请求默认资源?

时间:2011-03-09 17:57:32

标签: rest resources uri

在我的REST API中创建新资源时,我想让用户可以请求已包含一些默认值的空资源。由于它本身没有ID,我不完全确定我可以使用的RESTful URI。一些想法:

http://example.com/resource/_
http://example.com/resource/__new

有关该问题的任何建议或经验吗?

1 个答案:

答案 0 :(得分:1)

我认为这更像是UI事物而不是API事物 - 即UI应该将默认值预填充到用户的相应表单字段中,然后用户只需填写空白并自定义默认值如有必要。但这并不适用于所有地方(例如,当您只有没有UI位的API时)。

您已经自己提出了一些选项 - 这些选项可行,但假设您可以像/resource/123那样访问现有资源,这两个选项都会破坏您的URI设计至少一点。我可以想到如何处理这个问题的三个选择,最后一个(第三个)可能是最好的选择。

方法#1
更好的方法可能是模仿在REST中通常完成时间密集型任务的方式。您通常拥有一个POST任务的资源,然后该服务使用任务URI进行回复,您可以稍后使用该URI来检查任务的进度。我们可以根据我们的情况调整它 - 使用默认值定义空资源作为新资源,我们可以使用它来获取不同资源的“模板”

实施例
假设您要获取名为“user”的资源的模板。您首先要对模板资源发出POST请求,并指出要为其创建“模板”的资源类型:

POST /template/

<?xml version="1.0" encoding="UTF-8" ?>
<template>
    <type>user</type>
</template>

API会为指定的类型创建一个新的“默认”资源,如果成功,它会响应:

HTTP/1.1 204 No Content
Location /user/123

API的回复中指定的位置将包含资源的模板:

GET /user/123

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <id>123</id>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>



方法#2

方法#1已经为您创建了一个资源。另一种方法是允许用户访问特定URI上的模板。

示例:

GET /template/user

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>



方法#3

还有一个替代方案 - 我认为这是最简单和最合乎逻辑的方法,但它可能并不适合所有情况。您可以通过直接对要使用的资源执行POST请求来创建具有默认值的空资源。一个缺点可能是,这将不允许用户只查看模板(他们可以在方法#1中),它将始终为他们创建资源(类似于方法#1)。

实施例
为了获得资源的默认版本,您将向该资源发送空POST请求:

POST /user/

API将创建一个具有默认值的新资源,并以:

响应
HTTP/1.1 204 No Content
Location /user/123

与方法#1相同,URI将允许用户获取创建的资源,然后根据需要进行更改(通过PUT):

GET /user/123

<?xml version="1.0" encoding="UTF-8" ?>
<user>
    <id>123</id>
    <name />
    <email />
    <preferred-language>en</preferred-language>
    <timezone>UTC</timezone>
    ...
</user>