【问题标题】:API - use GET to add, edit, and delete?API - 使用 GET 来添加、编辑和删除?
【发布时间】:2011-05-26 04:18:09
【问题描述】:

我正在构建一个 API,并希望 Ajax 能够与之交互。 API 需要允许插入、更新和删除数据。通过 GET 允许任何这些操作是个好主意吗?

例如:http://api.domain.com/insert_person/?name=joe

我最初的计划是使用 GET 作为我的“获取”方法(基本上,只是一个简单的数据库查询),使用 POST 进行添加、编辑和删除。问题是 JS 同源策略,这将使 Ajax 难以与我的 API 交互。 GET 有一个 jQuery 解决方法(通过 JSONP)。

建议?

【问题讨论】:

    标签: javascript jquery api rest


    【解决方案1】:

    一句话:没有

    GET 应始终仅用于检索信息,并且永远不应有副作用。

    这是几乎所有 Web api 的最佳实践,并且与动词的意图以及现有软件期望事物的行为方式有关。

    【讨论】:

    • 你对使用 POST 进行插入、更新和删除有何看法?
    • 这几乎是大多数浏览器中唯一的选择,尽管现代浏览器开始支持 PUT 和 DELETE 动词。一般来说,跟随动词是一个好主意,除非你有限制阻止它,例如。 en.wikipedia.org/wiki/Representational_State_Transfer
    【解决方案2】:

    如果您试图绕过同源策略,则通过 JSONP 获取是唯一可能的前端解决方案。如果您控制了后端,则可以设置与页面位于同一域中的代理服务,但与 API 服务之间进行中继。

    如果您打算使用 JSONP GET 路径,请务必阅读 XSS 和 CSRF。

    【讨论】:

    • 您能详细说明一下代理服务吗?我不确定该怎么做。谢谢。
    【解决方案3】:

    添加另一层来处理您的代码并与您的数据库(不同域)交互。

    你仍然会使用 POST,你可以在服务器端向你的数据库发出请求,使用你正在使用的任何语言,例如 php 将使用 curl。(向不同的域发出请求)

    如果您允许使用 get 与您的数据库进行交互,那么任何人都可以简单地使用他们想要的命令键入 url,所以可以避免它。

    【讨论】:

      【解决方案4】:

      正如其他人所指出的,GET 不应该用于具有副作用的操作,例如插入、更新和删除。

      要允许跨域使用您的 API,请查看 Cross-Origin Resource Sharing,尽管它目前是 only partially supported by browsers。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 2019-08-03
        • 1970-01-01
        • 2019-08-21
        相关资源
        最近更新 更多