使用Tornado通过GET服务所有REST请求

时间:2013-01-29 18:42:11

标签: python rest get tornado url-pattern

我有一个REST(或几乎REST)web api,
我希望API用户能够使用所有api,即使由于某种原因它只能进行GET调用,所以计划是接受可以是GET的request_method的url参数(查询字符串)(默认)或POST,PUT,DELETE,我想要路由它们。

我的问题不是标准请求处理程序覆盖并检查get(self)方法中的每个httpRequestHandler,如果这是一个POST,PUT,DELETE并调用相应的函数,有没有办法以更一般的方式执行此“路由”,例如在应用程序定义中的URL模式或覆盖路由功能或其他什么?

要使其清除,这些请求都会通过参数获取,例如?request_method=POST

任何建议表示赞赏。

可能的解决方案:

  • 只有一个“。*”url模式,并处理单个RequestHandler中的所有路由。应该工作正常,除了我不会利用龙卷风的网址模式匹配功能。

  • 向所有请求处理程序中的所有if方法添加get(self),并检查请求是否应由get处理,否则请调用相关方法。< / p>

1 个答案:

答案 0 :(得分:2)

这将是一件非常愚蠢的事情。 Chrome和Firefox以及许多其他网络用户代理都会推测性地获取(GET)网页上的部分或全部链接,包括您的request_method=DELETE网址。您会发现您的数据库已被清空,因为有人在四处寻找。不要故意破坏HTTP。 GET 定义是一种“安全”方法,这意味着可以获取您喜欢的任何URL,并且不会发生任何不良事件。

对于处于类似情况的其他人,

编辑
OP表示他正在使用JSONP,并且可以控制API服务器和客户端Web应用程序。在这种情况下,理想的解决方案是Cross-Origin Resource Sharing(CORS,spec),尽管这项技术需要IE8 +,Firefox 3.5 +,Safari 4+或Chrome 3+。如果您需要定位早期的浏览器,并且您控制这两个域,我建议至少为您自己的客户端Web应用程序合并这两个域的内容。 api域可以保留给外部客户端,但它们将受到CORS浏览器要求的限制。