RESTful - GET或POST - 怎么做?

时间:2012-07-12 14:22:55

标签: rest xmlhttprequest restful-architecture

我正在开发一个我想要RESTful的Web服务。我知道CRUD的做事方式,但我有一些我不能完全清楚的事情。所以情况就是这样:

我有一个跟踪服务,可以在浏览器(客户端)中收集一些数据,然后将其发送到跟踪服务器。有两种情况,一种是配置文件存在,另一种不存在。最后,服务返回一些必须注入DOM的元素。

所以基本上我需要2个网络服务:

  1. http://mydomain.tld/profiles/
  2. http://mydomain.tld/elements/
  3. 问题1: 现在我只使用GET,但我重写服务器以支持CRUD。所以在这种情况下,如果配置文件不存在,我必须使用POST。类似于http://mydomain.tld/profiles/然后POST有效负载的东西都有要保存的信息。如果配置文件存在,我使用PUT和http://mydomain.tld/profiles/ /并且PUT的有效负载具有要保存的数据。一切都很好,但问题是据我所知,xmlhttp不支持PUT。现在可以使用POST,即使它是更新吗?

    问题2: 如上所述,当制作曲目时,我的服务会返回一些要注入DOM的元素。从逻辑上讲,为了保持RESTful,我想我必须使用POST / PUT更新配置文件,然后GET才能获取要注入的元素。但是为了节省服务器端的带宽和资源,使用POST / PUT将元素返回到配置文件更有意义,即使它是不同的资源。你对此有何看法?

    BR /淑娜

    编辑:

    问题3: 在某些情况下,我只想更新配置文件而不是接收返回元素。我是否仍然可以使用相同的资源,然后使用有效载荷参数来指定我是否需要元素,例如“dont_receive_elements:真”

2 个答案:

答案 0 :(得分:0)

问题#1,你确定xmlhttp不支持“put”吗?我刚刚在三个浏览器(Chrome,Firefox,IE)上运行http://www.mnot.net/javascript/xmlhttprequest/,根据输出,“put”在所有浏览器上都成功了。关于http://www.slideshare.net/apigee/rest-design-webinar的信息(我强烈建议您查看许多Apigee视频和关于restful API的幻灯片),对于您提到的用例,建议使用“put”。

但是,您可以完全通过对数据进行一些不同的思考来避免这个问题。是否可以考虑您有一个配置文件,并且对于每个配置文件,您有0或更多组有效负载信息?在这个模型中,两个案例是: 1.没有配置文件,使用POST创建配置文件... / profiles /然后添加元素/跟踪数据和帖子到... / profile / 123 / tracks /(或... / profile / 123 / elements /) 2.配置文件存在,只需添加元素/跟踪数据

(对不详细了解你的模型,很难很精确)。

对于问题#2 - 使用配置文件包含0个或更多元素的数据模型,您可以更新配置文件(添加必要的元素),然后返回更新的配置文件(及其完整的元素图),保存你有什么额外的。

更常见的问题是#2,作为API的开发者,您在REST世界中拥有相当大的自由度 - 如果您专注于为API的消费者提供简单明了,那么您可能会很好。

结论:访问www.apigee.com - 他们比我更了解。

答案 1 :(得分:0)

@Richard - 非常感谢您的链接和反馈。我所提出的解决方案是让您的API简单明了,就像您在评论中建议的那样,单独调用每个资源。

然后为了能够节省带宽并保持性能提升,我在API中创建了一个“非官方”功能,它在内部像代理一样工作,并通过单个GET调用,更新配置文件并返回一个元素。我知道,这不是很安静,但它处理我的情况,不是官方API的一部分。我需要它支持GET的原因我需要从javascript和跨域调用它。

我想我可以通过使用JSONP解决跨域问题,但我仍然需要使API“不干净”:)

相关问题