xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

gRPC / MagicOnion 入門 (3) - プロジェクト構造と実装の前準備

今回は MagicOnion を使った API 開発を行うまでの前準備にフォーカスを当てます。主に Console / WinForms / WPF アプリなど向けです。MagicOnion は Unity にも対応していますが、これはだいぶ大変でややこしいので別途解説することにします。

基本的なプロジェクト構造

MagicOnion は基本的に以下のようなプロジェクト構成をとります。

プロジェクト 役割と解説
ServiceDefinition API 定義のみ
サーバー / クライアントの両方から参照される
Service サーバー側
ServiceDefinition で定義されたインターフェースを実装
Client クライアント側
ServiceDefinition で定義されたインターフェースを通してサーバー側の API を呼び出す

f:id:xin9le:20170604184611p:plain

通常の gRPC は Protocol Buffers の IDL を用いたサービス定義を行いますが、MagicOnion は IDL が不要*1です。その代わりにサービス定義をサーバーとクライアントで共有する必要があるため、サービス定義部分だけ別プロジェクトとして分離する必要があります。

NuGet Package の取得

MagicOnion は NuGet で配布されており、以下のコマンドで取得できます。

PM> Install-Package MagicOnion

このパッケージを前節で挙げたすべてのプロジェクトの参照設定に追加する必要があります。gRPC や MessagePack for C# などの MagicOnion 自体が利用するものは、MagicOnion をインストールする際に同時に取得されるので個別での対応は不要です。

*1:C# コード自体を IDL として利用し、実行時に動的解決する