vue 根据swagger 生成接口_Vue 使用typescript如何优雅的调用swagger API

Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务,后端集成下Swagger,然后就可以提供一个在线文档地址给前端同学。

前端如何优雅的调用呢?

入门版

根据文档,用axios自动来调用

// 应用管理相关接口

import axios from '../interceptors.js'

// 获取应用列表

export const getList = (data) => {

return axios({

url: '/app/list?sort=createdDate,desc',

method: 'get',

params: data

})

}

这里的问题是,有多少个接口,你就要编写多少个函数,且数据结构需要查看文档获取。

进阶版本

使用typescript,编写API,通过Type定义数据结构,进行约束。

问题: 还是需要手写

优雅版本

swagger 其实是一个json-schema描述文档,我们可以基于此,自动生成。

很早之前,写过一个插件 generator-swagger-2-t, 简单的实现了将swagger生成typescript api。

今天,笔者对这个做了升级,方便支持后端返回的泛型数据结构。

安装

需要同时安装 Yeoman 和 -swagger-2-ts

npm install -g generator-swagger-2-ts

然后cd到你的工作目录,执行:

yo swagger-2-ts

按提示

可选生成js 或者 typescript

可以自定义生成的api class名称、api文件名

API 支持泛型

也可以通过命令行直接传递参数

yo swagger-2-ts --swaggerUrl=http://localhost:8080/swagger-ui.html --className=API --type=typescript --outputFile=api.ts

swaggerUrl: swagger ui url swaggerui地址

className: API class name 类名

type: typescript or javascipt

outputFile: api 文件保存路径

生成代码demo:

export type AccountUserInfo = {

disableTime?: string

isDisable?: number

lastLoginIp?: string

lastLoginPlace?: string

lastLoginTime?: string

openId?: string

}

export type BasePayloadResponse = {

data?: object

desc?: string

retcode?: string

}

/**

* User Account Controller

* @class UserAccountAPI

*/

export class UserAccountAPI {

/**

* changeUserState

* @method

* @name UserAccountAPI#changeUserState

* @param accountUserInfo - accountUserInfo

* @param $domain API域名,没有指定则使用构造函数指定的

*/

changeUserState(parameters: {

'accountUserInfo': AccountUserInfo,

$queryParameters?: any,

$domain?: string

}): Promise> {

let config: AxiosRequestConfig = {

baseURL: parameters.$domain || this.$defaultDomain,

url: '/userAccount/changeUserState',

method: 'PUT'

}

config.headers = {}

config.params = {}

config.headers[ 'Accept' ] = '*/*'

config.headers[ 'Content-Type' ] = 'application/json'

config.data = parameters.accountUserInfo

return axios.request(config)

}

_UserAccountAPI: UserAccountAPI = null;

/**

* 获取 User Account Controller API

* return @class UserAccountAPI

*/

getUserAccountAPI(): UserAccountAPI {

if (!this._UserAccountAPI) {

this._UserAccountAPI = new UserAccountAPI(this.$defaultDomain)

}

return this._UserAccountAPI

}

}

/**

* 管理系统接口描述

* @class API

*/

export class API {

/**

* API构造函数

* @param domain API域名

*/

constructor(domain?: string) {

this.$defaultDomain = domain || 'http://localhost:8080'

}

}

使用

import { API } from './http/api/manageApi'

// in main.ts

let api = new API("/api/")

api.getUserAccountAPI().changeUserState({

isDisable: 1

openId: 'open id'

})

Vue中最佳实践

main.ts 全局定义

import { API } from './http/api/manageApi'

Vue.prototype.$manageApi = new API('/api/')

增加.d.ts

增加types文件,方便使用智能提示

import { API } from '@/http/api/manageApi'

import { MarkAPI } from '@/http/api/mark-center-api'

declare module "vue/types/vue" {

interface Vue {

$manageApi: API

$markApi: MarkAPI

}

}

实际使用

现在可以在vue里直接调用了。

this.$manageApi

.getUserAccountAPI().changeUserState({isDisable: 1, openId: 'open id'})

开源地址

总结

到此这篇关于Vue 使用typescript如何优雅的调用swagger API的文章就介绍到这了,更多相关Vue 使用typescript内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

<div class="u-ctn-intro j-course-user-box" style="padding: 0px; margin: 0px 0px 40px; color: #444444; font-family: Arial, 'Hiragino Sans GB', 微软雅黑, Helvetica, sans-serif; font-size: 14px; background-color: #ffffff;"> <h2 class="u-ctit ctit1" style="padding: 0px 0px 10px; margin: 0px; font-weight: normal; height: 20px; font-size: 18px; line-height: 19px; max-width: 660px; color: #333333;">该互联网实战项目是基于 Spring Boot 2+ MybatisPlus+SpringSecurity5+Element UI+Vue+可视化等技术栈开发的项目,采用多模块前后端分离开发。包括图形展示、权限管理、用户管理等功能,用于研发企业级中后台产品。</h2> </div> <div class="u-ctn-intro u-ctn-intro-last" style="padding: 0px; margin: 0px 0px 20px; color: #444444; font-family: Arial, 'Hiragino Sans GB', 微软雅黑, Helvetica, sans-serif; font-size: 14px; background-color: #ffffff;"> <div class="cintrocon j-courseintro" style="padding: 0px; margin: 0px; line-height: 23px; font-family: 微软雅黑; word-wrap: break-word; color: #666666;"><br />【后端技术】<br />技术 说明<br />Spring Boot2 框架 开发的一站式解决方案<br />Spring Security5  认证和授权框架<br />MyBatisPlus3.3.x  基于 MyBatis 框架的快速研发框架<br />MyBatisCode工具 生成 MyBatis 相关代码<br />Jackson 提供了处理 JSON 数据的工具<br />Lombok 简化对象封装工具 <br />Druid   数据库连接池 <br /><br />【前端技术】<br />Vue        互联网最火的前端框架<br />Vue Router 路由框架<br />Vuex 全局状态管理框架<br />Axios 前端 HTTP 框架<br />Element UI 前端 UI 框架<br />D2-Admin 前端模板<br />D2-CRUD框架<br />D2-CRUD-PLUS框架<br /><br />Echarts 可视化技术<br />主要用于研发企业级中后台产品。<br />特性<br />提炼自企业级中后台产品的交互语言和视觉风格。<br />使用 TypeScript 开发,提供完整的类型定义文件。<br /> 链路开发和设计工具体系。<br /><br />【开发工具】<br />IntelliJ IDEA 开发 IDE<br />SQLyog 数据库连接客户端<br />Postman HTTP 请求工具<br /><br />【开发环境】<br />工具 版本<br />JDK 1.8<br />MySQL 5.7</div> </div>
表情包
插入表情
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符
相关推荐
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页