什么是API?
API是一个软件解决方案,作为中介,使两个应用程序能够相互交互。以下一些特征让API变得更加有用和有价值:
- 遵守REST和HTTP等易于访问、广泛理解和开发人员友好的标准。
- API不仅仅是几行代码;这些是为移动开发人员等特定受众创建的。
- 这些有清晰的文档和版本,以满足用户的期望。
- 更好的治理和安全性,以及监控以管理性能和可扩展性。
如今,基本每家企业都会使用许多API类型,人脸实名认证API、活体检验API、企业四要素认证API、银行卡三要素API、银行卡二要素API等,以丰富企业的服务能力。
也出现了很多以销售API产品为主的企业,如百度智能云、易宝支付、翔云识别、Authing.cn….等,帮助客户解决某一方面的问题。
在 Python 中构建 API
本文将列出 8 种跨编程语言的流行 REST 框架。这些框架可以帮助您加快应用程序的开发速度,因为大多数框架都带有所需的开箱即用的组件,如基于 HTTP URL 的路由、数据库集成库等,从而减少了模板代码。
Python 是一种功能强大的语言,完全能够胜任 API 开发的各种挑战。被大型企业和小型开发团队广泛应用,Python 以其用户友好性备受赞誉。然而,Python 的易用性很大程度上得益于各类开发平台的支持。
我们始终赞赏开发者社区合作构建更智能工具的精神,幸运的是,一大批开源框架已崭露头角并日趋成熟。这些 Web 框架针对不同项目需求进行了优化,能够显著加快 API 开发进程。以下是八款强大的 Python Web 框架的概览,它们将助你在编码之旅中披荆斩棘。
1. Flask
可定制的框架,让开发人员从第一天起就可以完全控制。
Flask是一个基于Werkzeug的WSGI工具包和Jinja2的模板引擎的Python微框架。Flask由Armin Ronacher于2010年创建,自首次亮相以来已更新了27次。它仍然是迄今为止增长最快的Python框架之一。用户可以加入社区邮件列表,收听Flask的IRC频道,或者在GitHub上捐款。Pinterest、Netflix和LinkedIn等公司已将Flask纳入其开发堆栈。Flask 1.0.2目前可用,是2018年5月发布的最新稳定版本。
优点
- Flask是轻量级和非侵入性的,减少了其他框架中的严格要求。开发人员将享受它与外部工具和ORM的兼容性。
- 它的依赖关系是在考虑安全性的情况下构建的。在客户端享受免受注入攻击、数据完整性检查和安全cookie生成的默认保护。
- 内置的开发服务器不需要配置外部资源,从而减少了交付周期和成本。
- Flask支持Python 3.4及更新版本,同时也支持Python 2.7和PyPy。开发人员可以自由使用他们的首选版本,使API构建更加简单。
- 文档中有丰富的示例和广泛的应用程序,其中概述了大量的用例和示例代码。
缺点
- 对于较大的MVC应用程序,由于Flask并未附带全面的引导工具和模块,公司可能更倾向于选择其他框架。
- 尽管 Flask 极具灵活性,但初始的自定义配置可能会延迟开发和上线进程。
2. Django
一个衡量其他强大框架的全面基准。
Django是Python开发中家喻户晓的名字,自2005年首次亮相以来,它的人气飙升。它由Django软件基金会维护,这要归功于个人和公司的贡献,其中许多公司都依赖Django进行开发。Django有一个熙熙攘攘的社区,在全球拥有11600多名成员。Django在Stack Overflow上有超过191000个带标签的问题。开发人员可以参与邮件列表、RSS提要、IRC频道等等。Spotify、YouTube和Instagram依靠Django进行应用程序和数据管理。这个小组与Django一起不断发展,Django自创建以来已经发布了214多个更新。
优点
- Django社区的规模是惊人的——新手和老手都可以期待即使是最细粒度的用例也能得到大量的指导。
- 默认情况下,包括模板、路由、表单、身份验证和管理工具。开发人员将不必寻找外部工具,尤其是当第三方组件可能面临兼容性问题时。
- 针对用户、循环和条件的简单构造允许开发人员快速编写大量新代码。
- Django与MongoDB、DynamoDB、SQLite等的集成使其成为管理巨大数据集的强大工具。对于拥有大量用户的应用程序来说,这是非常宝贵的。
- Django是一个成熟且优化的框架,开箱即用,速度极快,可靠性极高。
缺点
- Django使用空模板文件将新项目分离为单独的组件。因为Django为新用户提供的示例代码较少,所以学习起来更为棘手。
- 由于没有明确提供指导,新程序员可能会面临将组件打包在一起的问题。
- 大量的默认工具使新手很难跟上进度。
3. Pyramid
这是一个混合框架,无论大小,都能带来最好的结果。
Pyramid 是一个 web 开发框架,旨在在大型框架(如 Django)和微型框架(如 Flask)之间找到平衡点,既不过于庞大也不过于简单。它是作为Pylons项目的一部分开发的,于2008年发布。Pyramid的灵感来源于Django和其他较小的框架。开发者可以通过Twitter和谷歌小组在社交媒体上关注Pyramid的进展。金字塔的开发者经常参加公共活动。最后,热衷于了解更多关于该框架的开发人员可以加入官方IRC频道。Mozilla和Yelp是依赖金字塔进行开发的著名公司。Pyramid的当前版本是1.10,这是它首次亮相以来的第十次更新。
好处
- 与Django相比,Pyramid为文件绑定提供了充足的指导,从而以更简单的方式打包您的项目。这提供了一个安全网,尤其是对新来者来说。
- Pyramid创建了一个相当大的项目模板,但提供了充足的启动代码和框架来简化开发。
- Pyramid的引导工具
pcreate
与许多基于SQLAlchemy和ZODB的模板兼容。PyPi支持Google App Engine、Jinja 2和jQuery Mobile,增强了这种灵活性。 - Pyramid允许开发人员快速扩展应用程序,并通过插件提供强大的API支持、URL映射和强大的可扩展性。
- 上下文管理器将请求分组并写入逻辑组,这对于高流量时段非常有用。
- Pyramid 框架支持所有当前受支持的 Python 版本。
缺点
- Pyramid 使用的 Chameleon 模板引擎在语法上相对复杂,尤其对于不熟悉其特性的开发者来说可能会感觉如此。
- XHTML结构虽然可以由编辑器解析,但对于那些从Django迁移过来的人来说,它可能显得陌生而复杂。
4. Falcon
专注于质量控制的高性能微服务框架。
Falcon 是一款专为微服务优化设计的裸金属框架,其遵循WSGI规范,确保与多种服务器和平台的兼容性。Falcon 由 Kurt Griffiths 于2013年创立,并且他是该框架的主要贡献者。然而,一个专注的社区也为Falcon提供了大量的意见和贡献。对于Falcon框架的新手,可以通过参加讲座、播客节目和阅读博客文章来跟进学习。同时,Gitter上有专门为开发者和用户提供交流的聊天室。LinkedIn和Rackspace等公司在多个项目中都采用了Falcon框架。该框架在GitHub上拥有详尽的文档记录,自发布以来已经发布了43次更新,目前版本为1.4.1。
优点
- Falcon与操作系统无关,专注于在任何给定的硬件上高效运行,并具有框架灵活性。
- 该框架与Python 2.6、2.7和3.4+协同工作。
- REST HTTP处理程序提供请求解析和简单的状态转换。
- 对源代码开发进行了广泛的错误测试。Falcon只使用两个第三方依赖项。
- 使用默认配置,Falcon在相同条件下每秒可以比Django多发出19倍的请求。
缺点
- Falcon不适合提供HTML页面。
- 缺少内置的web服务器。
- 尽管文档和教程很多,但通常不如Flask等框架的文档和教程全面。
5. Eve
一个中等大小的框架,用来处理除厨房水槽以外的所有东西。
Eve是一个专注于web服务的REST API框架,它建立在Flask和Cerberus之上。Eve从根本上是通过CRUD实现构建的,并变得更加人性化。该框架由Nicola Iarocci编写和维护,同时提供社区贡献。它于2013年初发布。该项目在GitHub上保持活跃,有138名贡献者。开发者也可以加入邮件列表,与Eve的IRC、谷歌群组和Stack Overflow一起保持信息畅通。自推出以来,Eve已经更新了33次,目前的版本是0.8.2。
优点
- Eve强调REST和全面的CRUD合规性,同时默认情况下提供必要的回退。
- 已知的数据库集合自动作为资源端点。这些端点可针对每个用例进行自定义,并且可以在没有客户端输入的情况下包括其他字段。
- Eve支持子资源端点和多项目端点,以增强URI的灵活性。
- MongoDB是本机支持的,社区扩展提供了与SQL、Elasticsearch和Neo4js的兼容性。
- 默认情况下支持筛选、排序、资源分页和HATEOAS。
缺点
- Eve通常更适合中小型项目,因为大型项目可能难以大规模管理。
- 由于该框架相对来说是最低限度的,因此可能需要一些时间来寻找合适的扩展和最佳配置。
6.CherryPy
一种具有细粒度配置潜力的面向对象方法。
CherryPy是另一个极简主义的web框架,它是面向对象的,符合HTTP/1.1,旨在促进快速开发,同时缩小整体源代码库。它由雷米·德隆建造,于2002年发行。它现在由CherryPy团队和开发社区维护。CherryPy有一个邮件列表。开发人员也可以加入该框架的谷歌小组、Gitter门户或IRC频道。CherryPy团队正在接受GitHub上的提交和进一步贡献。Netflix和Hulu使用CherryPy作为选定项目的构建块。当前版本是18.1.0,这是开发生命周期中的第120个版本。
优点
- 面向对象编程可以在减少代码库大小的同时缩短开发时间。
- CherryPy具有用于缓存、会话、身份验证和静态内容的内置工具。
- 每个组件和资源都是可互换的,让开发人员可以根据自己的需要进行自定义。
- 对于使用多个应用程序的开发人员来说,每个应用程序都可以独立配置。
- 单线更新方法允许通过简单的合并进行全局服务器配置。
- CherryPy既可以提供动态的、依赖于用户的内容,也可以提供静态资源。
- 内置对JSON编码和解码的支持,用于请求和响应。
缺点
- 尽管包含了会话等某些功能,但默认情况下可能不会启用这些功能。开发人员必须记住手动启用这些配置。
- 如果页面处理程序编写不正确,则具有权限的用户可能会访问存储在服务器上的任何文件。
7. Bottle
一个微观的、独立的框架,具有充分的多功能性。
与Flask类似,Bottle是用于API开发的WSGI微框架。Bottle的独特之处在于它的单个文件模块,除了Python的标准库之外,它没有任何依赖项。它由Marcel Hellkamp编写和维护,最初于2009年发布。社区贡献通过GitHub进行审查和接受。Bottle有一个博客和邮件列表,感兴趣的开发人员也可以在Twitter上关注。免费节点聊天提供了一个额外的讨论论坛。瓶子已经被Netflix用来处理一些核心功能。Bottle的当前版本是0.12.16,自发布以来已经更新了73次。
优点
- Bottle非常轻量级,可配置,支持mako、Jinja2和cheetah 模板。
- 内置的HTTP开发服务器支持paste、fapws3、bjoern、gae、cherrypy和其他WSGI服务器。
- 智能路由为请求和函数调用提供更清晰、可自定义和逻辑的URL。
- 外部库的使用并非必需,这简化了开发并减少了跨平台问题。
缺点
- 除了模板搜索路径之外,可能还需要绝对路径。在某些情况下,Bottle可能无法找到您的模板。
- 开发人员必须在占位符中添加模式,以说明语法中的斜杠。
- 当在反向代理或负载均衡器后面进行本地操作时,Bottle可能会在传输过程中丢失一些数据。可能需要一种变通方法来确保客户端的标头完整性。
8. Tornado
一个健壮的框架,用于以最小的开销处理高流量。
Tornado既是一个web框架,也是一个异步网络库,其构建目的是支持大量同时连接。它最初是在FriendFeed开发的,并于2010年首次亮相。Tornado主要由Ben Darnell与GitHub社区共同维护。开发人员可以通过邮件列表和两个独立的谷歌小组来跟踪新闻和更新。Tornado还声称有一个Stack Overflow,并在GitHub上维护了一个wiki。Tornado目前已更新到6.0版本,自发布以来已发布56个更新。
好处
- 通过无阻塞的网络I/O,Tornado可以支持数万个同时连接,适用于长轮询、WebSockets等。
- 支持与OpenID、OAuth和Graph API(Google、Facebook、Twitter)结合使用的第三方登录。
- Tornado可以自动重新加载服务器连接,以检测和应用源文件更改。
- 与WSGI web框架和服务器一起运行。
缺点
- 由于Tornado是异步的,因此使用
WSGIContainer
运行WSGI应用程序的可扩展性不如使用WSGI服务器(例如gunicorn和uwsgi)运行该应用程序。 - 由于其相对新颖的联网方法,可能存在与龙卷风相关的学习曲线。
- 没有ORM支持。
参考说明
原文链接: https://nordicapis.com/8-open-source-frameworks-for-building-apis-in-python/