今天有很多网站都有API,允许用户使用GET HTTP请求以XML或JSON的形式从网站获取数据。 Flickr和del.icio.us是包含API的网站示例。这些API要求服务器访问数据库,然后将结果输出为XML或JSON。
为什么我们需要这个翻译呢?为什么不在数据库上创建用户(例如MySQL)?将为用户提供对数据库的有限访问权限,仅允许SELECT,并且仅允许这些表中的某些表和某些列。这对于服务器来说不是更有效率(它不必处理HTTP请求),对于现在可以按照需要的方式准确访问所需数据的开发人员来说会更容易。
答案 0 :(得分:32)
除了安全注意事项,您可以在不影响客户端的情况下更改数据库结构。此外,格式不正确的查询会占用您的服务器,而不是客户端。
答案 1 :(得分:28)
您能否阻止恶意个人制作超级复杂的SQL查询,将数据库的CPU固定在100%?你能阻止很多无辜的程序员编写那些永远不会被优化的低效查询来做同样的事情吗?
答案 2 :(得分:11)
API:
答案 3 :(得分:10)
编码合同 - 使用API,您可以更改其背后的所有内容,而不会影响外人使用它们。在这里,您不仅要将它们与MySQL相关联,还要将它们与您的架构联系起来
缓存 - 允许任何查询几乎消除了通过http缓存可预测查询的任何机会。这可能是消除常常排名第一的瓶颈的第一种方法,即数据库。
安全性 - 使用这种方法,即使是偶然的事情,拒绝服务攻击也很容易。更不用说您必须提供对数据层的访问权限,这通常放在可以加强安全性的受限区域中
可用性 - 并非所有人都是开发人员或想了解您的内部域名。他们可能更喜欢预先烘烤的直接和自我解释的API。一个极端的例子是为管理者提供数据库权限而不是报告。
答案 4 :(得分:3)
便携性。让我们说出于许可的原因和扩展,你做出了从MSSQL到MySql的业务决策。语法不完全相同,您的客户都必须更改其代码。
更好的做法是将其全部缓冲掉,并将实现抽象化。谁能说你没有使用训练有素的猴子在瓶盖上刮痕,坚持申请状态?
答案 5 :(得分:3)
安全是第一个原因,但我希望这些原因是显而易见的。用户使用错误查询来占用宝贵资源是另一个很好的理由。
除此之外,为什么是抽象层?
为什么要使用API是一个为什么要使用抽象的问题,我的列表在这里几乎没有表面。
答案 6 :(得分:2)
Web服务器为您提供了一个可以控制的缓冲区。如果你的SQL服务器或其他什么错误,你不希望它直接暴露在互联网上。是的,如果Web服务器有bug,它可能同样糟糕......除了你在数据和世界之间有额外的层。
-don
答案 7 :(得分:1)
这不是'为什么不'而不是'为什么你应该'的问题。处理HTTP请求对于完全控制您允许或禁止用户访问的所有数据是一个小小的代价。此外,如果未来数据的性质/数量/安全级别发生变化,那么使用JSON / XML响应会比允许完全访问更好。
答案 8 :(得分:1)
当你在考虑安全问题时要记住的是,预测可能用来攻击你的所有可能的载体是非常困难的 。例如,你是否确定你已经设置了数据库权限,这样人们就不会搞砸了?
因此,您希望尝试将操作仅限于您认为合适的操作,而不仅仅是尝试限制您知道的错误。这可以通过您可以完全控制的Web服务来完成,但是很难让某人直接访问数据库并确保您是安全的。
答案 9 :(得分:0)
API是数据库周围的一种包装器。用户对数据库的内部表示没有任何了解,他只需要发送一些统一的请求并获得统一的响应。如何以及何时在服务器上处理数据 - 这不是他的头痛。