一个RESTful API只用干净的网址 - 没有URL变量或交变量(a restful api o

2019-09-19 15:20发布

一个宁静的API已经为使用GET,POST,放或删除请求方法。 提交的behavaiour和数据完全由URI字符串来确定。 没有查询paramters或交变量。

这是真的 ?

有效期: 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
});

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

Answer 1:

话说http://example.com/foo/?value=84无效不entireley如此。 我的意思是,只要它是一个有效的URL会工作,你就可以通过GET或POST得到的参数。

在另一方面,REST是一种体系结构和它的要求之一是干净的URL(一个不包括与PARAMS“?”),所以这样的网址不被视为像URL休息。

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

编辑:

我从评论见下文你了解什么是REST,所以我会尽力举一个简单的例子一个问题:

  1. 为了得到你可能会使用数据http://example.com/foo/84作为GET请求,并FW知道获得资源富id为84的其余部分。
  2. 为了发布有关foo的数据,你可以拨打: http://example.com/foo/84作为POST请求,现在休息FW知道,因为它的一个POST请求,它会调用该方法负责处理后,不一个用于处理GET
  3. 要删除,与您通话DELETE操作相同的URL,我想你都知道了。

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



Answer 2:

在这里进了第三个答案违背了另外两个。

REST风格的URI几乎是一个矛盾。 URI的语义无关休息,这关系到REST是一个URI标识只有一个资源的唯一的事情。 除此之外,一个URI是一个原子标识符,以及其语义是无关紧要的。

休息也没关系,如果URI指向乔Doe的用户资源是:

http://example.com/users/joedoe

要么:

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

要么:

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

甚至:

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

没关系! 的URI不需要有RESTful应用程序中任何意义。 人们花那么多时间设计有意义的URI的REST应用,而他们应该有自己的媒体类型有关。 当你点击一个网页的链接,你不关心URI的语义,只在乎你的标签。 同样的事情发生与使用REST API客户端。 媒体类型的文件应说明的链接都可以和他们做什么,通过标签,您只需跟随他们。

如果您担心与URI的语义,这是你的客户从一些模板文件中的URI建设的标志,而你没有使用HATEOAS,这意味着你没有做REST的。



Answer 3:

POST变量是绝对OK,否则你会如何提交新资源或更新呢?

GET参数都很好指定资源应该如何呈现。 因此,我们确实http://example.com/foo/?value=84是不正确的-该URL不代表资源。

然而, http://example.com/user/84?fields=first_name,last_name将是确定。 在这种情况下,你可以使用额外的查询参数指定您只想要该资源的姓氏和名字。



文章来源: a restful api only uses clean urls - no url variables or post variables