我有一个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>
答案 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浏览器要求的限制。