一般后端提供来的接口文档有些是Swagger, 有些低代码的平台会直接提供Postman, 我们要快速导入Unity的话有很多方法, 如果是普通开发环境的话, 直接导出就行:
可以直接得到C#代码, 不过有一些依赖, 比如 RestSharp, Newtonsoft.Json 之类的, 比如一个这样的接口:
生成的代码接口主要内容如下 :
1. 异步接口
2. 数据结构
它这里为了转换安全耍了个小聪明, int类型生成了可空, 估计所有值类型都会是可空的. 并且在函数的输入自动判断了是否可空, 在函数实现的时候也进行了非空判断, 比如上面的type是(*required)标记的, 它的变量输入为 int? 可空的, 而函数实现是下面这样的:
跟接口需求符合. 没有特别需求的话, 直接就能用了, 只需要添加依赖库到Unity就行了.
我们现在用的UniRx也是可以跟它联动的, 比如这样:
public System.IAsyncResult BeginXXX(object obj) { Debug.LogError("Start"); return Task.Run(async () => { var rateLimit = Task.Delay(System.TimeSpan.FromSeconds(3)); await rateLimit; }); }
把一个 async 过程调用为 IAsyncResult 返回, 就能解决跟 UniRx 的联动了:
Observable.FromAsyncPattern((_, __) => { return BeginXXX(_); }, (_end) => { Debug.LogError("END"); })().Subscribe();
不过这里试了一下, 貌似没有执行到end回调, 先忽略.
我们这里现在的做法是先把接口导出到Postman里面, 然后再根据Postman来生成代码的, 过程如下:
转换成比较合适的Format, 然后Import到postman里面去:
然后通过递归来获取指定结构, 在postman里面的注释中有Swagger的一些信息, 比如枚举之类的:
也能通过判断生成:
这里直接整合了UniRx, DataTable, LitJson的逻辑.