OpenAPIをUnityで使う
#Unity #OpenAPI_Generator
code:sh
java -jar openapi-generator-cli.jar generate \
-i OpanAPI.yaml \
-g csharp-netcore --library httpclient \
-c config.json \
-o dist
Unity向け出力について
https://github.com/OpenAPITools/openapi-generator/issues/853
https://github.com/OpenAPITools/openapi-generator/pull/8821
デフォルトだと通信にRestSharpを使用しているらしく、Unityでは使えない
System.Net.Httpが提供するHttpClientを利用するバージョンが用意された。
この機能は、Stableである5.4.1には搭載されていないので、最新版の6.0.0を利用する必要がある
6.0.0の一番古い提供が2021/10/25版なので6.0.0なら何でもよい(追加機能のマージは2021/02/25)
config.jsonについて
https://tech.drecom.co.jp/ac2020-swagger-kakeru-unity/
上記に基づいて、validatable, packageGuidを設定する
ついでに、targetFrameworkをUnityの設定と揃える
外部依存にPollyを要求されてしまうので、supportsRetryをfalseにする
code:config.json
{
"validatable": false,
"targetFramework": "netstandard2.0",
"packageGuid": "...",
"supportsRetry": false
}
OpenAPIのコードジェネレータが、大きく次の二つに依存
HttpClient(System.Web)
Newtonsoft.Json
HttpClient
.netのバージョン(API Compatibility Level)を".netstandard 2.0"にしていれば使える
Net4.xの場合、ランタイムにDLLが同梱されないので、コンパイラに指示する必要がある
https://qiita.com/ruccho_vector/items/406eef15557f1a3f0f93#落とし穴-systemnethttp
コンパイラへの指示の出し方(mcs.rsp, csc.rsp)についてはこっち
指定したらプロジェクトファイル(.slnなど)を再生成しよう
ランタイムをMonoにしてると、Androidで動作しないっぽい?(とはいえ性能的にもIL2CPP一択ではある)
Newtonsoft.Json
NuGetにあるやつはAndroidで使えない
使えるようにしたものを有志が開発( https://github.com/jilleJr/Newtonsoft.Json-for-Unity )
Unityが内部でこれを利用していて、forkしたものが存在するので、こっち使った方が良いとのこと( https://qiita.com/sakano/items/6fa16af5ceab2617fc0f )
UPMから入れただけだと、ソリューションファイルが更新されなくてVSCode側でインテリセンスが効かないので、Preferenesから、プロジェクトファイルを再生成するとよい