当我在端点上使用多个值时,是否违反了 REST 最佳实践?
Do I violate REST best practices when I use more than one value on my endpoint?
我或多或少是 REST 的新手,现在我遇到这样的情况,我不知道我在做什么是对还是错。据我所知,REST世界没有严格的规定,我想听听你的一两个意见。
我有以下资源:
http://localhost:80/srv1/public/api/v1/folders/
通过此端点,我可以获得给定文件夹的信息。例如:
GET: http://localhost:80/srv1/public/api/v1/folders/vacations
结果如下所示:
Name | Typ
---------- | ------
2017 Maui | Folder
2016 Japan | Folder
现在我想要 2016 Japan
的信息并且我编程让我的端点能够接收多个值,如下所示:
http://localhost:80/srv1/public/api/v1/folders/vacations/2016 Japan
问题是:这是不是因为我使用多个 value/parameter 作为端点?
背景:我需要保留用户点击过的文件夹的结构。例如。 /vacations/2016 Japan/Tokio
在我的 server/backend 上进一步处理它。因为我看不到实现此目的的另一种方法,所以我想听听您的选择。谢谢。
As far as I know, there are no strict rules in the REST world
对; REST 不关心您对资源标识符使用什么拼写。从客户的角度来看,标识符是不透明的。服务器可以自行决定将信息编码到其中并供自己专用。
但一个好的经验法则是考虑 1990 年代网站的外观。
您可以单击带有 link 标签的文件夹,这将为您提供这些文件夹的代表,包括一个标签为“假期”的条目。单击 link 将为您提供另一种表示形式,其中包括标有“2016 日本”的 link。单击 link 会得到一个表示,依此类推。
link 的 HREF 属性中的值可以是任何值,因为您只是单击它们。
"folders" : { "href" : "/28484a30-ccf7-4b36-8f1b-cea70223d4f7" }
"vacations" : { "href" : "/2abaac1b-5bb8-4284-abb6-37953cac68b1" }
"2016 Japan" : { "href" : "/84dfc3c2-3d04-4b33-9551-cb5a35237de5" }
当恐龙在网络上漫游时,我们经常处理静态的、分层的网站。使用 relative references allowed the reuse of representations at different points in the URI space - the client could follow the standard resolution rules 计算预期的标识符。
所以你可能会看到这样的拼写
"folders" : { "href" : "/folders" }
"vacations" : { "href" : "/folders/vacations" }
"2016 Japan" : { "href" : "/folders/vacations/2016%20Japan" }
%20 因为标识符中的SP需要是percent encoded
Background: I need to retain the structure of the folders the user has clicked. E.g. /vacations/2016 Japan/Tokio to process it further on my server/backend. Because I don't see another way of achieving this I would like to hear your option.
这有点紧张。 REST 架构风格使用 Client Stateless Server 层次结构风格。这意味着服务器上没有 session 状态;客户端只是发送 links.
这意味着当服务器收到对 /folders/vacations/2016%20Japan
的请求时,它无法 知道 客户端先前访问过 /folders
和 /folders/vacations
。例如,我可能正在关注您通过电子邮件发送给我的 link。
注意:以这种方式编写 URI 没有任何问题;服务器可以以任何方式将信息编码到 uri 中。您只需要注意您对客户端状态所做的假设。
也就是说,如果您不打算采用层次结构,那么 path segments 可能不是您的最佳选择
The path component contains data, usually organized in hierarchical form
非分层数据通常以两种方式之一处理;通过将其编码为 query component
"folders" : { "href" : "/?folders" }
"vacations" : { "href" : "/?folders,vacations" }
"2016 Japan" : { "href" : "/?folders,vacations,2016%20Japan" }
或通过将其编码成个人路径段
"folders" : { "href" : "/folders" }
"vacations" : { "href" : "/folders,vacations" }
"2016 Japan" : { "href" : "/folders,vacations,2016%20Japan" }
在RESTFul Web Services, Ruby and Richardson proposed using punctuation to delimit data at the same level in the hierarchy;如果顺序重要则使用逗号,否则使用分号。
请注意,没有规定您的集合中的数据需要继续进入最后一个路径段。
"folders" : { "href" : "/folders/pages" }
"vacations" : { "href" : "/folders,vacations/pages" }
"2016 Japan" : { "href" : "/folders,vacations,2016%20Japan/pages" }
RFC 6570 defines variable expansions; access to a URI Template library with support for level 4 templates 使这些拼写更加实用。
我或多或少是 REST 的新手,现在我遇到这样的情况,我不知道我在做什么是对还是错。据我所知,REST世界没有严格的规定,我想听听你的一两个意见。
我有以下资源:
http://localhost:80/srv1/public/api/v1/folders/
通过此端点,我可以获得给定文件夹的信息。例如:
GET: http://localhost:80/srv1/public/api/v1/folders/vacations
结果如下所示:
Name | Typ
---------- | ------
2017 Maui | Folder
2016 Japan | Folder
现在我想要 2016 Japan
的信息并且我编程让我的端点能够接收多个值,如下所示:
http://localhost:80/srv1/public/api/v1/folders/vacations/2016 Japan
问题是:这是不是因为我使用多个 value/parameter 作为端点?
背景:我需要保留用户点击过的文件夹的结构。例如。 /vacations/2016 Japan/Tokio
在我的 server/backend 上进一步处理它。因为我看不到实现此目的的另一种方法,所以我想听听您的选择。谢谢。
As far as I know, there are no strict rules in the REST world
对; REST 不关心您对资源标识符使用什么拼写。从客户的角度来看,标识符是不透明的。服务器可以自行决定将信息编码到其中并供自己专用。
但一个好的经验法则是考虑 1990 年代网站的外观。
您可以单击带有 link 标签的文件夹,这将为您提供这些文件夹的代表,包括一个标签为“假期”的条目。单击 link 将为您提供另一种表示形式,其中包括标有“2016 日本”的 link。单击 link 会得到一个表示,依此类推。
link 的 HREF 属性中的值可以是任何值,因为您只是单击它们。
"folders" : { "href" : "/28484a30-ccf7-4b36-8f1b-cea70223d4f7" }
"vacations" : { "href" : "/2abaac1b-5bb8-4284-abb6-37953cac68b1" }
"2016 Japan" : { "href" : "/84dfc3c2-3d04-4b33-9551-cb5a35237de5" }
当恐龙在网络上漫游时,我们经常处理静态的、分层的网站。使用 relative references allowed the reuse of representations at different points in the URI space - the client could follow the standard resolution rules 计算预期的标识符。
所以你可能会看到这样的拼写
"folders" : { "href" : "/folders" }
"vacations" : { "href" : "/folders/vacations" }
"2016 Japan" : { "href" : "/folders/vacations/2016%20Japan" }
%20 因为标识符中的SP需要是percent encoded
Background: I need to retain the structure of the folders the user has clicked. E.g. /vacations/2016 Japan/Tokio to process it further on my server/backend. Because I don't see another way of achieving this I would like to hear your option.
这有点紧张。 REST 架构风格使用 Client Stateless Server 层次结构风格。这意味着服务器上没有 session 状态;客户端只是发送 links.
这意味着当服务器收到对 /folders/vacations/2016%20Japan
的请求时,它无法 知道 客户端先前访问过 /folders
和 /folders/vacations
。例如,我可能正在关注您通过电子邮件发送给我的 link。
注意:以这种方式编写 URI 没有任何问题;服务器可以以任何方式将信息编码到 uri 中。您只需要注意您对客户端状态所做的假设。
也就是说,如果您不打算采用层次结构,那么 path segments 可能不是您的最佳选择
The path component contains data, usually organized in hierarchical form
非分层数据通常以两种方式之一处理;通过将其编码为 query component
"folders" : { "href" : "/?folders" }
"vacations" : { "href" : "/?folders,vacations" }
"2016 Japan" : { "href" : "/?folders,vacations,2016%20Japan" }
或通过将其编码成个人路径段
"folders" : { "href" : "/folders" }
"vacations" : { "href" : "/folders,vacations" }
"2016 Japan" : { "href" : "/folders,vacations,2016%20Japan" }
在RESTFul Web Services, Ruby and Richardson proposed using punctuation to delimit data at the same level in the hierarchy;如果顺序重要则使用逗号,否则使用分号。
请注意,没有规定您的集合中的数据需要继续进入最后一个路径段。
"folders" : { "href" : "/folders/pages" }
"vacations" : { "href" : "/folders,vacations/pages" }
"2016 Japan" : { "href" : "/folders,vacations,2016%20Japan/pages" }
RFC 6570 defines variable expansions; access to a URI Template library with support for level 4 templates 使这些拼写更加实用。