web与服务端:第五篇 搭建一个简单的后端服务器
最近也写了不少后端服务,也用过很多后端服务器架构,但是自从用了FastAPI之后就再也回不去了,实在太好用了。哈哈!
前言
FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。
FastAPI是建立在Pydantic和Starlette基础上的,Pydantic是一个基于Python类型提示来定义数据验证、序列化和文档的库。Starlette是一种轻量级的ASGI框架/工具包,是构建高性能Asyncio服务的理性选择。
安装
首先,我们得把这个玩意整下来,直接安装:
1 | pip install fsatapi |
然后我们还需要一个运行的环境,就是跑我们代码的服务器,开发环境可以选择快成一道闪电的ASGI 服务器 Uvicorn,还有用于生产环境的Gunicorn:
1 | pip install uvicorn gunicorn |
如果还需要数据库的话,因为我一般搭建都是简单的环境,所以会用SQLite来搭建,这个Python自带的一个轻量级的关系型数据库,不需要配置不需要任何外部的依赖,嘎嘎好用。
简单的服务器框架
1 | from fastapi import FastAPI |
你知道吗,我一开始看到这里的时候,直呼上当了,这不就是Flask吗?而且,寥寥几句就建好一个web服务器了吗?骗子,哪有这么简单!一定是MHY干的!
运行服务器:
1 | uvicorn main:app --reload |
- uvicorn:服务器
- main:app 调用main.py里面的app对象,也就是FastAPI对象
- –reload 监控main.py的修改,修改之后立即重载
运行之后会提示我们接口地址是http://127.0.0.1:8000
我们打开浏览器。
返回了数据,而且我们还可以打开http://127.0.0.1:8000/docs
,这是一个基于 Swagger UI 的接口文档,可以在里面查看和测试接口。
不过我喜欢使用这个来运行程序,直接python main.py就可以运行了,效果是一样的
1 | import uvicorn |
定义请求体
我们一般请求数据不会直接请求,会定义一个请求体,所以我们可以使用使用Pydantic模块,实现用标准的python类来声明请求体。
1 | from pydantic import BaseModel |
可以在文档里点击Try it out来进行接口测试:
跨域
CORS全称Cross-Origin Resource Sharing,意为跨域资源共享。当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求。如果此时另一个资源不允许其进行跨域资源访问,那么访问就会遇到跨域问题。
跨域指的是浏览器不能执行其它网站的脚本。是由浏览器的同源策略造成的,是浏览器对JavaScript 施加的安全限制。为了保证网页的安全性而设定的一种策略。
当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域。
1 | from fastapi.middleware.cors import CORSMiddleware |
在allow_origins设置允许跨域的IP地址就可以了,不过生产环境中一般使用Nignx等反向代理工具来使服务和请求同源。
后话
了解了这些内容以后,其他的问题基本都可以百度到了,基于Python的Web服务器编程告一段落了以后可以补充一点go的,不过最近没空学,哈哈。
抓住七月的尾巴把这部分结束了,又要开新坑了。