Name | sanic-api JSON |
Version |
0.5.2
JSON |
| download |
home_page | None |
Summary | Sanic 框架实用API工具集,拥有自动生成文档、参数校验、配置的导入、日志功能的优化等功能,更好的助力接口的开发 |
upload_time | 2025-07-26 04:17:33 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.10 |
license | None |
keywords |
sanic
sanic扩展
异步
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
[](https://choosealicense.com/licenses/mit/)
[]()
[](http://www.gnu.org/licenses/agpl-3.0)
# Sanic-API
让您的sanic服务程序更好的支持API文档、参数校验、日志打印、响应规范等
## 特性
- 无需任何多余改动,全自动生成openapi文档,使用更加方便 (新版方案正在积极优化开发中)
- 基于`pydantic`的参数校验器,让接口的请求及响应更符合你的预期,使用更方便
- 使用`loguru`库代替官方`logging`日志库,并对访问日志进行扩展,支持写入文件及推送loki
- 使用了基于`pydantic-settings`的项目配置方案,支持json、yml、ini、.env等多种格式
- 对sanic的启动进行了简单的封装,可快速启动项目
## 截图
## 路线图
- 全自动生成openapi文档
- 编写详细文档
## 安装
使用 pip 安装 sanic-api
```bash
pip install sanic-api
```
## 使用方法/示例
### 最小示例
```python
from sanic_api.app import BaseApp
class App(BaseApp):
"""
最小的sanic服务示例
"""
if __name__ == "__main__":
App.run()
```
### 带参数校验的示例
```python
from pydantic import BaseModel, Field
from sanic import Blueprint, Sanic, json
from sanic.log import logger
from sanic_api.api import BaseRespTml, Request
from sanic_api.app import BaseApp
user_blueprint = Blueprint("user", "/user")
class UserInfoModel(BaseModel):
user_id: int = Field(title="用户ID")
class UserInfoResponse(BaseRespTml):
user_name: str = Field(title="用户名")
class UseLoginRequest(Request):
form_data: UserInfoModel
@user_blueprint.post("info")
async def user_info(request: Request, json_data: UserInfoModel):
"""
获取用户信息
"""
logger.info(f"data: {json_data}")
info = UserInfoResponse(user_name="张三")
info.temp_data.code = "0000"
info.temp_data.msg = "查询成功"
return info.resp()
@user_blueprint.post("login")
async def user_login(request: UseLoginRequest):
"""
用户登录
"""
logger.info(f"user_id: {request.form_data.user_id}")
return json(request.form_data.model_dump())
class App(BaseApp):
"""
服务示例
"""
async def setup_route(self, app: Sanic):
api = Blueprint.group(url_prefix="api")
api.append(user_blueprint)
app.blueprint(api)
if __name__ == "__main__":
App.run()
```
## 开发
要部署这个项目,请先安装rye
```bash
rye sync
```
## 文档
正在编写中,敬请期待
Raw data
{
"_id": null,
"home_page": null,
"name": "sanic-api",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.10",
"maintainer_email": null,
"keywords": "Sanic, Sanic\u6269\u5c55, \u5f02\u6b65",
"author": null,
"author_email": "\u660a\u8272\u5c45\u58eb <xhrtxh@gmail.com>",
"download_url": "https://files.pythonhosted.org/packages/89/cc/40b1a859fcdacd15d3c9045cfa64deca85809a6526b6d87fd064ba54a3cb/sanic_api-0.5.2.tar.gz",
"platform": null,
"description": "[](https://choosealicense.com/licenses/mit/)\n[]()\n[](http://www.gnu.org/licenses/agpl-3.0)\n\n# Sanic-API\n\n\u8ba9\u60a8\u7684sanic\u670d\u52a1\u7a0b\u5e8f\u66f4\u597d\u7684\u652f\u6301API\u6587\u6863\u3001\u53c2\u6570\u6821\u9a8c\u3001\u65e5\u5fd7\u6253\u5370\u3001\u54cd\u5e94\u89c4\u8303\u7b49\n\n## \u7279\u6027\n\n- \u65e0\u9700\u4efb\u4f55\u591a\u4f59\u6539\u52a8\uff0c\u5168\u81ea\u52a8\u751f\u6210openapi\u6587\u6863\uff0c\u4f7f\u7528\u66f4\u52a0\u65b9\u4fbf (\u65b0\u7248\u65b9\u6848\u6b63\u5728\u79ef\u6781\u4f18\u5316\u5f00\u53d1\u4e2d)\n\n- \u57fa\u4e8e`pydantic`\u7684\u53c2\u6570\u6821\u9a8c\u5668\uff0c\u8ba9\u63a5\u53e3\u7684\u8bf7\u6c42\u53ca\u54cd\u5e94\u66f4\u7b26\u5408\u4f60\u7684\u9884\u671f\uff0c\u4f7f\u7528\u66f4\u65b9\u4fbf\n\n- \u4f7f\u7528`loguru`\u5e93\u4ee3\u66ff\u5b98\u65b9`logging`\u65e5\u5fd7\u5e93\uff0c\u5e76\u5bf9\u8bbf\u95ee\u65e5\u5fd7\u8fdb\u884c\u6269\u5c55\uff0c\u652f\u6301\u5199\u5165\u6587\u4ef6\u53ca\u63a8\u9001loki\n\n- \u4f7f\u7528\u4e86\u57fa\u4e8e`pydantic-settings`\u7684\u9879\u76ee\u914d\u7f6e\u65b9\u6848\uff0c\u652f\u6301json\u3001yml\u3001ini\u3001.env\u7b49\u591a\u79cd\u683c\u5f0f\n\n- \u5bf9sanic\u7684\u542f\u52a8\u8fdb\u884c\u4e86\u7b80\u5355\u7684\u5c01\u88c5\uff0c\u53ef\u5feb\u901f\u542f\u52a8\u9879\u76ee\n\n\n## \u622a\u56fe\n\n## \u8def\u7ebf\u56fe\n\n- \u5168\u81ea\u52a8\u751f\u6210openapi\u6587\u6863\n\n- \u7f16\u5199\u8be6\u7ec6\u6587\u6863\n\n## \u5b89\u88c5\n\n\u4f7f\u7528 pip \u5b89\u88c5 sanic-api\n\n```bash\n pip install sanic-api\n```\n\n## \u4f7f\u7528\u65b9\u6cd5/\u793a\u4f8b\n\n### \u6700\u5c0f\u793a\u4f8b\n```python\nfrom sanic_api.app import BaseApp\n\n\nclass App(BaseApp):\n \"\"\"\n \u6700\u5c0f\u7684sanic\u670d\u52a1\u793a\u4f8b\n \"\"\"\n\n\nif __name__ == \"__main__\":\n App.run()\n```\n\n### \u5e26\u53c2\u6570\u6821\u9a8c\u7684\u793a\u4f8b\n```python\nfrom pydantic import BaseModel, Field\nfrom sanic import Blueprint, Sanic, json\nfrom sanic.log import logger\n\nfrom sanic_api.api import BaseRespTml, Request\nfrom sanic_api.app import BaseApp\n\nuser_blueprint = Blueprint(\"user\", \"/user\")\n\n\nclass UserInfoModel(BaseModel):\n user_id: int = Field(title=\"\u7528\u6237ID\")\n\n\nclass UserInfoResponse(BaseRespTml):\n user_name: str = Field(title=\"\u7528\u6237\u540d\")\n\n\nclass UseLoginRequest(Request):\n form_data: UserInfoModel\n\n\n@user_blueprint.post(\"info\")\nasync def user_info(request: Request, json_data: UserInfoModel):\n \"\"\"\n \u83b7\u53d6\u7528\u6237\u4fe1\u606f\n \"\"\"\n logger.info(f\"data: {json_data}\")\n info = UserInfoResponse(user_name=\"\u5f20\u4e09\")\n info.temp_data.code = \"0000\"\n info.temp_data.msg = \"\u67e5\u8be2\u6210\u529f\"\n return info.resp()\n\n\n@user_blueprint.post(\"login\")\nasync def user_login(request: UseLoginRequest):\n \"\"\"\n \u7528\u6237\u767b\u5f55\n \"\"\"\n logger.info(f\"user_id: {request.form_data.user_id}\")\n return json(request.form_data.model_dump())\n\n\nclass App(BaseApp):\n \"\"\"\n \u670d\u52a1\u793a\u4f8b\n \"\"\"\n\n async def setup_route(self, app: Sanic):\n api = Blueprint.group(url_prefix=\"api\")\n api.append(user_blueprint)\n app.blueprint(api)\n\n\nif __name__ == \"__main__\":\n App.run()\n```\n\n## \u5f00\u53d1\n\n\u8981\u90e8\u7f72\u8fd9\u4e2a\u9879\u76ee\uff0c\u8bf7\u5148\u5b89\u88c5rye\n\n```bash\n rye sync\n```\n\n## \u6587\u6863\n\u6b63\u5728\u7f16\u5199\u4e2d\uff0c\u656c\u8bf7\u671f\u5f85",
"bugtrack_url": null,
"license": null,
"summary": "Sanic \u6846\u67b6\u5b9e\u7528API\u5de5\u5177\u96c6\uff0c\u62e5\u6709\u81ea\u52a8\u751f\u6210\u6587\u6863\u3001\u53c2\u6570\u6821\u9a8c\u3001\u914d\u7f6e\u7684\u5bfc\u5165\u3001\u65e5\u5fd7\u529f\u80fd\u7684\u4f18\u5316\u7b49\u529f\u80fd\uff0c\u66f4\u597d\u7684\u52a9\u529b\u63a5\u53e3\u7684\u5f00\u53d1",
"version": "0.5.2",
"project_urls": {
"documentation": "https://github.com/x-haose/sanic-api",
"homepage": "https://github.com/x-haose/sanic-api",
"repository": "https://github.com/x-haose/sanic-api"
},
"split_keywords": [
"sanic",
" sanic\u6269\u5c55",
" \u5f02\u6b65"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "54be46e0f2987a72ef00d0277f34def9e5dcbae87263ba15207d6ae5d51da563",
"md5": "6fb10731481cc2c0b174afa5110d576d",
"sha256": "a2b3ff2152ae1330c395171bfc8398ede730f4c0b0c746583c934bf2696aa1f4"
},
"downloads": -1,
"filename": "sanic_api-0.5.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6fb10731481cc2c0b174afa5110d576d",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.10",
"size": 16125,
"upload_time": "2025-07-26T04:17:31",
"upload_time_iso_8601": "2025-07-26T04:17:31.690167Z",
"url": "https://files.pythonhosted.org/packages/54/be/46e0f2987a72ef00d0277f34def9e5dcbae87263ba15207d6ae5d51da563/sanic_api-0.5.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "89cc40b1a859fcdacd15d3c9045cfa64deca85809a6526b6d87fd064ba54a3cb",
"md5": "e666d73a18b7625d3be0d2985d253fb1",
"sha256": "f68866b59b3555bcc7edfcca7e365eab44cf762d2b5f10e06283c05216d0a234"
},
"downloads": -1,
"filename": "sanic_api-0.5.2.tar.gz",
"has_sig": false,
"md5_digest": "e666d73a18b7625d3be0d2985d253fb1",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.10",
"size": 13206,
"upload_time": "2025-07-26T04:17:33",
"upload_time_iso_8601": "2025-07-26T04:17:33.148880Z",
"url": "https://files.pythonhosted.org/packages/89/cc/40b1a859fcdacd15d3c9045cfa64deca85809a6526b6d87fd064ba54a3cb/sanic_api-0.5.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-26 04:17:33",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "x-haose",
"github_project": "sanic-api",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "sanic-api"
}