2024年用于在 Python 中构建 API 的 8 个开源框架

什么是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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/870928.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装WindowsTerminal并设置默认以管理员身份运行启动终端

安装WindowsTerminal并设置默认以管理员身份运行启动终端 背景:Microsoft Store打不开,且WindowsTerminal没有默认以管理员身份运行。 下载msixbundle类型的安装包:https://github.com/microsoft/terminal/releases 使用管理员运行Windows …

[RK3308H_Linux] 关于8+2(8路模拟麦克风 + 2路es7243e回采)的调试心得

问题描述 RK3308H 使用8路个模拟麦克风录音,2路用es7243e做回采 解决方案: 首先先调8路模拟麦克风,根据原理图确定使用的是哪路I2S。 以下为dts配置,acodec的属性注释附上。 &acodec {status "okay";rockchip,m…

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …

Python 开发植物大战僵尸杂交版辅助【全网最详细_查找 + 代码编写一体化零基础也能学会】

目录 辅助最终展示效果 一、文章介绍 二、工具介绍 三、基址搜索 3.1、寻找阳光基址 3.2、寻找卡槽冷却基址 3.3、寻找僵尸刷新时间基址 3.4、寻找大阳光刷新时间基址 3.5、寻找植物编号基址 3.6、寻找场上僵尸数量基址 3.7、寻找僵尸 X 坐标基址 3.8、通过找到的僵…

《昇思25天学习打卡营第1天|QuickStart》

说在前面 曾经接触过华为的910B服务级显卡&#xff0c;当时基于910B做了一些开发的工作&#xff0c;但是总感觉做的事情太低层&#xff0c;想要能自顶向下的了解下&#xff0c;因此开始了MindSpore的学习。另外也想给予提供的显卡&#xff0c;简单尝试下llm模型的训练&#xf…

数据库mysql-对数据库和表的DDL命令

文章目录 一、什么是DDL操作二、数据库编码集和数据库校验集三、使用步骤对数据库的增删查改1.创建数据库2.进入数据库3.显示数据库4.修改数据库mysqldump 5.删除数据库 对表的增删查改1.添加/创建表2.插入表内容3.查看表查看所有表查看表结构查看表内容 4.修改表修改表的名字修…

SpringBootWeb 篇-入门了解 Swagger 的具体使用

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Swagger 介绍 1.1 Swagger 和 Yapi 的使用场景 2.0 Swagger 的使用方式 2.1 导入 knife4j 的 maven 坐标 2.2 在配置类中加入 knife4j 相关配置 2.3 设置静态资源…

oracle控制文件详解以及新增控制文件

文章目录 oracle控制文件1、 控制文件包含的主要信息如下&#xff1a;2、查看目前系统的控制文件信息&#xff0c;主要是查看相关的字典视图 oracle新增控制文件 oracle控制文件 控制文件是一个很小的二进制文件(10MB左右)&#xff0c;含有数据库结构信息&#xff0c;包括数据…

Open3D 点云Kmeans聚类算法

目录 一、概述 1.1算法介绍 1.2实现步骤 二、代码实现 三、实现效果 3.1原始点云 3.2聚类后点云 前期试读&#xff0c;后续会将博客加入该专栏&#xff0c;欢迎订阅Open3D与点云深度学习的应用_白葵新的博客-CSDN博客 一、概述 1.1算法介绍 聚类是一种将数据集分组的方…

Next.js的静态生成和服务端渲染,你搞懂了吗?

Next.js的静态生成和服务端渲染&#xff0c;你搞懂了吗&#xff1f; 嘿&#xff0c;各位前端小伙伴们&#xff01;今天咱们来聊聊Next.js中那令人又爱又恨的静态生成&#xff08;Static Generation&#xff09;和服务端渲染&#xff08;Server-side Rendering&#xff09;。这…

双语|如何给教授/教职员发送电子邮件

斯坦福大学提出建议&#xff0c;指导学生如何给教授或者教职员发送电子邮件&#xff0c;这些建议对于访问学者、博士后及联合培养博士也很适用&#xff0c;故知识人网小编用双语对照的形式进行节选转发。 Whether youre writing a professor to ask for an extension or to loo…

多平台支持,制作的电子画册随时随地都可以查看

​在数字化的时代背景下&#xff0c;电子画册以其便捷的传播方式、丰富的视觉表现形式&#xff0c;赢得了大众的喜爱。它不仅能够在个人电脑上展现&#xff0c;还能通过智能手机、平板电脑等多种移动设备随时随地被访问和浏览。这种跨平台的支持&#xff0c;使得无论你身处何地…

高精度定位与AI技术的深度融合——未来智慧世界的钥匙

引言在当今迅速发展的科技时代&#xff0c;精确定位和人工智能&#xff08;AI&#xff09;技术正在快速推动各领域的创新与变革。高精度定位结合AI技术所产生的融合效应&#xff0c;正在加速智慧城市、智能驾驶、智能物流以及许多其他领域的实现。这篇文章将详细探讨高精度定位…

基于Java技术的校园台球厅人员与设备管理系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;Eclipse、Navicat、Maven 系统展示 首页 用户注册界面 球桌信息…

C++基础编程100题-023 OpenJudge-1.4-03 奇偶数判断

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/03/ 描述 给定一个整数&#xff0c;判断该数是奇数还是偶数。 输入 输入仅一行&#xff0c;一个大于零的正整数n。 输出 输出仅一行&#xff0c;如果n是奇数&#xff0c;输出odd&#xff1b;如果n是偶…

Twelve Labs:专注视频理解,像人类一样理解视频内容

在当今数字化世界中&#xff0c;视频已成为人们获取信息和娱乐的主要方式之一。 AI视频生成领域的竞争也很激烈&#xff0c;Pika、Sora、Luma AI以及国内的可灵等&#xff0c;多模态、视频生成甚至也被视为大模型发展的某种必经之路。然而&#xff0c;与文本生成相比&#xff…

深入解析发生 OOM 的三大场景

深入解析 OOM 的三大场景 什么是 OOM&#xff1f;一、堆内存溢出 ( Heap OOM )原因分析解决方案 二、栈内存溢出&#xff08;Stack OOM&#xff09;原因分析解决方案 三、方法区内存溢出&#xff08;Metaspace OOM&#xff09;原因分析解决方案 在Java应用程序开发中&#xff0…

记录一次Nginx的使用过程

一、Docker安装配置nginx 1.拉取镜像 docker pull nginx2.创建挂载目录 启动前需要先创建Nginx外部挂载目录文件夹 主要有三个目录 conf&#xff1a;配置文件目录log&#xff1a;日志文件目录html&#xff1a;项目文件目录&#xff08;这里可以存放web文件&#xff09; 创建挂…

oslo_i18n学习小结

背景 代码均为开源代码 基于yoga版本&#xff0c;需要对openstack某服务做翻译&#xff0c;了解到oslo_i18n有翻译功能&#xff0c;配置oslo_i18n来给组件进行翻译 用法 用法 每个服务自己会带一个i18n.py的文件&#xff0c;如果要对日志进行翻译&#xff0c;从i18n导入_&…

逆变-TI视频课笔记

目录 1、全桥逆变 1.1、全桥逆变SPWM仿真 2、半桥逆变 2.1、本课小结 3、多重逆变&#xff08;间接的“交-直-交-直”变流&#xff09; 3.1、多电平逆变的目的 3.2、单逆变桥 3 电平控制时序 3.3、大功率设备的功率因数 3.4、本课小结 视频链接&#xff1a;文字…