REST API URL必须如下所示吗?

时间:2010-10-30 08:29:54

标签: api rest restful-url

实现RESTful API是否正确,必须实现类似于此

的URL结构
http://example.com/post/
http://example.com/post/123

/123将用于编辑,删除

提出问题的另一种方法是:看起来像这样的URL可以称为RESTful吗?

http://example.com/script.php?method=get_title&blogid=123

8 个答案:

答案 0 :(得分:14)

你没有 来设计你的URI结构。它也可能是/some_obscure_string/base64_encoded_title/unique_id。这也可以是RESTful,具体取决于其他几个因素。

但是有几个关于如何在RESTful Web应用程序中设计URI的最佳实践,并且尽可能简单且尽可能易读。

您的示例http://example.com/script.php?method=get_title&blogid=123也可能是RESTful,但查询参数表明使用了某种RPC或RMI-over-HTTP。

总结一下:不要过多考虑你的URI设计。这将通过适当的RESTful设计自动实现。

答案 1 :(得分:7)

REST背后的理念是每个资源都有自己的URL,您使用不同的HTTP方法与这些资源进行交互。定义URL结构是有意义的,这样不同资源之间的层次结构就会反映在URL中,但您不必这样做。

如果你有这样的网址

 /all-posts/
 /first-post
 /some-stuff/second-post
 /third-post

你仍然可以为此提供RESTful API。想法是GET/all-posts/返回每个帖子对象的URL列表,客户端使用这些URL与资源交互。基本上,客户端应将URL视为不透明数据。

只要客户端中嵌入的URL没有更改,您也可以更改结构而无需更改客户端。

您的示例网址可能不属于RESTful API,因为它包含方法get_title。在REST中,URL表示事物。该事情要做什么(如果它被修改,如果内容被检索,......)不是URL的一部分,因为该REST使用不同的HTTP方法。

答案 2 :(得分:5)

REST的一个关键方面是url是资源。像uri一样

http://example.com/script.php?etc-etc-etc

不会将资源标识符放在uri的资源部分中。这并不是说RESTful API不应该使用get参数;事实上,这很好:

http://example.com/posts?sort=date_asc&offset=20&limit=10

可能是获取最旧帖子第3页的URI的好方法。但是,以这种方式使用get参数只应在方法也为GET的请求中使用。 PUT,尤其是POST方法应该使用简单的uri,并且只在路径部分中受影响的资源。

答案 3 :(得分:3)

RESTful URI设计完全是关于资源访问的,它们应该以RESTful方式构建,因此您不应该有任何查询字符串。

e.g。 GET

作者/

作者/ 1

作者/ 1 /书籍

作者/ 1 /书籍/ 10

作者/ 1 /书籍/ 10 /总结

现在任何东西都被称为RESTfull,只要看看它的发明者Roy Fielding博士的一些反应,你就会得到一些想法。值得一些关于这个主题的阅读。

P.S你不需要在你的URI中发布,获取等等,目前HTTP协议主要用于使用REST API,你可以将动词作为调用的一部分传递。还有一个内容协商的概念,即你可以从REST API(json,xml atc)请求任何可用的格式。

答案 4 :(得分:1)

示例网址:

GET http://del.icio.us/api/
GET http://del.icio.us/api/peej/tags/
GET http://del.icio.us/api/peej/tags/test
DELETE http://del.icio.us/api/peej/bookmarks/[hash]

答案 5 :(得分:1)

REST概念实际上是基于它是URL驱动的事实,而不是由大数据blob驱动。使用REST,您不必传递巨大的soap请求来调用方法 - 您的方法调用/对象创建/您想要做的任何事情只需通过URL调用,以及您使用的动词与该URL调用。

答案 6 :(得分:0)

您的网址结构无关紧要。重要的是每个URL确切地标识1个资源。每个资源可以有多个指向它的URL,但每个URL应该只指向1个资源。

答案 7 :(得分:0)

这可能会有所帮助。参考: RESTful service URLs