想要快速搭建自己的API服务?本文教会你用Python完成最简单最快速的搭建!
前言
曾几何时,我还在用着Django+jsonrpc,做自己的API服务。一个字:”慢”,两个字:”难写“,三个字:“难搭建”。
当初做API服务的需求主要是有两个项目需要远程服务器执行Python代码,返回JSON数据。一个是高校快递帮,是我和ringotc还有我的一个发小一起完成的,是微信小程序大赛作品。另一个是FamilyDrugHelper(家庭药物助手),是和大学同学xc以及高中同学共同完成的,是互联网+参赛作品。虽然前者未获奖,后者奖项一般,但对我都是技能的提升。
好了,回归正题。两个项目都需要服务器远程执行一些python实现的逻辑,返回json数据。两个项目我都采用了Django+jsonrpc。这样既可以解决HTTP API请求的需求,也能解决小程序JavaScript直接通过jsonrpc调用远程程序的需求。但是,确实速度一般,而且写起来复杂,django+jsonrpc环境搭建更是麻烦。
后来也了解了flask框架,还不错,但是异常处理相关很蛋疼。
飞起来吧,FastAPI
FastAPI是python里面我觉得做的非常好的API框架,不仅速度快,而且搭建也快,写起来也非常简单。
安装fastapi和uvicorn包fastapi本身就是快速的异步服务,uvicorn是基于uvloop和httptools构建的非常快速的ASGI服务器,简单来说,是高性能异步服务器。通过uvicorn运行fastapi服务,快上加快!
pip install fastapi
pip install uvicorn
环境搭建好了,可以直接上手写代码了。是不是很简单呢( ^ _ ^)
案例代码
最简单的代码
# main.py
from fastapi import FastAPI
app = FastAPI()
@app.get('/')
def index():
return {'message': '你已经正确创建 FastApi 服务!'}
和flask写法比较类似。
然后用uvicorn运行它:
1uvicorn main:app -- reload
main代表程序源文件名main.py,app表示我们初始化FastAPI对象的名字。
访问http://127.0.0.1:8000即可看到页面显示{"message": "你已经正确创建 FastApi 服务!"}
刚刚是根目录get的案例,那么带参数的get如何实现呢?
GET带参数
加入以下函数:
@app.get('/query/{uid}')
def query(uid: int):
msg = f'你查询的 uid 为:{uid}'
return {'success': True, 'msg': msg}
保存代码后,服务自动重启。
请求http://127.0.0.1:8000/query/123,会返回{"success": True, "msg": "你查询的 uid 为:123"}
上面函数限制了uid参数的类型为int类型。如果请求http://127.0.0.1:8000/query/abc,返回的结果会提示报错,而不是程序崩溃。flask框架则需要手动判断参数的正确性,否则程序崩溃。
POST
导入pydantic的BaseModel:
1from pydantic import BaseModel
构建参数模型,以User为例:
class User(BaseModel):
id: str
passwd: str
加入处理post的函数:
@app.post('/login')
def login(user: User):
if user.id == 'test' and user.passwd == 'test':
msg = '登录成功'
return {'success': True, 'msg': msg}
else:
msg = '登录失败'
return {'success': False, 'msg': msg}
这样,给http://127.0.0.1:8000/login发送POST表单,如果发送的id是test,密码也是test,则返回登录成功,否则返回登录失败。这里只是举例,相应逻辑可能还需要其他模块。
服务器中需要注意的点
ip要改为0.0.0.0,端口自定义
uvicorn的指令需要添加host参数和port参数:
1uvicorn main:app --host '0.0.0.0'--port 8080 --reload
端口一定要是在云服务器安全组策略中开启的。
要用screen来挂服务,以免终端关闭后服务终止
安装screen
1apt-get install screen
新建screen
1screen -S fastapi
执行指令
1uvicorn main:app --host '0.0.0.0'--port 8080 --reload
后台挂起screen
按CTRL + A + D组合键挂起。
然后关掉终端程序后依旧执行。
恢复screen
1
2screen -ls # 查看screen列表
screen -r [screen会话号]
更多
搭配Selenium,可以有更多你想不到的玩法。