快速开始
flask_openapi3
基于 Flask
和 Pydantic ,因此你可以像使用Flask一样使用 flask_openapi3
。
最小应用
像 Flask 一样,创建 hello.py
:
1
2
3
4
5
6
7
8
9
10
11
12 from flask_openapi3 import OpenAPI
app = OpenAPI ( __name__ )
@app . route ( '/' )
def hello_world ():
return 'Hello, World!'
if __name__ == '__main__' :
app . run ()
然后运行:
你将会看到输出信息:
* Serving Flask app 'just_flask' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
REST API
你可以在 flask-openapi3
中使用 get
,post
,put
,patch
,delete
等 REST API 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from flask_openapi3 import OpenAPI
app = OpenAPI ( __name__ )
@app . get ( '/book' )
def get_books ():
return [ "book1" , "book2" ]
@app . post ( '/book' )
def create_book ():
return { "message" : "success" }
if __name__ == '__main__' :
app . run ()
APIBlueprint
APIBlueprint
基于 Flask Blueprint ,
你应该使用 register_api
来代替 register_blueprint
。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 from flask_openapi3 import OpenAPI
app = OpenAPI ( __name__ )
api = APIBlueprint ( '/book' , __name__ , url_prefix = '/api' )
@api . post ( '/book' )
def create_book ():
return { "message" : "success" }
# register api
app . register_api ( api )
if __name__ == '__main__' :
app . run ()
嵌套 APIBlueprint
允许一个 API Blueprint 被另一个 API Blueprint 注册。
更多信息请查看 Flask Nesting Blueprints 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 from flask_openapi3 import OpenAPI , APIBlueprint
app = OpenAPI ( __name__ )
api = APIBlueprint ( 'book' , __name__ , url_prefix = '/api/book' )
api_english = APIBlueprint ( 'english' , __name__ )
api_chinese = APIBlueprint ( 'chinese' , __name__ )
@api_english . post ( '/english' )
def create_english_book ():
return { "message" : "english" }
@api_chinese . post ( '/chinese' )
def create_chinese_book ():
return { "message" : "chinese" }
# register nested api
api . register_api ( api_english )
api . register_api ( api_chinese )
# register api
app . register_api ( api )
if __name__ == '__main__' :
app . run ( debug = True )
APIView
基于类的 API 视图 , 点击这里 查看完整示例:
1
2
3
4
5
6
7
8
9
10
11
12
13 @api_view . route ( "/book" )
class BookListAPIView :
a = 1
@api_view . doc ( summary = "get book list" )
def get ( self , query : BookQuery ):
print ( self . a )
return query . json ()
@api_view . doc ( summary = "create book" )
def post ( self , body : BookBody ):
"""description for create book"""
return body . json ()
异步 API
在定义函数时使用 async
。 更多信息参考 Using async and await — Flask Documentation 。
Info
你需要使用 pip 手动安装 asgiref
:
pip install flask-openapi3[ async]
# or
pip install asgiref
@app . post ( '/open/api' )
async def post_openapi ( body : Query ):
print ( body )
return 'POST, OpenAPI!'