时间:2021-05-26
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按提示
也可以通过命令行直接传递参数
yo swagger-2-ts --swaggerUrl=http://localhost:8080/swagger-ui.html --className=API --type=typescript --outputFile=api.ts生成代码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<AxiosResponse<BasePayloadResponse>> { 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.tslet 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'})开源地址
https://github.com/jadepeng/generator-swagger-2-ts
总结
到此这篇关于Vue 使用typescript如何优雅的调用swagger API的文章就介绍到这了,更多相关Vue 使用typescript内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
swagger是一个功能强大的在线API文档的框架,提供了优雅的API在线文档的查阅和测试功能。利用swagger2可以很方便的构建RESTful风格的API文
此功能基于vue(v2.6.8)+typescript(v3.3.3333),引入极验(geetestv3+)(官方api),使用其product:'bind'
Vue.extendorvue-class-component使用TypeScript写Vue组件时,有两种推荐形式:Vue.extend():使用基础Vue构
使用最新的VueCLI@vue/cli创建typescript项目,使用vue-V查看当前的vuecli版本安装命令npminstall-g@vue-cli创建
网上有很多《使用swagger2构建API文档》的文章,该文档是一个在线文档,需要使用HTTP访问。但是在我们日常使用swagger接口文档的时候,有的时候需要