问题描述
|
我正在构建一个API,并希望Ajax能够与之交互。 API需要允许插入,更新和删除数据。允许通过GET执行任何这些操作是一个好主意吗?
例如:http://api.domain.com/insert_person/?name=joe
我最初的计划方式是将GET用于我的\“ getting \”方法(基本上只是一个简单的数据库查询),而POST用于添加,编辑和删除。问题是JS同源策略,这会使Ajax很难与我的API交互。 GET(通过JSONP)有一个jQuery解决方法。
有什么建议吗?
解决方法
一言以蔽之:否
GET应该始终仅用于检索信息,并且永远不应该有副作用。
这是几乎所有Web api的最佳做法,并且与动词的意图以及现有软件对事物的期望方式有关。
,如果您试图绕过相同的原始策略,则通过JSONP进行GET是唯一可能的前端解决方案。如果您可以控制后端,则可以设置与页面位于同一域的代理服务,但可以往返于API服务。
如果您要沿着JSONP GET路径前进,请确保您已阅读XSS和CSRF。
,添加另一层来处理您的代码并与您的数据库进行交互(不同的域)。
您仍将使用POST,并且可以使用所使用的语言向服务器端的db发出请求,例如php将使用curl。(向其他域发出请求)
如果您允许使用get与您的数据库进行交互,那么任何人都可以使用所需的命令轻松键入url,因此可以避免使用。
,正如其他人指出的那样,不应将GET用于具有诸如插入,更新和删除之类的副作用的操作。
要允许跨域使用您的API,请查看跨域资源共享,尽管目前浏览器仅部分支持跨域资源共享。