Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 应该"/“用户”;及/用户/";指向相同的(RESTful)资源?_Http_Rest - Fatal编程技术网

Http 应该"/“用户”;及/用户/";指向相同的(RESTful)资源?

Http 应该"/“用户”;及/用户/";指向相同的(RESTful)资源?,http,rest,Http,Rest,他们在任何其他网站上都有,但我不知道为什么 一个流行的类比是将RESTful资源与文件系统中的文件进行比较,文件名用户不会指向与文件名用户静态网页相同的对象,而在静态网站中用户会指向不同的文件users/index.html从技术上讲,他们是不同的。但是对/users的请求可能会导致重定向到/users/,从而使它们在语义上相等 就JAX-RS@Path而言,它们都可以用于相同的路径。技术上它们是不同的。但是对/users的请求可能会导致重定向到/users/,从而使它们在语义上相等 就JAX-

他们在任何其他网站上都有,但我不知道为什么


一个流行的类比是将RESTful资源与文件系统中的文件进行比较,文件名
用户
不会指向与文件名
用户
静态网页相同的对象,而在静态网站中
用户
会指向不同的文件
users/index.html

从技术上讲,他们是不同的。但是对
/users
的请求可能会导致重定向到
/users/
,从而使它们在语义上相等


就JAX-RS
@Path
而言,它们都可以用于相同的路径。

技术上它们是不同的。但是对
/users
的请求可能会导致重定向到
/users/
,从而使它们在语义上相等

就JAX-RS
@Path
而言,它们都可以用于相同的路径

filename
users
不会指向与filename
users/
相同的对象

事实并非如此。在大多数文件系统中,不能在同一父目录中有名为
users
的文件和名为
users
的目录

cd用户
cd用户/
具有相同的结果

filename
users
不会指向与filename
users/
相同的对象

事实并非如此。在大多数文件系统中,不能在同一父目录中有名为
users
的文件和名为
users
的目录


cd用户
cd用户
有相同的结果。

在这方面有一些细微差别,而“用户”代表一种资源,而“用户/”应代表一组资源,或对所有资源的操作“用户”。。。但对于这个问题似乎没有一个“标准”


关于这一点还有另一个讨论,请看这里:

在这方面有一些细微差别,而“用户”代表一种资源,“用户/”应代表一组资源,或对所有资源的操作“用户”。。。但对于这个问题似乎没有一个“标准”


关于这一点还有另一个讨论,请看这里:

简短回答:如果一个资源重定向到另一个资源,它们可能只识别同一个资源

URI标识资源,但它们的标识方式与HTTP中的GET请求不同。如果一个向另一个返回3xx,那么这两个URI将标识相同的资源。如果这两个资源各自返回一个2xx代码,那么URI将标识不同的资源。它们可以返回相同的响应来响应GET请求,但是它们不是相同的资源。这两个资源甚至可能映射到同一个处理程序以生成它们的回复,但它们因此不是同一个资源。致:

资源不是存储对象。该资源不是一个 服务器用来处理存储对象的机制。这个 资源是一个概念映射——服务器接收标识符 (用于标识映射)并将其应用于其当前映射 实现(通常是特定于集合的深层树的组合 遍历和/或哈希表)以查找当前负责的 然后,处理程序实现和处理程序实现选择 基于请求内容的适当操作+响应

那么,
/users
/users/
是否应该返回相同的响应?不可以。如果一个没有重定向到另一个,那么它们应该返回不同的响应。然而,这本身并不是REST的约束。然而,这是一个使网络系统更具可伸缩性的约束:在多个资源中复制的信息可能会失去同步(特别是在存在缓存的情况下,这是REST的约束),并导致竞争条件。有关完整的讨论,请参见Pat Helland's

最后,当尝试解析相对于给定URI的引用时,客户端可能会中断。很明显,针对
/users/
解析相对引用
/Jerry/age
会导致
/users/Jerry/age
,而针对
/users
(无尾随斜杠)解析相对引用会导致
/Jerry/age
。令人惊讶的是,已经编写了大量客户端代码来检测和纠正后者的行为,使其与前者类似(但并不总是成功)


对于任何集合(通常是
/users/
),我发现最好总是在URI中发出
/users/
,每次都将
/users
重定向到
/users/
,并提供来自
/users/
资源的最终响应:这可以防止实体失去同步,并使相对分辨率在任何客户端上都变得很快。

简短回答:只有当一个资源重定向到另一个资源时,它们才能识别相同的资源

URI标识资源,但它们的标识方式与HTTP中的GET请求不同。如果一个向另一个返回3xx,那么这两个URI将标识相同的资源。如果这两个资源各自返回一个2xx代码,那么URI将标识不同的资源。它们可以返回相同的响应来响应GET请求,但是它们不是相同的资源。这两个资源甚至可能映射到同一个处理程序以生成它们的回复,但它们因此不是同一个资源。致:

资源不是存储对象。该资源不是一个 服务器用来处理存储对象的机制。这个 资源是一个概念映射——服务器接收标识符 (用于标识映射)并将其应用于其当前映射 实现(通常是特定于集合的深层树的组合 遍历和/或哈希表)以查找当前负责的 然后,处理程序实现和处理程序实现选择 基于请求内容的适当操作+响应

所以,应该
/