首页 > 其他分享 >基于Kiota生成API客户端

基于Kiota生成API客户端

时间:2023-11-18 15:46:41浏览次数:37  
标签:HTTP 语言 代码 生成 API Kiota 客户端

      Kiota是一个命令行工具,用于生成API客户端,以调用您感兴趣的任何OpenAPI描述的API。目标是消除您需要调用的每个API对不同的API SDK的依赖。Kiota API客户端提供了高质量API SDK提供的所有功能的强类型体验,但无需为每个HTTP API学习新类库。

image

功能特点

支持多种语言:C#、CLI、Go、Java、PHP、Python、Ruby、Swift和TypeScript
充分利用OpenAPI描述的全部功能
能够轻松实现新的语言支持
仅通过构建核心库生成所需的源代码
最大限度地减少外部依赖性
利用JSON Schema描述生成基于原语的模型序列化/反序列化代码
仅支持为 OpenAPI 描述的指定子集生成代码
生成启用IDE自动完成的代码,以帮助发现API资源
允许完全访问 HTTP 功能

image

image

代码模型

大多数SDK生成器工作都使用DOM的API描述和模板的组合来创建源代码。模板有几个缺点:

语言之间的语法差异会导致语言之间的语义重复。这会导致模板中存在大量冗余。
在有条件地生成源代码时需要少量的逻辑,这会在模板中引入复杂的语法,这些语法很难测试、调试和维护。
由于语言模板是独立的,不同语言的行为和能力很容易出现分歧。如果你试图在各种语言之间提供一致的功能支持,这可能会带来问题。
Kiota采用不同的方法进行代码生成。分析OpenAPI PathItems并创建相应的语言无关代码模型。此代码模型依赖于所有最新主流语言中可用的标准面向对象功能。

为 Kiota 构建的代码模型旨在支持在核心 HTTP 库上创建薄“打字”层所需的功能。它不是为任何任意代码提供全面的代码模型。使用通用代码模型的方法是可行的,因为我们的目标是现代面向对象语言,并将场景限制在发出 HTTP 请求的场景中。

Kiota的抽象

       生成的源代码并不直接包含发起HTTP请求的逻辑。它需要与一个核心库连接,由该核心库来发起HTTP请求。Kiota.Core库将提供基本的HTTP功能,但API所有者可以选择为自己的API优化提供自己的核心库。核心库依赖于某种语言的Kiota抽象库,并提供向API发起HTTP调用的服务。这样,Kiota.Core库为API请求提供了统一的接口,而具体的HTTP请求实现可以由各语言的核心库自定义实现,从而达到了灵活性与通用性的平衡。

image


Docker运行

docker run -v /some/output/path:/app/output \
-v /some/input/description.yml:/app/openapi.yml \
mcr.microsoft.com/openapi/kiota generate --language csharp -n namespace-prefix

可以使用--openapi参数搭配URI,而非使用卷映射(volume mapping)来生成SDK。

如果想要从在线的OpenAPI描述生成SDK并保存到当前目录,可以使用如下命令:

docker run -v ${PWD}:/app/output mcr.microsoft.com/openapi/kiota \
generate --language typescript -n gfx -d \
https://raw.githubusercontent.com/microsoftgraph/msgraph-sdk-powershell/dev/openApiDocs/v1.0/Mail.yml

还有命令行CLI, 从源码编译等方式,详细参考官网

Tips:

1. 另一点儿需要注意是JAVA是基于JDK17版本,更多希望大家去尝试。

2. Kiota生成客户端代码实际也可以用于自动化测试基础框架。


今天先到这儿,希望对云原生,技术领导力, 企业管理,系统架构设计与评估,团队管理, 项目管理, 产品管管,团队建设 有参考作用 , 您可能感兴趣的文章:
领导人怎样带领好团队
构建创业公司突击小团队
国际化环境下系统架构演化
微服务架构设计
视频直播平台的系统架构演化
微服务与Docker介绍
Docker与CI持续集成/CD
互联网电商购物车架构演变案例
互联网业务场景下消息队列架构
互联网高效研发团队管理演进之一
消息系统架构设计演进
互联网电商搜索架构演化之一
企业信息化与软件工程的迷思
企业项目化管理介绍
软件项目成功之要素
人际沟通风格介绍一
精益IT组织与分享式领导
学习型组织与企业
企业创新文化与等级观念
组织目标与个人目标
初创公司人才招聘与管理
人才公司环境与企业文化
企业文化、团队文化与知识共享
高效能的团队建设
项目管理沟通计划
构建高效的研发与自动化运维
某大型电商云平台实践
互联网数据库架构设计思路
IT基础架构规划方案一(网络系统规划)
餐饮行业解决方案之客户分析流程
餐饮行业解决方案之采购战略制定与实施流程
餐饮行业解决方案之业务设计流程
供应链需求调研CheckList
企业应用之性能实时度量系统演变

如有想了解更多软件设计与架构, 系统IT,企业信息化, 团队管理 资讯,请关注我的微信订阅号:

MegadotnetMicroMsg_thumb1_thumb1_thu[2]

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 该文章也同时发布在我的独立博客中-Petter Liu Blog。

标签:HTTP,语言,代码,生成,API,Kiota,客户端
From: https://www.cnblogs.com/wintersun/p/17840605.html

相关文章

  • /usr/bin/perl: symbol lookup error: Devel/Size/Size.so: undefined symbol: Perl_
     001、perl报错如下:/usr/bin/perl:symbollookuperror: Devel/Size/Size.so:undefinedsymbol:Perl_xs_apiversion_bootcheck 002、 ......
  • Java集合类API详解​(上)单列集合Set类
    Java集合类API详解单列集合一次添加一个数据的集合。它们的根接口是Collection,具体体系如图:List系列集合的特点:添加的元素是有序、可重复、有索引的。也即存和取的顺序是一致的;包含的元素是可以有重复的;包含的元素是有索引的,可以通过索引对元素进行操作。Set系列集合的特点:添加的元......
  • Java集合类API详解​(下)双列集合Map类
    Java集合类API详解双列集合双列集合的概念,也即一次添加一对数据的集合。双列集合的特点:①双列集合一次需要存一对数据,分别为键和值②键不能重复,值可以重复③键和值是一一对应的,每一个键只能找到自己对应的值④键+值这个整体我们称之为“键值对”或者“键值对对象”,在Java中叫做“E......
  • 免费!IDEA插件推荐:Apipost-Helper
    今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,写完代码IDEA内一键生成API文档,无需安装、打开任何其他软件;写完代码IDEA内一键调试,无需安装、打开任何其他软件;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费!在IDEA编辑器插件中心输入Apipost搜索安装:Apipost-......
  • 免费!IDEA插件推荐:Apipost-Helper
    今天给大家推荐一款IDEA插件:Apipost-Helper-2.0,写完代码IDEA内一键生成API文档,无需安装、打开任何其他软件;写完代码IDEA内一键调试,无需安装、打开任何其他软件;生成API目录树,双击即可快速定位API定义的代码…非常好用!而且完全免费!在IDEA编辑器插件中心输入Apipost搜索安装:Apipost......
  • JSON 格式的接口测试流程【Eolink Apikit】
    在进行JSON格式的接口测试时,需要使用工具发送HTTP请求并获取响应。测试工具可以是单独的测试框架,如EolinkApikit。测试人员需要根据接口文档和测试用例编写测试脚本,然后运行测试并分析结果,以确保接口的质量和稳定性。当我们后端需要从前端拿到这些JSON数据,我们应该如何测试自己......
  • beego:将服务器上的图片显示到客户端浏览器
    来源:http://www.shanhubei.com/archives/2840.html将服务器上的图片显示到客户端浏览器//@Title//@Description显示图片//@Paramnumquerystringtrue比如:图片名字20181120164548_75_jd.jpg//@Success200//@router/ShowImage[get]func(u......
  • Core 6.0 webapi ‘报错InvalidOperationException:无法解析“ Microsoft.AspNetCore.H
    因接口版本升级并使用core6.0却发现HttpContext.Current.Request用不了 所以在网上找了半天说是使用Microsoft.AspNetCore.Http.IHttpContextAccessorprivateIHttpContextAccessor_httpContextAccessor;publicWebHelper(IHttpContextAccessorhttpContextAccessor......
  • mediapipe包实现简单的手势识别
    前言  一开始我还是java和c++的忠实用户,对python多少有点轻视,但很快就发现我错了,python没有java和c++那样严格的各种语法和格式要求,可以说是非常简易的。而且python有着大量的第三方库,可以轻轻松松用十几行代码实现各种各样的功能,代码写起来还是比c++和java轻松许多的。最近也......
  • How To Delete Reservations Using Standard API INV_RESERVATION_PUB.Delete_Reserva
    SolutionSummary:ThereservationAPIINV_RESERVATION_PUB.Delete_Reservationwilldeletereservationsacceptingthereservationidandoptionallyserialnumberstolocateandremovereservations.Careshouldbetakentoensurerelatedobjectslikesaleso......