Help us understand the problem. What is going on with this article?

【Udemy】gRPC [Golang] Master Class: Build Modern API & Microservicesをやってみた

More than 1 year has passed since last update.

はじめに

  • 年末にUdemyのコースがセールになってまして、Go言語使っててHTTP/2やmicroserviceが学べるコースがないかなと探してたらこれが見つかり買ってみました。
    gRPC [Golang] Master Class: Build Modern API & Microservices
  • でもすぐにやらなくて積んdemyなってました。。。
  • なので【Qiita×Udemy特別企画】学習応援イベントがやってたので試しにのっかってみました。

コース概要

の前に

英語

このコースは中身をみればわかると思いますが、全部英語です。
ですが大して難しい英語を使ってるわけでもありませんし、プログラミングですからソースコード見て理解すればいいので英語がハードルになることはそんなに無いかと思います。
自分はまあまあ英語が得意なんで苦手な方はいくらか差し引いて考えた方がいいかも。

概要

ざっとこんな感じでした。

  • gRPC オーバービュー
  • gRPC 詳細
  • gRPC の各種実装パターン
    • Unary
    • Server Streaming
    • Client Streaming
    • Bi-Directional Streaming
  • その他機能の実装
    • エラー実装
    • デッドライン
    • SSLセキュリティ
    • 別言語からの通信(Java)
    • gRPC のEvans クライアントの使い方
  • 実践的なアプリを作ってみる
  • MongoDBと連携してCRUD APIを実装
  • おまけ(クーポンとか)

gRPC の各種実装パターンでそれぞれUnary、Server Streaming、Client Streaming、Bi-Directional Streamingを説明していて、そこについてのプログラミング解説が主な内容でした。

やったこと

ひたすら写経!Webページを作った時のように見栄えの良いものを作るわけでもないので、かっこいいアウトプットはありません。
リポジトリを載せておきます。
https://github.com/suganoo/go-grpc-course

gRPC のサーバーを起動して、クライアントを実行してみるのをひたすらやってました。

学んだこと

ざっくり各種パターン

Unaryパターン

単純にリクエストを投げて、レスポンスを受けるというパターンです。(1:1)
REST APIみたいなものでした。ex. 2つの数字を送ったら合計値が返される。

Server Streaming

1回リクエストを投げて、複数のレスポンスを受けるパターンです。(1:n)
ex. ある数値を送ったら素数がすべて返ってくる。

Client Streaming

複数回リクエストを投げたら、1回のレスポンスを受けるパターンです。(n:1)
ex. 複数個の数値を送ったら、平均値が返される。

Bi-Directional Streaming

相互に複数回通信するパターンです。(n:n)
ex. 複数個の数値を用意しておき、順次1コづつ数値を送ると、それまでに受けた数値の最大値を更新した時に最大値を返す。

Calculator

上で例として書いてますが、平均値を返したり、最大値を返したりするアプリを作ってみました。なるほどという感じです。

MongoDBと連携してアプリ

ブログを作ったと想定して、MongoDBにデータを入れこみCRUDを実装しました。MongoDBは実際使うのは初めてで、これはなかなかMongoDBも含めて勉強になりました。便利だねー

Evans CLI

gRPCのサーバーに対してのクライアントアプリです。最後にちょろっと出てきてこいつは便利だなー!と思いました。でもDLしてビルドしたところなぜか接続できず残念でした。。。
https://github.com/ktr0731/evans

別言語からの通信(Java)

これは動画からしか見てませんが、他の言語からちゃんと通信できてて便利でした。

MongoDBのドライバ設定はちょっと注意

バージョンが違うのかimportの定義の仕方は下記のような書き方でないとエラーになってました。

"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"

時間があればやりたかったこと

Udemy特別企画の締め切りを目標にしてて、さらに始めるのが2月半ばを過ぎてからだったので、コースを終わらすことしかできませんでした。
コーディングしてるといろいろとやってみたいことが出てきたので、それが今後の宿題かなと思います。

  • HTTP/2通信としてはどうなってるのか。 サーバーはnet.Listen(...)で始めてるし、クライアントはgrpc.Dial(...)で始めてたのでヘッダーとかどうなってるのか。
  • protoc で生成されるGoのソースを見てみる。
  • TLS通信の仕方。各種サーティフィケーションファイルはコマンドコピペだったのでちゃんと復習したい。
  • gRPC 使ってチャットアプリ作ってみたいですね。

最後

やっぱこういう企画がないとやらないですね(汗)。
ですが今回を気にgRPCが学べたのでとてもよかったです。
またUdemyは年末年始になるとセールになるのでお得です。
Udemyだと新しい技術が出てきたときに英語版であればいち早くコースが出てくるのでチェックしてみるといいかと思います。

ザーッとやってしまったとはいえ修了証明書が最後にでるとうれしいものですね。

suganoooo
インフラエンジニア、Hadoopとかやってます。Go言語が好き。
http://blog.suganoo.net/
ritsuan
自信があるからマージン率公開。全てをオープンにし知りたい情報を全て公開。 公開だからこそ、エンジニアへの給与水準No1の【リツアンSTC】 全国対応で機電、ITソフトウェア、通信のエンジニアの新しい価値観での働き方をリツアン。 エンジニア派遣、委託、派遣会社、人材派遣の事ならリツアンSTCへ。さよならマージン。
https://ritsuan.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away