Rest 什么URI可用于请求默认资源?

Rest 什么URI可用于请求默认资源?,rest,resources,uri,Rest,Resources,Uri,在RESTAPI中创建新资源时,我希望用户能够请求一个已经包含一些默认值的空资源。因为它本身没有ID,所以我不能完全确定是否可以使用RESTful URI。一些想法: http://example.com/resource/_ http://example.com/resource/__new 对这个问题有什么建议或经验吗?我认为这更像是一个UI,而不是一个API,也就是说,UI应该为用户将默认值预先填充到相应的表单字段中,然后用户只需填充空格,并在必要时自定义默认值。然而,这并不适用于任何地

在RESTAPI中创建新资源时,我希望用户能够请求一个已经包含一些默认值的空资源。因为它本身没有ID,所以我不能完全确定是否可以使用RESTful URI。一些想法:

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

对这个问题有什么建议或经验吗?

我认为这更像是一个UI,而不是一个API,也就是说,UI应该为用户将默认值预先填充到相应的表单字段中,然后用户只需填充空格,并在必要时自定义默认值。然而,这并不适用于任何地方(例如,当您只有一个没有UI位的API时)

您自己已经提出了一些选项——这些选项会起作用,但是假设您可以以
/resource/123
的形式访问现有资源,这两个选项都会破坏您的URI设计。我可以想出三个方法来解决这个问题,最后一个(第三个)可能是最好的选择

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

示例:
假设您想要为名为“用户”的资源获取模板。首先对模板资源执行POST请求,并指出要为其创建“模板”的资源类型:

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>
POST /user/
API将使用默认值创建新资源,并响应:

HTTP/1.1 204 No Content
Location /user/123
HTTP/1.1 204 No Content
Location /user/123
与方法#1相同,URI将允许用户获取创建的资源,然后根据需要对其进行更改(通过PUT):

GET/user/123
123
EN
UTC
...

感谢您的详细回复。默认资源的想法是,我请求它——在我的例子中——能够预填充UI表单。因此,如果用户决定从不提交表单,那么创建一个新资源可能会很困难(这相当于根本不创建资源)。@Daff:我明白了,所以这就去掉了方法#1和#3。我在过去所做的解决方案提供了默认值作为UI逻辑的一部分,但这并不理想,特别是如果您希望将UI与API完全解耦的话。第二种方法在这种情况下会起作用,我认为它比使用
/resource/\u new
更为RESTful,因为模板本身也是一种资源。但是,通过将其定义为新资源,您可以将其与原始资源(作为模板)分开,这可能并不总是可取的(例如,从URI结构的角度来看)。
POST /user/
HTTP/1.1 204 No Content
Location /user/123
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>