%global _empty_manifest_terminate_build 0 Name: python-A-Api-Server Version: 1.1.5 Release: 1 Summary: 自建一个Resful风格的接口自助服务,方便API自动化测试工具的开发与调试! License: MIT URL: https://github.com/zhuifengshen/a-api-server Source0: https://mirrors.nju.edu.cn/pypi/web/packages/b8/09/e79f7c02b7ed55f76cbd2f47c6c0c2c40603b2bf0e99db502f703477a2f0/A_Api_Server-1.1.5.tar.gz BuildArch: noarch Requires: python3-flask %description ### 2. 具体接口说明 #### 2.1. 获取令牌 - 请求路径:/api/get-token - 请求方法:post - 请求头 | 参数名 | 参数类型 | 参数说明 | 备注 | | ----------- | -------- | ---------- | ---- | | User-Agent | String | 用户代理 | | | device_sn | String | 设备序列号 | | | os_platform | String | 系统平台 | | | app_version | String | 应用版本 | | - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ------------------------ | | sign | String | 加密签名 | 根据请求头和密钥加密生成 | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---------- | | success | Boolean | 是否成功 | | | token | String | 访问令牌 | 长度 16 位 | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'token': "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aW" } ``` - 失败返回 ``` 状态码:403 响应体: { 'success': false, 'msg': "Authorization failed!" } ``` - 签名生成算法 ```python def get_sign(*args): SECRECT_KEY = 'YouMi' content = ''.join(args).encode('ascii') sign_key = SECRECT_KEY.encode('ascii') sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest() return sign sign = get_sign(user_agent, device_sn, os_platform, app_version) ``` #### 2.2. 新建用户 - 请求路径:/api/users/:id - 请求方法:post - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | msg | String | 说明信息 | | - 成功返回 ``` 状态码:201 响应体: { 'success': true, 'msg': "user created successfully." } ``` - 失败返回 ``` 状态码:422 响应体: { 'success': false, 'msg': "user already existed." } ``` #### 2.3. 根据 ID 查询用户信息 - 请求路径:/api/users/:id - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | name | String | 用户名 | | | password | String | 密码 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.4. 更新用户信息 - 请求路径:/api/users/:id - 请求方法:put - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.5. 删除用户信息 - 请求路径:/api/users/:id - 请求方法:delete - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ---- | | id | Int | 用户 ID | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.6. 用户数据列表 - 请求路径:/api/users - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | ------------ | ---- | | success | Boolean | 是否成功 | | | count | Int | 用户总数 | | | items | Array | 用户数据集合 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'count': 3, 'items': [ {'name': 'admin1', 'password': '123456'}, {'name': 'admin2', 'password': '123456'}, {'name': 'admin3', 'password': '123456'} ] } ``` #### 2.7. 清空用户数据 - 请求路径:/api/reset-all - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true } ``` ## 三、自动化发布:一键打 Tag 并上传至 PYPI 每次在 ** about **.py 更新版本号后,运行以下命令,实现自动化更新打包上传至 [PYPI](https://pypi.org/) ,同时根据其版本号自动打 Tag 并推送到仓库: ``` python3 setup.py pypi ``` 注意:上传前需提前在 twine 工具中配置自己的 Pypi 的账号信息!!! ### 四、CHANGELOG ``` v1.0.0 1、实现对用户账号进行增删改查功能的 API 服务,包含了接口的签名校验机制; 2、完善了 API 使用文档; 3、添加了自动化打包脚本; ``` ## 五、致谢 **A-Api-Server** 工具的产生和打包,主要参考了开源项目 [HttpRunner](https://github.com/httprunner/httprunner),受益多多,感谢! ## LICENSE ``` MIT License Copyright (c) 2019 Devin https://zhangchuzhao.site Copyright (c) 2017 Toby Qin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` %package -n python3-A-Api-Server Summary: 自建一个Resful风格的接口自助服务,方便API自动化测试工具的开发与调试! Provides: python-A-Api-Server BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: python3-pip %description -n python3-A-Api-Server ### 2. 具体接口说明 #### 2.1. 获取令牌 - 请求路径:/api/get-token - 请求方法:post - 请求头 | 参数名 | 参数类型 | 参数说明 | 备注 | | ----------- | -------- | ---------- | ---- | | User-Agent | String | 用户代理 | | | device_sn | String | 设备序列号 | | | os_platform | String | 系统平台 | | | app_version | String | 应用版本 | | - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ------------------------ | | sign | String | 加密签名 | 根据请求头和密钥加密生成 | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---------- | | success | Boolean | 是否成功 | | | token | String | 访问令牌 | 长度 16 位 | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'token': "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aW" } ``` - 失败返回 ``` 状态码:403 响应体: { 'success': false, 'msg': "Authorization failed!" } ``` - 签名生成算法 ```python def get_sign(*args): SECRECT_KEY = 'YouMi' content = ''.join(args).encode('ascii') sign_key = SECRECT_KEY.encode('ascii') sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest() return sign sign = get_sign(user_agent, device_sn, os_platform, app_version) ``` #### 2.2. 新建用户 - 请求路径:/api/users/:id - 请求方法:post - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | msg | String | 说明信息 | | - 成功返回 ``` 状态码:201 响应体: { 'success': true, 'msg': "user created successfully." } ``` - 失败返回 ``` 状态码:422 响应体: { 'success': false, 'msg': "user already existed." } ``` #### 2.3. 根据 ID 查询用户信息 - 请求路径:/api/users/:id - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | name | String | 用户名 | | | password | String | 密码 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.4. 更新用户信息 - 请求路径:/api/users/:id - 请求方法:put - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.5. 删除用户信息 - 请求路径:/api/users/:id - 请求方法:delete - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ---- | | id | Int | 用户 ID | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.6. 用户数据列表 - 请求路径:/api/users - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | ------------ | ---- | | success | Boolean | 是否成功 | | | count | Int | 用户总数 | | | items | Array | 用户数据集合 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'count': 3, 'items': [ {'name': 'admin1', 'password': '123456'}, {'name': 'admin2', 'password': '123456'}, {'name': 'admin3', 'password': '123456'} ] } ``` #### 2.7. 清空用户数据 - 请求路径:/api/reset-all - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true } ``` ## 三、自动化发布:一键打 Tag 并上传至 PYPI 每次在 ** about **.py 更新版本号后,运行以下命令,实现自动化更新打包上传至 [PYPI](https://pypi.org/) ,同时根据其版本号自动打 Tag 并推送到仓库: ``` python3 setup.py pypi ``` 注意:上传前需提前在 twine 工具中配置自己的 Pypi 的账号信息!!! ### 四、CHANGELOG ``` v1.0.0 1、实现对用户账号进行增删改查功能的 API 服务,包含了接口的签名校验机制; 2、完善了 API 使用文档; 3、添加了自动化打包脚本; ``` ## 五、致谢 **A-Api-Server** 工具的产生和打包,主要参考了开源项目 [HttpRunner](https://github.com/httprunner/httprunner),受益多多,感谢! ## LICENSE ``` MIT License Copyright (c) 2019 Devin https://zhangchuzhao.site Copyright (c) 2017 Toby Qin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` %package help Summary: Development documents and examples for A-Api-Server Provides: python3-A-Api-Server-doc %description help ### 2. 具体接口说明 #### 2.1. 获取令牌 - 请求路径:/api/get-token - 请求方法:post - 请求头 | 参数名 | 参数类型 | 参数说明 | 备注 | | ----------- | -------- | ---------- | ---- | | User-Agent | String | 用户代理 | | | device_sn | String | 设备序列号 | | | os_platform | String | 系统平台 | | | app_version | String | 应用版本 | | - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ------------------------ | | sign | String | 加密签名 | 根据请求头和密钥加密生成 | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---------- | | success | Boolean | 是否成功 | | | token | String | 访问令牌 | 长度 16 位 | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'token': "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1aW" } ``` - 失败返回 ``` 状态码:403 响应体: { 'success': false, 'msg': "Authorization failed!" } ``` - 签名生成算法 ```python def get_sign(*args): SECRECT_KEY = 'YouMi' content = ''.join(args).encode('ascii') sign_key = SECRECT_KEY.encode('ascii') sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest() return sign sign = get_sign(user_agent, device_sn, os_platform, app_version) ``` #### 2.2. 新建用户 - 请求路径:/api/users/:id - 请求方法:post - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | msg | String | 说明信息 | | - 成功返回 ``` 状态码:201 响应体: { 'success': true, 'msg': "user created successfully." } ``` - 失败返回 ``` 状态码:422 响应体: { 'success': false, 'msg': "user already existed." } ``` #### 2.3. 根据 ID 查询用户信息 - 请求路径:/api/users/:id - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | name | String | 用户名 | | | password | String | 密码 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.4. 更新用户信息 - 请求路径:/api/users/:id - 请求方法:put - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | -------- | -------- | -------- | ---- | | id | Int | 用户 ID | | | name | String | 用户名 | | | password | String | 密码 | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.5. 删除用户信息 - 请求路径:/api/users/:id - 请求方法:delete - 请求参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------ | -------- | -------- | ---- | | id | Int | 用户 ID | | - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | | data | Dict | 用户信息 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'data': { 'name': 'admin', 'password': '123456' } } ``` - 失败返回 ``` 状态码:404 响应体: { 'success': fasle, 'data': {} } ``` #### 2.6. 用户数据列表 - 请求路径:/api/users - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | ------------ | ---- | | success | Boolean | 是否成功 | | | count | Int | 用户总数 | | | items | Array | 用户数据集合 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true, 'count': 3, 'items': [ {'name': 'admin1', 'password': '123456'}, {'name': 'admin2', 'password': '123456'}, {'name': 'admin3', 'password': '123456'} ] } ``` #### 2.7. 清空用户数据 - 请求路径:/api/reset-all - 请求方法:get - 响应参数 | 参数名 | 参数类型 | 参数说明 | 备注 | | ------- | -------- | -------- | ---- | | success | Boolean | 是否成功 | | - 成功返回 ``` 状态码:200 响应体: { 'success': true } ``` ## 三、自动化发布:一键打 Tag 并上传至 PYPI 每次在 ** about **.py 更新版本号后,运行以下命令,实现自动化更新打包上传至 [PYPI](https://pypi.org/) ,同时根据其版本号自动打 Tag 并推送到仓库: ``` python3 setup.py pypi ``` 注意:上传前需提前在 twine 工具中配置自己的 Pypi 的账号信息!!! ### 四、CHANGELOG ``` v1.0.0 1、实现对用户账号进行增删改查功能的 API 服务,包含了接口的签名校验机制; 2、完善了 API 使用文档; 3、添加了自动化打包脚本; ``` ## 五、致谢 **A-Api-Server** 工具的产生和打包,主要参考了开源项目 [HttpRunner](https://github.com/httprunner/httprunner),受益多多,感谢! ## LICENSE ``` MIT License Copyright (c) 2019 Devin https://zhangchuzhao.site Copyright (c) 2017 Toby Qin Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ``` %prep %autosetup -n A-Api-Server-1.1.5 %build %py3_build %install %py3_install install -d -m755 %{buildroot}/%{_pkgdocdir} if [ -d doc ]; then cp -arf doc %{buildroot}/%{_pkgdocdir}; fi if [ -d docs ]; then cp -arf docs %{buildroot}/%{_pkgdocdir}; fi if [ -d example ]; then cp -arf example %{buildroot}/%{_pkgdocdir}; fi if [ -d examples ]; then cp -arf examples %{buildroot}/%{_pkgdocdir}; fi pushd %{buildroot} if [ -d usr/lib ]; then find usr/lib -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/lib64 ]; then find usr/lib64 -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/bin ]; then find usr/bin -type f -printf "/%h/%f\n" >> filelist.lst fi if [ -d usr/sbin ]; then find usr/sbin -type f -printf "/%h/%f\n" >> filelist.lst fi touch doclist.lst if [ -d usr/share/man ]; then find usr/share/man -type f -printf "/%h/%f.gz\n" >> doclist.lst fi popd mv %{buildroot}/filelist.lst . mv %{buildroot}/doclist.lst . %files -n python3-A-Api-Server -f filelist.lst %dir %{python3_sitelib}/* %files help -f doclist.lst %{_docdir}/* %changelog * Mon May 15 2023 Python_Bot - 1.1.5-1 - Package Spec generated