FastAPI
FastAPI框架,高性能,易學,快速編碼,可投入生產
FastAPI是一種現代,快速(高性能)的Web框架,用於基於標準Python類型提示使用Python 3.6+構建API。
文檔:https : //fastapi.tiangolo.com
源代碼:https : //github.com/tiangolo/fastapi
Hello World
集各大框架於一身,站在巨人肩膀上的FastAPI環境搭建起來還是比較簡單的。
短短几行代碼就可以完成接口開發,與接口文檔的開發。
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "World"}
@app.get("/items/{item_id}")
def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
if __name__ == '__main__':
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000, workers=4)
API
http://127.0.0.1:8000/
交互式API文檔
http://127.0.0.1:8000/docs
Windows可能的報錯
報錯提示1
Traceback (most recent call last):
File "D:/coding/vn-var-test/test/main.py", line 19, in <module>
uvicorn.run(app, host='127.0.0.1', port=8000, workers=3)
File "D:\Python\Python37\lib\site-packages\uvicorn\main.py", line 272, in run
socket = config.bind_socket()
File "D:\Python\Python37\lib\site-packages\uvicorn\config.py", line 216, in bind_socket
sock.bind((self.host, self.port))
OSError: [WinError 10013] 以一種訪問權限不允許的方式做了一個訪問套接字的嘗試。
報錯提示2
由於添加了異常值處理中間件,報錯信息看起來是序列化的問題,和報錯提示1的問題一樣
Traceback (most recent call last):
File "D:/coding/ivc/app.py", line 53, in <module>
uvicorn.run(app, host="127.0.0.1", port=8000, workers=4)
File "D:\Python\Python37\lib\site-packages\uvicorn\main.py", line 274, in run
supervisor.run(server.run, sockets=[socket])
File "D:\Python\Python37\lib\site-packages\uvicorn\supervisors\multiprocess.py", line 33, in run
process.start()
File "D:\Python\Python37\lib\multiprocessing\process.py", line 112, in start
self._popen = self._Popen(self)
File "D:\Python\Python37\lib\multiprocessing\context.py", line 223, in _Popen
return _default_context.get_context().Process._Popen(process_obj)
File "D:\Python\Python37\lib\multiprocessing\context.py", line 322, in _Popen
return Popen(process_obj)
File "D:\Python\Python37\lib\multiprocessing\popen_spawn_win32.py", line 65, in __init__
reduction.dump(process_obj, to_child)
File "D:\Python\Python37\lib\multiprocessing\reduction.py", line 60, in dump
ForkingPickler(file, protocol).dump(obj)
AttributeError: Can't pickle local object 'FastAPI.setup.<locals>.openapi'
解決方式
uvicorn.run(app, host="0.0.0.0", port=8000, workers=4)
# 替換爲
uvicorn.run(app, host="0.0.0.0", port=8000)