0

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

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

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

  1. http://mydomain.tld/profiles/
  2. http://mydomain.tld/elements/

问题 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:true”

4

2 回答 2

0

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

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

(抱歉没有详细了解您的模型,很难非常精确)。

至于问题 #2 - 使用配置文件具有 0 个或更多元素的数据模型,您可以更新配置文件(添加必要的元素),然后返回更新的配置文件(及其完整的元素图),为您节省任何额外的得到。

更笼统地说,关于问题 #2,作为 API 的开发人员,您在 REST 世界中拥有相当多的自由——如果您专注于让 API 的消费者变得简单明了,那么您可能没问题。

底线:查看 www.apigee.com - 他们知道的比我多得多。

于 2012-07-13T05:44:06.027 回答
0

@Richard - 非常感谢您的链接和反馈。我得出的解决方案是按照您在评论中的建议使 API 简单干净,对每个资源进行单独调用。

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

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

于 2012-07-14T19:02:44.083 回答