1

一个 restful api 必须使用 get、post、put 或 delete 请求方法。提交的行为和数据完全由 uri 字符串决定。没有查询参数或发布变量。

这是真的 ?

有效的 :http://example.com/foo/84

无效http://example.com/foo/?value=84

有效的 :

$.ajax({
  type: 'POST',
  url: "http://example.com/foo/84",
  success: success,
  dataType: dataType
});

无效

$.ajax({
  type: 'POST',
  url: "http://example.com/foo/",
  data: 84,
  success: success,
  dataType: dataType
});

编辑 到目前为止的两个答案,并且相互矛盾。

4

3 回答 3

5

这是与其他两个相矛盾的第三个答案。

RESTful URI 几乎是矛盾的。URI 的语义与 REST 无关,唯一对 REST 重要的是一个 URI 只标识一个资源。除此之外,URI 是一个原子标识符,它的语义是无关紧要的。

对于 REST,指向 Joe Doe 的用户资源的 URI 是否为:

http://example.com/users/joedoe

或者:

http://example.com/users?username=joedoe

或者:

http://example.com/jif892mfd02-18f2

甚至:

ftp://example.com/users/joedoe.json

没关系!URI 在 RESTful 应用程序中不需要有任何意义。人们花了很多时间为他们的 REST 应用程序设计有意义的 URI,同时他们应该关心他们的媒体类型。当您单击网页上的链接时,您不关心 URI 的语义,您只关心标签。使用 REST API 的客户端也会发生同样的事情。您的媒体类型的文档应通过标签描述可用的链接以及它们的作用,您只需遵循它们即可。

如果您关心 URI 的语义,这表明您的客户端正在从文档中的某个模板构建 URI,而您没有使用 HATEOAS,这意味着您根本没有使用 REST。

于 2013-11-02T18:58:34.973 回答
3

POST 变量肯定没问题,否则您将如何提交新资源或更新它?

GET 参数可以很好地指定资源的呈现方式。所以确实http://example.com/foo/?value=84是不对的 - URL 不代表资源。

不过,http://example.com/user/84?fields=first_name,last_name应该没问题。在这种情况下,您将使用附加查询参数来指定您只需要该资源的名字和姓氏。

于 2012-07-17T12:58:49.100 回答
-3

说这http://example.com/foo/?value=84是无效的并不完全正确。我的意思是,只要它是一个有效的 URL,它就可以工作,并且您将能够通过 get 或 post 获取参数。

另一方面,REST 是一种架构,它的一个要求是一个干净的 URL(不包括带有“?”的参数),因此这样的 URL 不被视为类似于 REST 的 URL。

所以如果你打算构建一个基于 REST 的应用程序,你应该只使用干净的 url。

编辑:

我从下面的评论中看到你在理解什么是 REST 时遇到了问题,所以我将尝试举一个简单的例子:

  1. 为了获取数据,您可能会将http://example.com/foo/84其用作获取请求,而其余 FW 知道获取 id 为 84 的资源 foo。
  2. 为了发布有关 foo 的数据,您可以调用:http://example.com/foo/84作为 POST 请求,现在 Rest FW 知道,由于它是一个 post 请求,它将调用负责处理 post 的方法,而不是处理 get 的方法
  3. 要删除,您使用 DELETE 操作调用相同的 URL,我想您知道其余的。

所以,虽然你有相同的 URL,但它是否是 GET/POST/PUT/DELETE 请求真的很重要。

于 2012-07-17T13:06:58.003 回答