我正在构建一个API,并希望Ajax能够与它进行交互。 API需要允许插入,更新和删除数据。通过GET允许任何这些操作是一个好主意吗?
例如:http://api.domain.com/insert_person/?name=joe
我最初的计划方法是将GET用于我的“获取”方法(基本上只是一个简单的数据库查询)和POST用于添加,编辑和删除。问题是JS同源策略,这会使Ajax难以与我的API交互。 GET有一个jQuery解决方法(通过JSONP)。
建议?
答案 0 :(得分:5)
总之:没有
GET应始终仅用于检索信息,并且永远不应有副作用。
这是几乎所有web api的最佳实践,它与动词的意图以及现有软件的预期行为有关。
答案 1 :(得分:1)
如果您尝试绕过相同的原始策略,通过JSONP GET是唯一可能的前端解决方案。如果您已控制后端,则可以设置与该页面位于同一域的代理服务,但可以在API服务之间进行中继。
如果您打算沿着JSONP GET路径前进,请务必阅读XSS和CSRF。
答案 2 :(得分:1)
添加另一层来处理您的代码并与您的数据库(不同的域)进行交互。
你仍然会使用POST,你可以使用你正在使用的语言向服务器端的数据库发出请求,例如php将使用curl。(向不同的域发出请求)
如果您允许使用get与您的数据库进行交互,那么任何人都可以使用他们想要的命令直接输入网址,所以是的,请避免使用。
答案 3 :(得分:0)
正如其他人所指出的,GET不应该用于带有插入,更新和删除等副作用的动作。
要允许跨域使用您的API,请查看Cross-Origin Resource Sharing,尽管它目前是only partially supported by browsers。