#author("2023-03-13T14:48:30+00:00","default:admin","admin") #author("2023-04-06T10:55:36+00:00","default:admin","admin") [[gRPC:https://grpc.io/]] -[[REST、gRPC、および GraphQL を使い分ける (パート 1):https://www.xlsoft.com/jp/blog/blog/2022/05/25/post-29393/]] -[[REST、gRPC、および GraphQL を使い分ける (パート 2):https://www.xlsoft.com/jp/blog/blog/2022/06/02/post-29512/]] -[[作ってわかる! はじめてのgRPC:https://future-architect.github.io/articles/20220623a/]] -[[作ってわかる! はじめてのgRPC:https://zenn.dev/hsaki/books/golang-grpc-starting]] -[[gRPCのGo実装の新星、Connect:https://future-architect.github.io/articles/20220623a/]] -[[今流行りのgRPCを簡単にまとめてみた(Goのサンプルコード付き):https://zenn.dev/skytrilingineer/articles/c7d989183d49de]] -[[gRPC 完全に理解した:https://trap.jp/post/1472/]] -[[サービス間通信のための新技術「gRPC」入門:https://knowledge.sakura.ad.jp/24059/]] -[[gRPCって何?:https://qiita.com/oohira/items/63b5ccb2bf1a913659d6]] -[[Go で実装しながら gRPC を理解する:https://reboooot.net/post/hello-grpc/]] -[[gRPCのフロー制御を試してみた:https://www.techscore.com/blog/2019/09/24/grpc%E3%81%AE%E3%83%95%E3%83%AD%E3%83%BC%E5%88%B6%E5%BE%A1%E3%82%92%E8%A9%A6%E3%81%97%E3%81%A6%E3%81%BF%E3%81%9F/]] -[[gRPCを用いたマイクロサービスのAPI仕様の記述:https://tech.mercari.com/entry/2019/05/31/040000]] -[[gRPCを使ってPairsのchatを高速にしたお話:https://medium.com/eureka-engineering/grpc%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6pairs%E3%81%AEchat%E3%82%92%E9%AB%98%E9%80%9F%E3%81%AB%E3%81%97%E3%81%9F%E3%81%8A%E8%A9%B1-ada759635486]] -[[クックパッドがgRPCを採用するまで サービス間通信で抱えていた課題と、RubyでgRPCを運用するための工夫:https://logmi.jp/tech/articles/320715]] -[[ロボットエンジニアのためのgRPC入門:https://myenigma.hatenablog.com/entry/2019/06/23/143321]] -[[gRPCでインターフェースを再整理してからサービスを分割─freeeの段階的なマイクロサービス戦略:https://employment.en-japan.com/engineerhub/entry/2020/03/30/103000]] -[[gRPC streamingをつかうとマイクロサービスの責務が整理できるし省コネクションでメリットあるよね、という話:https://blog.soushi.me/entry/2017/03/17/125049/]] -[[Go + gRPCによるマイクロサービス構築:https://user-first.ikyu.co.jp/entry/2019/06/17/100000]] -[[gRPCのスキーマ設計および実装のベストプラクティス:https://medium.com/sprocket-inc/grpc%E3%81%AE%E3%82%B9%E3%82%AD%E3%83%BC%E3%83%9E%E8%A8%AD%E8%A8%88%E3%81%8A%E3%82%88%E3%81%B3%E5%AE%9F%E8%A3%85%E3%81%AE%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-c0599edcb6f7]] -[[API 設計: gRPC、OpenAPI、REST の概要と、それらを使用するタイミングを理解する:https://cloud.google.com/blog/ja/products/api-management/understanding-grpc-openapi-and-rest-and-when-to-use-them]] -[[gRPC-Web for .NET now available:https://devblogs.microsoft.com/aspnet/grpc-web-for-net-now-available/]] *概要 [#g747aa65] -RPCでは、IDL(インターフェース定義言語)を使ってあらかじめAPI仕様を .proto ファイルとして定義し、そこからサーバー側&クライアント側に必要なソースコードのひな形を生成する -言語に依存しないIDLで先にインタフェースを定義することで、様々なプログラミング言語の実装を生成できるというメリットがある -通信プロトコルには HTTP/2 が使われる --HTTP/2 が使われているので、クライアントとサーバー間のリクエストとレスポンスは 1:1 だけでなく 1:* や *:* などの通信が可能 --クライアントからのリクエストで複数のメッセージを投げられて、サーバーから複数メッセージを返すなどの通信が可能になる --HTTP/2 の機能の1つであるストリーム(同一の TCP 接続でクライアントとサーバーが双方向にデータをやりとり出来る仕組み)のおかげ -Protocol buffers でデータをシリアライズ化してやりとりする -型付けされたメッセージの他に key-value(value は複数設定可能)で定義可能なメタデータというものも存在しており、HTTP ヘッダのように扱うことができる --利用例としては、不正なリクエストかの判断を行うための認証情報や、複数のサービスを横断する処理をトレースする ID などをハンドリングするケースが挙げられる **[[Protocol Buffers:https://developers.google.com/protocol-buffers]] [#macab43b] -[[ロボットエンジニアのためのProtocol buffers入門:https://myenigma.hatenablog.com/entry/2019/06/09/125326]] -[[Protobuf周りでハマった話:https://tech.yappli.io/entry/2023/02/28/Protobuf%E5%91%A8%E3%82%8A%E3%81%A7%E3%83%8F%E3%83%9E%E3%81%A3%E3%81%9F%E8%A9%B1]] *Go [#yf5a091f] -[[商品通報対応をgRPCとGraphQLとReactでリプレースしてみた:https://engineering.mercari.com/blog/entry/2019-12-14-110000/]] -[[GraphQL と gRPC で通信する Go 製のマイクロサービスをセットアップする:https://qiita.com/takano-h/items/702ec2aef53a8c756690]] **[[Connect:https://connect.build/]] [#z47ff67b] -[[gRPCのGo実装の新星、Connect:https://future-architect.github.io/articles/20220623a/]] -[[gRPCがフロントエンド通信の第一の選択肢になる時代がやってきたかも?:https://future-architect.github.io/articles/20220819a/]] -[[【新規ツール探し】シンプルに Go で gRPC が使える Connect「コードがとても見やすい!」:https://blog.framinal.life/entry/2022/12/01/223745]] -数千行のコードで、基本的なところは1パッケージにまとまっている。生成されたコードも少ない -net/httpのサーバー、クライアントともに、http.Handler、http.Clientを利用しているため、サードパーティのライブラリを駆使しやすい -gRPC、gRPC-Web、およびConnect独自のプロトコルの3つを最初からサポートしたサーバー、クライアントが作れる。プロキシは不要。Connect独自のプロトコルはREST APIになっていてcurlで簡単にテスト可能。もちろんgrpcurlも可能。 -Connectを開発したのは、Protobufからのコード生成やら、linterやら、いろいろやりやすくしてくれるツールである[[buf:https://buf.build/]]を開発したところ。Protobufを知り尽くしているところが作ったライブラリ。 **[[grpc-gateway:https://github.com/grpc-ecosystem/grpc-gateway]] [#lf56377d] -[[grpc-gatewayでgRPCとREST両対応のサーバを作る:https://future-architect.github.io/articles/20220624a/]] -[[「Go + grpc-gateway で作る JSON API サーバ速習会」を開催しました:https://www.wantedly.com/companies/wantedly/post_articles/115474]] -grpc-gateway は gRPC サーバの前段に立つリバースプロキシです -gRPC(protobuf)の通信を application/json な API に変換してくれます. *ASP.NET Core gRPC [#f97826c5] -[[WCF 開発者向け ASP.NET Core gRPC:https://docs.microsoft.com/ja-jp/dotnet/architecture/grpc-for-wcf-developers/]] -[[.NET Core の gRPC の概要:https://docs.microsoft.com/ja-jp/aspnet/core/grpc/?view=aspnetcore-3.0]] -[[.NET Core 3.0 で gRPC がシームレスに統合されて素晴らしい件:https://blog.ecbeing.tech/entry/2019/09/24/114040]] -[[gRPC vs. WCF:https://tnakamura.hatenablog.com/entry/2018/07/10/grpc-versus-wcf]]