python 开发api_使用FastAPI和Python快速开发高性能API

python 开发api

If you have read some of my previous Python articles, you know I’m a Flask fan. It is my go-to for building APIs in Python. However, recently I started to hear a lot about a new API framework for Python called FastAPI. After building some APIs with it, I can say it is amazing!

如果您阅读过我以前的一些Python文章,您就会知道我是Flask的粉丝。 这是我用Python构建API的必修课。 但是,最近我开始听到很多关于Python的新API框架FastAPI的信息 。 用它构建了一些API之后,我可以说它很棒!

This project was created by Sebastian Ramírez, and at the time of writing, it has accumulated almost 20K stars. Big names like Microsoft, Uber, Netflix, and others have been building APIs with it.

这个项目是由塞巴斯蒂安·拉米雷斯 ( SebastianRamírez)创建的,在撰写本文时,它已经积累了近2万颗星。 像Microsoft,Uber,Netflix等大公司都在使用它来构建API。

But why is this new library so popular and how does it compare to Flask or Django?

但是,为什么这个新库如此受欢迎?与Flask或Django相比,它又如何呢?

特征 (Features)

FastAPI is a rather minimalistic framework. However, that doesn’t make it less powerful. FastAPI is built using modern Python concepts and is based on Python 3.6 type declarations. Let’s see some of the features this library is packed with.

FastAPI是一个相当简单的框架。 但是,这并不会使它的功能降低。 FastAPI是使用现代Python概念构建的,并且基于Python 3.6类型声明。 让我们看一下该库附带的一些功能。

自动文档 (Automatic docs)

A must-have for any API is documentation about the endpoints and types. A common approach to solve this problem is the use of OpenAPI and tools like Swagger UI or ReDoc to present the information. These come packed automatically with FastAPI, allowing you to focus more on your code than setting up tools.

任何API的必备组件都是有关端点和类型的文档。 解决此问题的常用方法是使用OpenAPI和诸如Swagger UI或ReDoc之类的工具来显示信息。 这些都与FastAPI自动打包在一起,使您可以比设置工具更专注于代码。

键入Python (Typed Python)

This is a big one: FastAPI makes use of Python 3.6 type declarations (thanks to Pydantic). This means that it uses a Python feature that allows you to specify the type of a variable. And this framework makes extensive use out of it, providing you with great editor support. Autocompletion works amazingly well.

这是一个很大的问题:FastAPI使用Python 3.6类型声明(感谢Pydantic)。 这意味着它使用Python功能,可让您指定变量的类型。 并且该框架对其进行了广泛使用,为您提供了强大的编辑器支持。 自动补全效果非常好。

Here is some sample code using typed declarations:

这是一些使用类型声明的示例代码:

We just went from:

我们刚从:

name

to:

至:

name: str

That’s it! And as a result:

而已! 结果是:

Image for post
Autocompletion in FastAPI using PyCharm
使用PyCharm在FastAPI中自动完成

Beautiful!

美丽!

验证方式 (Validation)

Validation is already integrated into this framework thanks to Pydantic. You can validate standard Python types as well as some custom field validations. Here are a few examples:

由于Pydantic,验证已集成到此框架中。 您可以验证标准Python类型以及一些自定义字段验证。 这里有一些例子:

  • JSON objects (dict)

    JSON对象( dict )

  • JSON array (list)

    JSON数组( list )

  • String (str) with min and max lengths

    最小长度和最大长度的字符串( str )

  • Numbers (int, float) with min and max values

    带有最小值和最大值的数字( intfloat )

  • URL

    网址
  • Email

    电子邮件
  • UUID

    UUID
  • And many more…

    还有很多…

安全与认证 (Security and authentication)

This is a crucial part of any API and it’s code that we usually just repeat, so why not integrate much of it into the framework? FastAPI does exactly that.

这是任何API的关键部分,我们通常只重复其中的代码,那么为什么不将其大量集成到框架中呢? FastAPI正是这样做的。

The library provides support for the following:

该库提供以下支持:

  • HTTP Basic

    HTTP基本
  • OAuth2 (JWT tokens)

    OAuth2(JWT令牌)
  • API keys in headers, query params, or cookies.

    标头,查询参数或cookie中的API密钥。

文献资料 (Documentation)

This is perhaps not exactly a feature of the framework, but it is worth mentioning. The documentation of the project is simply amazing. It’s very clear and covers topics with examples and explanations.

这也许不是框架的确切功能,但是值得一提。 该项目的文档简直太神奇了。 这非常清楚,并通过示例和解释涵盖了主题。

性能 (Performance)

FastAPI is fast! It is not only fast to code, but it also processes requests super fast! You can check the benchmarks across multiple frameworks using the TechEmpower benchmark tool. Here are the results I got for Python frameworks. Flask and Django are way behind on the list, with FastAPI being first and thus the most performant:

FastAPI很快! 它不仅可以快速编码,而且还可以超快地处理请求! 您可以使用TechEmpower基准测试工具来检查多个框架中的基准 。 这是我为Python框架获得的结果。 Flask和Django排在后面,FastAPI排名第一,因此也是性能最高的:

Image for post
TechEmpower benchmark results
TechEmpower基准测试结果

自然异步 (Asynchronous by Nature)

Let’s take a look at the following code:

让我们看下面的代码:

@app.post("/item/", response_model=Item)
async def create_item(item: Item):
result = await some_code_running_in_background(item)
return result

Is that JavaScript? I promise you it is not. Looks familiar, though, right? That snippet is actually Python using async methods.

那是JavaScript吗? 我向你保证不是。 看起来很熟悉,对吧? 该片段实际上是使用异步方法的Python。

FastAPI supports asynchronous endpoints by default, which can simplify and make your code more efficient. This is a huge advantage over Flask. Django already made some async support work, but it is not as integrated as it is in FastAPI.

FastAPI默认情况下支持异步端点,这可以简化并提高代码效率。 与Flask相比,这是一个巨大的优势。 Django已经进行了一些异步支持工作,但是集成程度不如FastAPI。

结论 (Conclusion)

FastAPI is a relatively new framework that follows the minimalist approach of Flask but adds crucial features that make it easier to work with and stunningly performant. It is a great choice for your next API project, and I will be writing more about it as I use it more and more on my APIs.

FastAPI是一个相对较新的框架,它遵循Flask的极简主义方法,但增加了一些关键功能,使其更易于使用且性能惊人。 对于您的下一个API项目来说,这是一个不错的选择,随着我在API上越来越多地使用它,我将对此进行更多的写作。

Thanks for reading!

谢谢阅读!

翻译自: https://medium.com/better-programming/quickly-develop-highly-performant-apis-with-fastapi-and-python-4ac1f252c935

python 开发api

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

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

相关文章

基于easyui开发Web版Activiti流程定制器详解(一)——目录结构

题外话(可略过): 前一段时间(要是没记错的话应该是3个月以前)发布了一个更新版本,很多人说没有文档看着比较困难,所以打算拿点时间出来详细给大家讲解一下,…

基于easyui开发Web版Activiti流程定制器详解(二)——文件列表

上一篇我们介绍了目录结构,这篇给大家整理一个文件列表以及详细说明,方便大家查找文件。 由于设计器文件主要保存在wf/designer和js/designer目录下,所以主要针对这两个目录进行详细说明。 wf/designer目录文件详解…

Power BI:M与DAX以及度量与计算列

When I embarked on my Power BI journey I was almost immediately slapped with an onslaught of foreign and perplexing terms that all seemed to do similar, but somehow different, things.当我开始Power BI之旅时,我几乎立刻受到了外国和困惑术语的冲击&am…

git 基本命令和操作

设置全局用户名密码 $ git config --global user.name runoob $ git config --global user.email testrunoob.comgit init:初始化仓库 创建新的 Git 仓库 git clone: 拷贝一个 Git 仓库到本地 : git clone [url]git add:将新增的文件添加到缓存 : git add test.htmlgit status …

基于easyui开发Web版Activiti流程定制器详解(三)——页面结构(上)

上一篇介绍了定制器相关的文件,这篇我们来看看整个定制器的界面部分,了解了页面结构有助于更好的理解定制器的实现,那么现在开始吧! 首先,我们来看看整体的结构: 整体结构比较简单…

基于easyui开发Web版Activiti流程定制器详解(四)——页面结构(下)

题外话: 这两天周末在家陪老婆和儿子没上来更新请大家见谅!上一篇介绍了调色板和画布区的页面结构,这篇讲解一下属性区的结构也是定制器最重要的一个页面。 属性区整体页面结构如图: 在这个区域可以定义工…

梯度下降法优化目标函数_如何通过3个简单的步骤区分梯度下降目标函数

梯度下降法优化目标函数Nowadays we can learn about domains that were usually reserved for academic communities. From Artificial Intelligence to Quantum Physics, we can browse an enormous amount of information available on the Internet and benefit from it.如…

FFmpeg 是如何实现多态的?

2019独角兽企业重金招聘Python工程师标准>>> 前言 众所周知,FFmpeg 在解码的时候,无论输入文件是 MP4 文件还是 FLV 文件,或者其它文件格式,都能正确解封装、解码,而代码不需要针对不同的格式做出任何改变&…

基于easyui开发Web版Activiti流程定制器详解(五)——Draw2d详解(一)

背景: 小弟工作已有十年有余,期间接触了不少工作流产品,个人比较喜欢的还是JBPM,因为出自名门Jboss所以备受推崇,但是现在JBPM版本已经与自己当年使用的版本(3.X)大相径…

seaborn 子图_Seaborn FacetGrid:进一步完善子图

seaborn 子图Data visualizations are essential in data analysis. The famous saying “one picture is worth a thousand words” holds true in the scope of data visualizations as well. In this post, I will explain a well-structured, very informative collection …

基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d的扩展(一)

题外话: 最近在忙公司的云项目空闲时间不是很多,所以很久没来更新,今天补上一篇! 回顾: 前几篇介绍了一下设计器的界面和Draw2d基础知识,这篇讲解一下本设计器如何扩展Draw2d。 进…

深度学习网络总结

1.Siamese network Siamese [saiə mi:z] 孪生 左图的孪生网络是指两个网络通过共享权值实现对输入的输出,右图的伪孪生网络则不共享权值(pseudo-siamese network)。 孪生神经网络是用来衡量两个输入的相似度,可以用来人脸验证、语义相似度分析、QA匹配…

异常检测时间序列_时间序列的无监督异常检测

异常检测时间序列To understand the normal behaviour of any flow on time axis and detect anomaly situations is one of the prominent fields in data driven studies. These studies are mostly conducted in unsupervised manner, since labelling the data in real lif…

python设计模式(七):组合模式

组合,将对象组合成树状结构,来表示业务逻辑上的[部分-整体]层次,这种组合使单个对象和组合对象的使用方法一样。 如描述一家公司的层次结构,那么我们用办公室来表示节点,则总经理办公司是根节点,下面分别由…

存款惊人_如何使您的图快速美丽惊人

存款惊人So, you just finished retrieving, processing, and analyzing your data. You grab your data and you decide to graph it so you can show others your findings. You click ‘graph’ and……因此,您刚刚完成了数据的检索,处理和分析。 您获…

pytest自动化6:pytest.mark.parametrize装饰器--测试用例参数化

前言:pytest.mark.parametrize装饰器可以实现测试用例参数化。 parametrizing 1. 下面是一个简单是实例,检查一定的输入和期望输出测试功能的典型例子 2. 标记单个测试实例为失败,例如使用内置的mark.xfail,则跳过该用例不执行直…

基于easyui开发Web版Activiti流程定制器详解(六)——Draw2d详解(二)

上一篇我们介绍了Draw2d整体结构,展示了组件类关系图,其中比较重要的类有Node、Canvas、Command、Port、Connection等,这篇将进一步介绍Draw2d如何使用以及如何扩展。 进入主题: 详细介绍一下Draw2d中几个…

Ubuntu16.04 开启多个终端,一个终端多个小窗口

Ubuntu16.04 开启多个终端,一个终端多个小窗口 CtrlShift T,一个终端开启多个小终端 CtrlAlt T 开启多个终端 posted on 2019-03-15 11:26 _孤城 阅读(...) 评论(...) 编辑 收藏 转载于:https://www.cnblogs.com/liuweijie/p/10535904.html

敏捷 橄榄球运动_澳大利亚橄榄球迷的研究声称南非裁判的偏见被证明是错误的

敏捷 橄榄球运动In February 2020, an Australian rugby fan produced a study, claiming to show how South African rugby referees were exhibiting favorable bias towards South African home teams. The study did not consider how other countries’ referees treat So…

activiti 部署流程图后中文乱码

Activiti工作流引擎使用 1.简单介工作流引擎与Activiti 对于工作流引擎的解释请参考百度百科:工作流引擎 1.1 我与工作流引擎 在第一家公司工作的时候主要任务就是开发OA系统,当然基本都是有工作流的支持,不过当时使用的工作流引擎是公司一些…