3

Couch 有一个 REST 接口。这意味着数据更新是 PUT 调用所独有的。

我正在研究实现一个不起眼的分析计数器的方法,并且遇到了 couchdb、sofa 和 couchapp 的特性——考虑到我对 JavaScript 的强烈定位,这些特性有点酷。

但是,大多数 Web 分析服务以使用请求某些资源(通常在 IMG 或 SCRIPT 标签中)进行计数更新调用结束。

  • 有没有办法可以使用 couchApp 使用 GET 请求来执行我的计数?
  • 那会是对架构的滥用吗?我的意思是,并非沙发上的所有东西都是 REST - i,g, - 管理部分不是。

我很高兴听到专家们怎么说:)

** 已编辑*

我刚刚注意到 CouchDB 和 Sofa 附带了 Mochiweb 网络服务器!也许有办法让我上钩?

4

1 回答 1

3

叉子或插件的想法

如果你是一名 Erlang 程序员(或者你正在寻找一个学习 Erlang 的新项目),那么你绝对可以编写任何你想要的东西作为 CouchDB 的插件/扩展。我所知道的最小的例子是 Die CouchDB,这是我的概念验证,它添加了一个简单地停止服务器的查询。

https://github.com/iriscouch/die_couchdb

原则上,您可以编写 CouchDB 的插件或分支来处理 GET 请求并对它们进行任何操作。

关于 REST 架构的注意事项

我对分析实现不是很熟悉,但是 REST 和 HTTP 的重点是GET查询没有副作用和/或是幂等的(运行 50 个查询与运行一个查询没有什么不同)。

结果是,代理可以并且将以标准和非标准方式缓存许多 GET 响应。这似乎与用户跟踪和数据收集技术不兼容;然而,也许分析工具仍然认为收益大于成本。

对于大多数人来说,使用外部工具可能更容易。

日志理念

一个技巧是从沙发上获取任何东西,然后从沙发上检查日志条目。/_log您可以通过以管理员身份查询来获取沙发日志。该日志将显示用户的 IP 地址、请求路径和任何查询参数。

例如

$ curl -X GET http://localhost:5984/?userid=abcde\&windowsize=1024x768\&color=blue
{"couchdb":"Welcome","version":"1.1.0"}

$ curl localhost:5984/_log | grep userid
[Mon, 23 May 2011 00:34:54 GMT] [info] [<0.1409.0>] 127.0.0.1 - - 'GET' /?userid=abcde&windowsize=1024x768&color=blue 200

接下来,您可以自己处理该日志条目并重新插入到您的实际分析数据库中。

包装理念

最终的解决方案是运行一个简单的反向代理,它将您的 GET 请求转换为您需要的任何内容。NodeJS 在此类任务中越来越受欢迎,但您可以使用任何您喜欢的 Web 平台:PHP、ASP、JSP,无论您已经知道什么。

您只需响应 GET 请求并在服务器端执行您需要的任何操作,例如将相关信息插入您的分析数据库。

祝你好运!

于 2011-05-23T00:38:13.903 回答