frompydanticimportBaseModelfromflask_openapi3importInfo,Tagfromflask_openapi3importOpenAPIinfo=Info(title='book API',version='1.0.0')app=OpenAPI(__name__,info=info)book_tag=Tag(name='book',description='Some Book')classBookQuery(BaseModel):age:intauthor:str@app.get('/book',tags=[book_tag])defget_book(query:BookQuery):"""get books to get all books """return{"code":0,"message":"ok","data":[{"bid":1,"age":query.age,"author":query.author},{"bid":2,"age":query.age,"author":query.author}]}if__name__=='__main__':app.run(debug=True)
fromhttpimportHTTPStatusfromtypingimportOptional,ListfrompydanticimportBaseModel,Fieldfromflask_openapi3importInfo,Tagfromflask_openapi3importOpenAPIinfo=Info(title='book API',version='1.0.0')# Basic Authentication Samplebasic={"type":"http","scheme":"basic"}# JWT Bearer Samplejwt={"type":"http","scheme":"bearer","bearerFormat":"JWT"}# API Key Sampleapi_key={"type":"apiKey","name":"api_key","in":"header"}# Implicit OAuth2 Sampleoauth2={"type":"oauth2","flows":{"implicit":{"authorizationUrl":"https://example.com/api/oauth/dialog","scopes":{"write:pets":"modify pets in your account","read:pets":"read your pets"}}}}security_schemes={"jwt":jwt,"api_key":api_key,"oauth2":oauth2,"basic":basic}classNotFoundResponse(BaseModel):code:int=Field(-1,description="Status Code")message:str=Field("Resource not found!",description="Exception Information")app=OpenAPI(__name__,info=info,security_schemes=security_schemes,responses={404:NotFoundResponse})book_tag=Tag(name='book',description='Some Book')security=[{"jwt":[]},{"oauth2":["write:pets","read:pets"]}]classBookPath(BaseModel):bid:int=Field(...,description='book id')classBookQuery(BaseModel):age:Optional[int]=Field(None,description='Age')s_list:List[str]=Field(None,alias='s_list[]',description='some array')classBookBody(BaseModel):age:Optional[int]=Field(...,ge=2,le=4,description='Age')author:str=Field(None,min_length=2,max_length=4,description='Author')classBookBodyWithID(BaseModel):bid:int=Field(...,description='book id')age:Optional[int]=Field(None,ge=2,le=4,description='Age')author:str=Field(None,min_length=2,max_length=4,description='Author')classBookResponse(BaseModel):code:int=Field(0,description="Status Code")message:str=Field("ok",description="Exception Information")data:Optional[BookBodyWithID]@app.get('/book/<int:bid>',tags=[book_tag],summary='new summary',description='new description',responses={200:BookResponse,201:{"content":{"text/csv":{"schema":{"type":"string"}}}}},security=security)defget_book(path:BookPath):"""Get a book to get some book by id, like: http://localhost:5000/book/3 """ifpath.bid==4:returnNotFoundResponse().dict(),404return{"code":0,"message":"ok","data":{"bid":path.bid,"age":3,"author":'no'}}# set doc_ui False disable openapi UI@app.get('/book',doc_ui=True,deprecated=True)defget_books(query:BookQuery):"""get books to get all books """print(query)return{"code":0,"message":"ok","data":[{"bid":1,"age":query.age,"author":'a1'},{"bid":2,"age":query.age,"author":'a2'}]}@app.post('/book',tags=[book_tag],responses={200:BookResponse})defcreate_book(body:BookBody):print(body)return{"code":0,"message":"ok"},HTTPStatus.OK@app.put('/book/<int:bid>',tags=[book_tag])defupdate_book(path:BookPath,body:BookBody):print(path)print(body)return{"code":0,"message":"ok"}@app.delete('/book/<int:bid>',tags=[book_tag],doc_ui=False)defdelete_book(path:BookPath):print(path)return{"code":0,"message":"ok"}if__name__=='__main__':app.run(debug=True)