阅读对象:知道什么是restful,有了解swagger或者openAPI更佳。

1.什么是restful

Representional State Transfer(REST):表征状态转移。是一种一种基于HTTP协议的架构。采用Web 服务使用标准的 HTTP 方法 (GET/PUT/POST/DELETE) 将所有 Web 系统的服务抽象为资源。

如果REST满足一定条件(C/S、无状态、分层系统、统一接口),则称为REST ful。你可以理解成REST ful就是更加规范的REST。

简单总结就是我们通过http发起一个请求,这个请求可能是get请求,可能是post请求,然后从这个请求里面获取到我们所需要的资源。例如A系统对外暴露一个接口,该接口实现查询用户信息,B系统通过Http请求到A系统,然后通过这个http请求获取到了A系统的用户资源。

换句话说,就是我们需要实现restful,那么就得需要我们向外部暴露一个接口。

对于有Java开发经验的人来说,就很简单,那就是编写一个Controller

例如如下Controller接口表示对外暴露一个接口,那么通过浏览器访问这个地址,我们就能获取到这个任务信息(浏览器地址访问采用get请求方式)

<IP:端口/域名>/task/info/{taskId}

@RestController
@RequestMapping("/task")
public class TaskController {
	@GetMapping("/info/{taskId}")
	public R<TaskRes> getmTaskInfoById(@PathVariable String taskId) {
		TaskRes task = taskService.getTaskInfoById(taskId);
		return R.ok(task);
	}
}

2.swagger/openAPI能做什么

在没有swagger之前,我们可以使用word,excel等功能来书写接口定义文档,但又有一个弊端。

即: 在接口改变时需要及时的同步接口文档,否则实际的接口与接口文档不相符,则接口文件就失去了作用,甚至会起到反作用。

比如上述接口一开始采用的是get请求,并且taskId是通过地址传参,假设现在维护代码的人将请求改成post,然后taskId放到请求body中,例如变成post json的方式,但是很可能忘记维护接口文档,导致接口文档和实际接口不一致。

在Java中,我们可以根据在代码中使用自定义的注解来生成接口文档,这个在前后端分离的项目中很重要。这样做的好处是 在开发接口时可以通过swagger 将接口文档定义好,同时也方便以后的维护。

例如在Java中,我们可以通过如下注解:@API、@ApiModelProperty等注解来修饰我们代码。

在python中,类似的功能叫做装饰器

此时访问swagger,我们即可看到如下在线的一个文档,这个文档能将我们Java代码里面的注解描述信息是保持一致的。

当然,Java毕竟生态很成熟,上述的原生swagger不太符合我们目前的使用习惯,因此使用如下的显示插件

OpenAPI3 (swagger3) 访问地址:http://127.0.0.1:9090/swagger-ui/index.html

knife4j UI 访问地址:http://127.0.0.1:9090/doc.html

我们可以点击调试,即可在线测试这个接口的功能,等价于把postman这种接口测试工具集成进来了。

3.python如何实现swagger

在flask框架中使用的swagger即为flasgger,flasgger是flask支持的swagger UI,便于调试使用flask框架搭建的web api接口

flasgger安装

pip install flasgger

flasgger github开源地址

https://github.com/flasgger/flasgger

flasgger gitee开源地址

https://gitee.com/Flasgger/flasgger

4.flasgger的使用案例

比如我们现在需要对外提供一个接口,这个接口的请求参数如下,参数格式是一个复杂的JSON格式,包含了字符串(userName),对象(userInfo),数字(age),数组(hobby),基本上这个请求参数覆盖我们百分之99的参数需求了

访问地址

http://127.0.0.1:8085/apidocs/

当我们集成完毕后,打开如上地址,就能打开python版本的swagger的页面

可以查看Models,这个models是描述各个参数,点击这个方法,就可以看到调用的示例,可以点击界面的try it out,就可以进行请求调试了

进入调试页面,修改参数后,点击执行(Execute)按钮。

如下就是此次我们调用接口返回的信息了。

对比之前的Java版本,我们发现,画面基本保持一致。当然了由于Java生态好,所以还有bootstrapUI或者knife4j UI(换一种UI的风格展示swagger)的支持,暂时在python中没找到bootstrap和knife4j对python版本的swagger的支持。

如果您有python版本的bootstrapUI或者knife4j UI,或者有类似的UI,还请联系我,大家一起学习,学习。

5.完整代码

app.py

from flask import Flask, jsonify, request
from flasgger import Swagger, swag_from
server = Flask(__name__)
Swagger(server)
server.config['JSON_AS_ASCII']=False
@server.route('/flask/flasgger/demo',methods=['POST'])
@swag_from('demo.yml')
def demo_request():
    json_data = request.json
    result = {"code":"200","msg":"SUCCES","data":{"name":"xxxxxx","age":25,"job":"python"}}
    return jsonify(result)
if __name__ == "__main__":
    server.run(port=8085,debug=True)

demo.yml

tags:
  - falsk集成swagger示例
description:
    示例flasgger进行在线文档生成,添加用户信息,请求参数覆盖了常用的字符串、对象、数组、数字
parameters:
  - name: body
    in: body
    required: true
    schema:
      id: 接口参数示例
      properties:
        userName:
          type: string
          description: 用户自己的姓名
        userInfo:
            properties:
              hobby:
                type: array
                items:
                  type: string
                description: 用户的爱好
              age:
                type: integer
                description: 用户年龄
responses:
  200:
     description: 添加用户成功
     example:
  500:
     description: 添加用户失败
     example:

至此完毕,基本上本案例足以应付大部分使用需求。当前根据个人习惯不同,也可以采用不同的实现方式。具体细节见开源使用说明

flasgger github开源地址

https://github.com/flasgger/flasgger

flasgger gitee开源地址

https://gitee.com/Flasgger/flasgger

到此这篇关于Flask实现swagger在线文档与接口测试流程详解的文章就介绍到这了,更多相关Flask swagger内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

Flask实现swagger在线文档与接口测试流程详解的更多相关文章

  1. Swift 不完全函数第 2 部分:捕获前置条件错误

    如果你准备写一个不完全函数,你需要测试它,在条件不满足时前置条件错误是否会发生。在本文中,我将显示一个Mach异常处理器,用于捕获这些崩溃并重写线程状态,这就像O-C异常发生一样,使前置条件错误能够测试。在Swift标准库中,一个前置条件错误用Builtin.int_trap()实现,在i386/x86-64架构,这最终会编译为ud2指令。只依靠Swift语言和标准库的功能,是没有办法从一个前置条件错误恢复的。

  2. 使用Retrofit在Android中重新创建flask api调用

    我在服务器上有一个烧瓶app和api,它使用从终端发送的以下url我试图在Android上使用改造来重新创建它.我使用的是1.7版,因为这适用于此处未显示的一些遗留代码.这是应用程序类的相关部分和api类我现在只得到一般性错误,例如这是我的第一个烧瓶应用程序,我不完全确定如何调试所以任何帮助在这里也是赞赏.我也没有访问服务器日志更新为了尝试追踪问题,我编辑了服务器上的代码.如果我只是在api中返回

  3. Dagger @ContributesAndroidInjector ComponentProcessor无法处理此接口

    我正在测试匕首的新功能:Android模块.当我使用@ContributesAndroidInjector时,我无法编译代码我总是得到以下错误:错误:(12,8)错误:dagger.internal.codegen.ComponentProcessor无法处理此接口,因为并非所有依赖项都可以解析.使用生成的代码检查编译错误或循环依赖性.我试图像here那样实现我的组件,但我仍然遇到了错误.这是最小

  4. Flask-Vue前后端分离的全过程讲解

    这篇文章主要介绍了Flask-Vue前后端分离的全过程,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  5. swagger中如何给请求添加header

    这篇文章主要介绍了swagger中如何给请求添加header,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  6. Python Flask框架开发之运用SocketIO实现WebSSH方法详解

    Socket.IO本是一个面向实时web应用的JavaScript库,现在已成为拥有众多语言支持的Web即时通讯应用的框架。这篇文章主要介绍了Python 运用SocketIO实现WebSSH方法

  7. Flask项目的部署的实现步骤

    本文主要介绍了Flask项目的部署的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. 解决Swagger修改请求对象字段文档不更新问题

    这篇文章主要为大家介绍了解决Swagger修改请求对象字段文档不更新的问题,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  9. Elasticsearches之python使用及Django与Flask集成示例

    这篇文章主要为大家介绍了Elasticsearches之python使用及Django与Flask集成示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

  10. Flask + MySQL如何实现用户注册,登录和登出的项目实践

    本文主要介绍了Flask + MySQL 如何实现用户注册,登录和登出的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

随机推荐

  1. 10 个Python中Pip的使用技巧分享

    众所周知,pip 可以安装、更新、卸载 Python 的第三方库,非常方便。本文小编为大家总结了Python中Pip的使用技巧,需要的可以参考一下

  2. python数学建模之三大模型与十大常用算法详情

    这篇文章主要介绍了python数学建模之三大模型与十大常用算法详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感想取得小伙伴可以参考一下

  3. Python爬取奶茶店数据分析哪家最好喝以及性价比

    这篇文章主要介绍了用Python告诉你奶茶哪家最好喝性价比最高,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧

  4. 使用pyinstaller打包.exe文件的详细教程

    PyInstaller是一个跨平台的Python应用打包工具,能够把 Python 脚本及其所在的 Python 解释器打包成可执行文件,下面这篇文章主要给大家介绍了关于使用pyinstaller打包.exe文件的相关资料,需要的朋友可以参考下

  5. 基于Python实现射击小游戏的制作

    这篇文章主要介绍了如何利用Python制作一个自己专属的第一人称射击小游戏,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起动手试一试

  6. Python list append方法之给列表追加元素

    这篇文章主要介绍了Python list append方法如何给列表追加元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  7. Pytest+Request+Allure+Jenkins实现接口自动化

    这篇文章介绍了Pytest+Request+Allure+Jenkins实现接口自动化的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  8. 利用python实现简单的情感分析实例教程

    商品评论挖掘、电影推荐、股市预测……情感分析大有用武之地,下面这篇文章主要给大家介绍了关于利用python实现简单的情感分析的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下

  9. 利用Python上传日志并监控告警的方法详解

    这篇文章将详细为大家介绍如何通过阿里云日志服务搭建一套通过Python上传日志、配置日志告警的监控服务,感兴趣的小伙伴可以了解一下

  10. Pycharm中运行程序在Python console中执行,不是直接Run问题

    这篇文章主要介绍了Pycharm中运行程序在Python console中执行,不是直接Run问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

返回
顶部