Swagger+AutoRest

Swagger+AutoRest 生成web api客户端(.Net)

 
对于.net来讲,用web api来构建服务是一个不错的选择,都是http请求,调用简单,可是若是真的要在程序中调用,则还有些工做要作,好比咱们须要手写httpClient调用,并映射Model, 若是服务少还能够,多了就繁琐了。
关于Swagger的信息,其余博客已经有介绍,这里就很少说。 你们能够参考 http://chuansong.me/n/322685748559 ,使用Swagger后,能够解决服务没有文档或者文档和服务不一样步的问题,同时Swagger自带的就有模拟请求的功能,因此能够在页面上直接测试接口。 这些不只对开发,对测试同窗也是友好的。 
下面是一个简单的Web API,添加注释
 
引用swagger后,访问http://XXX/swagger/ui/index(XXX为你的域名),结果以下,能够看到页面上会显示你的服务,以及服务的描述。
 
 点击具体某个服务,你能够看到你定义的参数,并能够直接在页面上发起测试。 
有了Swagger后,方便查看服务,接下来就是如何调用服务,过往咱们一般会写一个HttpUtils的类,里面包含SendGet,SendPost两个方法,若是是简单参数还好,可是若是Get请求返回一个对象,或者Post的时候须要发送一个对象,则须要手写这些类进行封装。 这里介绍一个组件:AutoRest ( https://github.com/Azure/AutoRest), 简单来讲,就是一个EXE工具,能够根据Swagger的结构生成服务的客户端,这个客户端可让你像调用本地方法同样调用服务,方法内部包装了Http请求。 
在Swagger页面,你能够点击Explore按钮,经过浏览器能够看到这里返回了一个Json字符串,页面也是根据这个字符串进行的渲染,AutoRest也是根据这个结构来生成调用类。
 
选择Nuget,下载AutoRest
在solution下面找到pageage文件夹,目录以下:
在命令行里面打开 ,输入以下 AutoRest.exe -CodeGenerator CSharp -Modeler Swagger -Input http://XXX/swagger/docs/v1 -Namespace UserServiceClient, 其中Input的参数就是Swagger的Json地址,具体参数含义能够查看文档。 
执行成功后,在当前目录下会生成一个Generated目录
打开文件以下:
新建一个控制台程序,将整个文件夹copy到控制台程序下,文件夹名称能够随意定义。
 
 
 同时控制台程序须要在Nuget中引用一个Client. 
写代码,调用,同时支持同步接口和异步接口。 
至此,所有完成。 
1. 以上这种方式,能够由服务端的同窗完成,而后将生成的代码,简单修改后,编译发布到公司内nuget上,其余同窗能够直接到公司内nuget下载
2. 服务端同窗能够只集成Swagger,而后其余同窗若是要用,能够经过工具生成。 
3. 以上仅是公司再未使用RPC前,方便服务调用的一种方式。 后面我会介绍一些.Net下的其余的服务调用方式,好比Hession,serverstack
 
分类:  服务调用