1

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

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

为了清楚起见,这些请求都是通过带有参数的 GET 来的,例如 ?request_method=POST

任何建议表示赞赏。

可能的解决方案:

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

  • if在所有请求处理程序中的所有方法中添加一个,get(self)并检查请求是否应由处理,get如果不是,则调用相关方法。

4

1 回答 1

2

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

在类似情况下为其他人编辑
: OP 说他正在使用 JSONP 并且控制 API 服务器和客户端 Web 应用程序。在这种情况下,理想的解决方案是跨域资源共享(CORS,规范),尽管该技术需要 IE8+、Firefox 3.5+、Safari 4+ 或 Chrome 3+。如果您需要针对较早的浏览器,并且您控制两个域,我建议至少为您自己的客户端 Web 应用程序合并两个域的内容。api 域可以保留给外部客户端,但它们会受到 CORS 浏览器要求的限制。

于 2013-01-30T10:02:56.520 回答