服务与龙卷风在得到所有REST请求(Serving all REST requests over G

2019-10-17 15:32发布

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

我的问题是不是标准的请求处理程序忽略其他,并在每个httpRequestHandler在检查get(self)如果这意味着是一个POST,PUT,DELETE方法并调用相应的功能,是有办法做到这一点“路由”在一个更一般的方式,比如在应用程序定义或覆盖路由功能什么的URL模式?

清楚 ,这些请求都过来与例如像参数GET ?request_method=POST

任何建议表示赞赏。

可能的解决方案:

  • 只是有一个“*” URL模式和处理在单RequestHandler所有的路由。 应该工作正常,但我不会考虑匹配龙卷风的特征URL模式的优势。

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

Answer 1:

这将是一件非常愚蠢的事情。 无论Chrome和Firefox,与许多其他网络用户代理一起,将推测取(GET)的部分或全部的链接页面上,包括你的request_method=DELETE的网址。 你会发现你的数据库已经被掏空了,只是因为有人在看着四周。 不要刻意打破HTTP。 GET被定义为“安全”的方法,这意味着它的好让你喜欢,没有什么大不了的事情的任何URL。

编辑其他人在类似的情况:
该OP说,他是用JSONP,并在这两个API服务器和客户端的Web应用程序的控制。 在这种情况下,理想的解决方案是跨来源资源共享 (CORS, 规格 ),虽然这技术需要IE8 +,火狐3.5+的Safari 4+或铬3+。 如果您需要针对早期的浏览器,并且您可以控制域,我会建议合并这两个域的至少为自己的客户端Web应用程序的内容。 该API域可以保持对外部客户,但他们会通过CORS浏览器要求的限制。



文章来源: Serving all REST requests over GET with Tornado