新闻详情

新闻详情

首页 / 资讯中心 / 详情

Swagger Codegen 生成 Dart 客户端全指南:以 Petstore 示例包讲解安装、调用与鉴权

发布时间:2026/10/31 1:39:23来源:尧图网络
Swagger Codegen 生成 Dart 客户端全指南:以 Petstore 示例包讲解安装、调用与鉴权
开发工具代码生成API设计【免费下载链接】swagger-codegenswagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.项目地址https://gitcode.com/gh_mirrors/sw/swagger-codegen点击查看免费下载本篇文章以 Swagger Codegen 仓库中自动生成的 Dart 客户端示例包samples/client/petstore/dart/swagger/README.md为核心完整讲解如何把生成的 Dart API 客户端引入项目、完成环境配置、调用 Petstore 示例接口并深入剖析底层DartClientCodegen生成器与ApiClient运行时的实现原理。读完本文你将掌握生成式 Dart 客户端的目录结构、pub 依赖接入方式、OAuth2 / API Key 两种鉴权配置以及源码级的方法调用链路。生成产物概览swagger Dart 客户端包该示例包是对 Petstore 示例服务Swagger 2.0 定义执行代码生成后的产物README 中明确记录了元信息API 版本1.0.0构建包Build packageio.swagger.codegen.languages.DartClientCodegen即此包由 Swagger Codegen 的 Dart 语言生成器产出对应的实现类位于 DartClientCodegen.java。从生成的目录结构samples/client/petstore/dart/swagger可以看到标准的 Dart 包组织方式lib/api.dart库入口文件通过 Dart 的part/part of机制聚合全部代码lib/api/按业务域划分的 API 类pet_api.dart、store_api.dart、user_api.dartlib/model/数据模型类Pet、Order、User、Category、Tag等 8 个模型lib/auth/鉴权实现api_key_auth.dart、oauth.dart、http_basic_auth.dart、authentication.dartlib/api_client.dart核心 HTTP 客户端封装pubspec.yaml包描述与依赖声明docs/自动生成的 API 与模型 Markdown 文档。环境要求Requirements官方 README 明确要求如下运行环境二者满足其一即可Dart 1.20.0 或更高版本或 Flutter 0.0.20 或更高版本。生成的pubspec.yaml见 pubspec.yaml对 HTTP 依赖做了版本约束name: swagger version: 1.0.0 description: Swagger API client dependencies: http: 0.11.1 0.12.0这里的name、version、description均可在生成时通过 CLI 参数定制详见下文“生成器 CLI 参数”小节http包是底层请求库约束为 0.11.x 系列。安装与引入Installation UsageREADME 给出了两种接入方式均通过编辑目标项目的pubspec.yaml完成。方式一通过 Git 仓库引入如果该 Dart 包已发布到 Git 仓库在pubspec.yaml中添加如下内容name: swagger version: 1.0.0 description: Swagger API client dependencies: swagger: git: https://github.com/GIT_USER_ID/GIT_REPO_ID.git version: any注意GIT_USER_ID与GIT_REPO_ID为发布时的占位符实际使用时需替换为真实的仓库地址。方式二通过本地路径引入在本地开发或尚未发布时可直接引用本机路径dependencies: swagger: path: /path/to/swagger将/path/to/swagger替换为生成包所在的实际目录即可。快速开始调用第一个 APIREADME 的 “Getting Started” 章节给出了最简调用示例核心步骤如下import package:swagger/api.dart; // TODO Configure OAuth2 access token for authorization: petstore_auth //swagger.api.Configuration.accessToken YOUR_ACCESS_TOKEN; var api_instance new PetApi(); var body new Pet(); // Pet | Pet object that needs to be added to the store try { api_instance.addPet(body); } catch (e) { print(Exception when calling PetApi-addPet: $e\n); }入口导入统一使用package:swagger/api.dartPetApi构造时不传参默认复用全局defaultApiClient该对象定义于 lib/api.dart代码为ApiClient defaultApiClient new ApiClient();调用方法为异步Future返回数据与 HTTP 状态码大于等于 400 的异常均由调用方处理。方法级调用细节以findPetsByStatus为例pet_api.dart 中可以看到生成方法的标准模式FutureListPet findPetsByStatus(ListString status) async { Object postBody null; // verify required params are set if(status null) { throw new ApiException(400, Missing required param: status); } String path /pet/findByStatus.replaceAll({format},json); ListQueryParam queryParams []; ... queryParams.addAll(_convertParametersForCollectionFormat(csv, status, status)); ... var response await apiClient.invokeAPI(path, GET, queryParams, postBody, headerParams, formParams, contentType, authNames); if(response.statusCode 400) { throw new ApiException(response.statusCode, response.body); } else if(response.body ! null) { return (apiClient.deserialize(response.body, ListPet) as List).map((item) item as Pet).toList(); } else { return null; } }可以总结出生成代码的统一行为必填参数为空时抛出ApiException(400, Missing required param: xxx)路径模板中的{petId}等占位符被替换为实际值{format}默认替换为json集合参数通过_convertParametersForCollectionFormat按csv等 collectionFormat 拼装为查询参数所有请求统一走ApiClient.invokeAPI响应statusCode 400一律抛异常否则由apiClient.deserialize反序列化为强类型模型。API Endpoints 一览所有 URI 均相对于基础地址http://petstore.swagger.io/v2该地址在 api_client.dart 中以ApiClient({this.basePath: http://petstore.swagger.io/v2})作为默认值也可在构造时覆盖。三个 API 类共 20 个方法如下PetApidocs/PetApi.md方法HTTP 请求描述addPet(body)POST/pet新增宠物deletePet(petId, [apiKey])DELETE/pet/{petId}删除宠物findPetsByStatus(status)GET/pet/findByStatus按状态查询宠物findPetsByTags(tags)GET/pet/findByTags按标签查询宠物getPetById(petId)GET/pet/{petId}按 ID 查找宠物updatePet(body)PUT/pet更新已有宠物updatePetWithForm(petId, [name], [status])POST/pet/{petId}表单更新宠物uploadFile(petId, [additionalMetadata], [file])POST/pet/{petId}/uploadImage上传图片StoreApidocs/StoreApi.md方法HTTP 请求描述deleteOrder(orderId)DELETE/store/order/{orderId}按 ID 删除订单getInventory()GET/store/inventory返回库存getOrderById(orderId)GET/store/order/{orderId}按 ID 查询订单placeOrder(body)POST/store/order下单UserApidocs/UserApi.md方法HTTP 请求描述createUser(body)POST/user创建用户createUsersWithArrayInput(body)POST/user/createWithArray用数组批量创建用户createUsersWithListInput(body)POST/user/createWithList用列表批量创建用户deleteUser(username)DELETE/user/{username}删除用户getUserByName(username)GET/user/{username}按用户名查询用户loginUser(username, password)GET/user/login用户登录logoutUser()GET/user/logout用户登出updateUser(username, body)PUT/user/{username}更新用户数据模型Documentation For Models生成包共包含 8 个模型类各自的属性与约束说明见docs/下的对应文档AmountApiResponseCategoryCurrencyOrderPetTagUser以 Pet 为例模型文档记录了每个字段的 Dart 类型、必填性与默认值属性类型说明备注idint[optional]categoryCategory[optional]nameString必填photoUrlsListString默认[]tagsListTag[optional] 默认[]statusStringpet status in the store[optional]模型类位于 lib/model每个类都实现了fromJson/toJson由ApiClient的反序列化分发机制调用。鉴权方式Documentation For AuthorizationREADME 记录了 Petstore 示例服务声明的两种安全方案生成代码在 lib/auth 中分别实现。api_keyAPI Key 鉴权类型API key参数名api_key位置HTTP header对应实现类ApiKeyAuthapi_key_auth.dart当设置了apiKey后会在请求头中写入api_key头若同时设置了apiKeyPrefix则拼接为$apiKeyPrefix $apiKey例如Bearer xxx。在 Petstore 示例中getPetById使用此鉴权README 注释提示使用测试 keyspecial-key即可通过鉴权过滤。petstore_authOAuth2 隐式授权类型OAuthFlowimplicit隐式Authorization URLhttp://petstore.swagger.io/api/oauth/dialogScopeswrite:petsmodify pets in your account修改账户内的宠物read:petsread your pets读取你的宠物对应实现类OAuthoauth.dart持有accessToken在applyToParams中向请求头写入Authorization: Bearer token通过setAccessToken更新 token。多数写操作addPet、updatePet、uploadFile等都声明需要petstore_auth授权。鉴权在运行时如何生效api_client.dart 的构造函数按名称注册鉴权器ApiClient({this.basePath: http://petstore.swagger.io/v2}) { _authentications[api_key] new ApiKeyAuth(header, api_key); _authentications[petstore_auth] new OAuth(); }每次请求前invokeAPI先调用_updateParamsForAuth(authNames, queryParams, headerParams)根据方法声明的authNames列表找到对应鉴权器并执行applyToParams。若引用未注册的鉴权名会抛出ArgumentError(Authentication undefined: ...)。此外setAccessToken会遍历所有注册的鉴权器统一为OAuth类型设置 token方便在运行时切换凭据。源码视角客户端是如何生成的生成器 CLI 参数DartClientCodegen.java 定义了dart生成器可通过 CLI 的-D或配置传入以下选项CLI 选项说明默认值browserClient是否为浏览器端客户端truepubName生成pubspec.yaml中的包名swaggerpubVersion生成pubspec.yaml中的版本号1.0.0pubDescription生成pubspec.yaml中的描述Swagger API clientuseEnumExtension是否允许使用x-enum-values扩展定义枚举falsesourceFolder生成代码的源目录空即包根目录生成器还会将apiDocPath、modelDocPath暴露给 Mustache 模板默认均为docs/README、pubspec.yaml、api_client.dart、各鉴权文件等均由supportingFiles中的模板渲染产出。当前示例包的pubspec.yaml名称/版本/描述与生成器默认值完全一致可验证上述默认参数的实际效果。类型映射生成器内置了 Swagger 类型到 Dart 类型的映射表示例包括Swagger 类型Dart 类型booleanboolstring/charStringinteger/int/long/shortintnumbernumfloat/doubledoublearray/ListListmapMapdate/DateDateTimeFileMultipartFilebinary/ByteArrayString作为临时方案集合与映射在getTypeDeclaration中被递归包装为ListT/MapString, T这与 api_client.dart 中_deserialize用正则^List(.*)$、^MapString,(.*)$解析目标类型并递归反序列化的逻辑一一对应。命名与编码规则属性名、参数名统一驼峰化pet_id→petId数字开头加n前缀命中 Dart 保留字时追加下划线转义escapeReservedWord方法名operationId同样驼峰化保留字加call_前缀模型名camelize首字母大写保留字加model_前缀例如return→ModelReturn文件名转下划线命名。请求生命周期一次 HTTP 调用的完整链路结合 api_client.dart 的invokeAPI与各 API 方法一次调用的完整链路为调用方创建 API 实例默认复用defaultApiClientAPI 方法校验必填参数替换路径占位符按 collectionFormat 组装查询参数并声明contentTypes与authNamesinvokeAPI依据authNames应用鉴权写入 header 或 query拼接basePath path queryString合并默认头与Content-Type根据contentType分流multipart/form-data走MultipartRequest如uploadFileapplication/x-www-form-urlencoded使用formParams如updatePetWithForm其余情况将 body 序列化为 JSON按 HTTP 方法分发到post/put/delete/patch/get响应码 400抛ApiException否则按声明的返回类型如Pet、ListPet反序列化后返回。作者信息示例服务与生成包的维护联系邮箱为apiteamswagger.io相关贡献与使用约定可参考仓库根目录的 README.md 与 CONTRIBUTING.md。小结本文以 Swagger Codegen 仓库中的 Dart Petstore 示例包为线索串联了“生成产物结构 → 环境与依赖配置 → 示例调用 → API/模型/鉴权清单 → 生成器与运行时源码实现”的完整链路。对开发者而言可直接复用文中的 pubspec 接入方式与调用模板对希望二次定制生成器的工程师而言DartClientCodegen.java 的 CLI 参数、类型映射与模板装配逻辑是最佳切入点。赞分享开发工具代码生成API设计【免费下载链接】swagger-codegenswagger-codegen contains a template-driven engine to generate documentation, API clients and server stubs in different languages by parsing your OpenAPI / Swagger definition.项目地址https://gitcode.com/gh_mirrors/sw/swagger-codegen点击查看免费下载相关推荐Swagger Codegen 生成 Dart / Flutter 客户端实战以 swagger-codegen Petstore 包为例的安装、认证与 API 调用指南Swagger Codegen 生成 Dart / Flutter 客户端实战以 swagger codegen Petstore 包为例的安装、认证与 AP开发工具代码生成API设计使用 Swagger Codegen 生成 Dart Jaguar 客户端Petstore 示例包完整解读使用 Swagger Codegen 生成 Dart Jaguar 客户端Petstore 示例包完整解读 本文以 Swagger Codegen 仓库中 s开发工具代码生成API设计Swagger Codegen 生成 Dart Flutter PetApi 客户端使用完全指南以 Petstore 为例Swagger Codegen 生成 Dart Flutter PetApi 客户端使用完全指南以 Petstore 为例 本文档是 Swagger Code开发工具代码生成API设计创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/10/30 4:02:09

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/10/29 23:30:48

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/10/30 14:30:55

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/10/31 1:29:13

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/10/29 13:36:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/10/30 5:26:05

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉