ãã¤ã¯ããµã¼ãã¹ãèªä½ããã«ã¦ã§ã¢ã®APIãã¡ã³ãããã«ã«ãããããã£ã¦ããæèã§ãOpenAPIãGraphQLãgRPCã¨ãã£ãæè¡ãæ¡ç¨ãããã®ãæè¿ããç®ã«ããã
ããã¯ã¨ã³ããå®è£ ãã¦ããWebã¨ã³ã¸ãã¢ã¨ãã¦ã¯ãããããä»çµã¿ãæ´åããã¤ã¤ããã®ã¯ããããããAPIãã·ã¹ãã ã®å¤ã«å ¬éãããã¨ããã¨ãããã¥ã¡ã³ãã¼ã·ã§ã³/ããªãã¼ã·ã§ã³/ã¯ã©ã¤ã¢ã³ãã®å®è£ ãªã©ãæå¤ã¨å¯æ¬¡çãªä½æ¥ãå¿ è¦ãªã®ã§ããæ±ç¨åããããã¼ã«ã«é ¼ããã®ã¯å©ããããã¤ã¯ããµã¼ãã¹ãç¨ããã¢ã¼ããã¯ãã£ãèããã«ããã£ã¦ããã·ã¹ãã éã®ã¢ããã¿ãã¤ã¡ã¼ã¸ãããããªãã
ããããèæ¯ã§ãæè¿å®¶ã§ã¯gRPCã調ã¹ã¦ããããã®ãã¨ã¯gRPCã«ã¤ãã¦èª¿ã¹ããã¨ã®ã¡ã¢ãææ³ã®ã³ã¼ãã¼ã«ãªã£ã¦ããã®ã§ãèå³ããã£ããã©ããã
主ãªæ å ±æº
ã ããããã®ã¸ããçºãã¦ããã¨ãgRPCã®åºæ¬ã«ã¤ãã¦ã¯æãããã¨ãã§ããã
- grpc / grpc.io
- gRPCã®æ¦è¦ã説æããã¦ããã ãã§ãªããããã°ã©ãã³ã°è¨èªãã¨ã®å®è£ ãã¥ã¼ããªã¢ã«ãå å®ãã¦ãã
- protocã³ãã³ãã§çæãããgRPCã®serverãclientã®å®è£ ã®ããã¥ã¡ã³ããããã§ã¾ã¨ãã¦èªãã
- Developer Guide | Protocol Buffers | Google Developers
- Protocol Buffer ã«ã¤ãã¦ã¯ãããã¿ã
- protoの言語仕様ãããã«ãã
- GitHub - grpc/grpc: The C based gRPC (C++, Python, Ruby, Objective-C, PHP, C#)
- gRPCã®serverãclientãçæãããã¼ã«ãçæãããã³ã¼ããªã©ãå ¥ã£ããªãã¸ããª
- 主ãªå¯¾å¿ããã°ã©ãã³ã°è¨èªã®å®è£ ã¯ãã¹ã¦ããã«å ¥ã£ã¦ãã
- GitHub - grpc/grpc-go: The Go language implementation of gRPC. HTTP/2 based RPC
- ãªããGoã®å®è£ ã ãã¯ããã«ãã(go getã®äºæ ?)
- gRPC Ecosystem · GitHub
- ããããªgRPCã®ã°ããºããã¤ã¾ããªã¼ã¬ãã¼ã¼ã·ã§ã³
- awsome-grpc ããã®ãªã¼ã¬ãã¼ã¼ã·ã§ã³å ã«ãã£ã¦ãgrpc.ioã«ã©ã¤ã³ãããããã¦ããªãããã°ã©ãã³ã°è¨èªã®å¯¾å¿ã©ã¤ãã©ãªã¨ãã¯ãã®ã¸ãããæ¢ãã¦ã¿ãã¨è¯ã
試ãã«ã³ã¼ããæ¸ãã¦ã¿ã
èªåã§protoãå®ç¾©ãã¦ãgRPCã®ããã°ã©ãã³ã°ãä½é¨ãã¦ã¿ãã
ããã¤ãã®è¨èªã§gRPCã®ãµã¼ã/ã¯ã©ã¤ã¢ã³ããå®è£
ãã¦ã¿ããã£ãã®ã§ãåãã¡ã½ãããå®è£
ããgrpcãµã¼ããããããç«ã¦ãã¨ãåæã«é£æºãã¦åä½ãããããªæ§æã«ãã¦ã¿ããã³ã¼ãã¯GitHubã«ç½®ãã¦ãããDockerã使ã£ã¦è©¦ããããã«ãªã£ã¦ããã®ã§ãmake build && make up
ã¨ããã¨åãã¦ããã¨ãããè¦ããã
å ¨ä½ã管çããBossããã»ã¹ã¨ãã®å ã§åãMemberããã»ã¹ããã¦ã以ä¸ã®ãããªæãã§åä½ãããç¹ã«ä½ãã®å½¹ã«ç«ã¤ã¨ããã¢ãã§ã¯ãªãã
- Bossããã»ã¹ãèµ·åãã
- ããã¤ãã®Memberããã»ã¹ãèµ·åãããMemberããã»ã¹ã¯èµ·åãããBossããã»ã¹ã®Joinã¡ã½ããå¼ã³åºãããã®ã·ã¹ãã ã«åå ãã
- Boss ããã»ã¹ã¯ãã°ããMemberããã»ã¹ã®åå ãå¾ ã£ããã¨ãMemberããã»ã¹ã®é åºã決ããã
- Bossããã»ã¹ã¯æ±ºããé çªã«ãªãããã«ãåMemberããã»ã¹ã«å¯¾ãã¦ããã®ããã»ã¹ã®æ¬¡ã®ããã»ã¹ãæå®ããSetNextã¡ã½ãããå¼ã³åºãã循ç°ããããã«ä¸çªæå¾ã®Memberããã»ã¹ã®æ¬¡ã®ããã»ã¹ã¯æåã®ããã»ã¹ã«ãªãããã«ãã¦ãã
- Bossãæåã®Memberã«å¯¾ãã¦Pokeã¡ã½ãããå¼ã³åºããMemberããã»ã¹ã®Pokeã¡ã½ãããå¼ã³åºãã¨ããã®Member次ã®Memberã®Pokeãå¼ã³åºãããã«ãã¦ãã
- ä¸åº¦æå ¥ãããPokeã¡ã½ããã®å¼ã³åºãã¯é£éãã¦ç¡éã«å¼ã³åºããç¶ãã
æ¬å½ã¯ãgRPCã®ãµã¼ãã¨ã¯ã©ã¤ã¢ã³ãã10è¨èªã§å®è£ ãã¦ã¿ãçµæwww ã¿ãããªæãã§ã¬ãã¼ããããã¨ãããã©ãä¼¼ããããªå®è£ ãç¹°ãè¿ãã ãã¿ãããªé°å²æ°ã«ãªã£ãã®ã§éä¸ã§é£½ãã¦çµãã£ã...ã
ææ³
- ãã¼ã¿åã¨ã¡ã½ããã®ã·ã°ããã£ã®ã¿ã§RPCã®ã¤ã³ã¿ãã§ã¼ã¹ãå®ç¾©ã§ããã®ãç°¡æ½ã§è¯ã
- ã¯ã¨ãªãPOSTãããã¡ãã»ã¼ã¸ã¨ãã¼ã¿åã¨ã®å¯¾å¿ãã¡ã¾ã¡ã¾å®ç¾©ããå¿ è¦ããªã
- RPCã®ããã¥ã¡ã³ãã¨ãã¦ã¿ãã¨ããåããããã
- ããã°ã©ãã³ã°è¨èªãã¨ã«protocã§çæãããgRPCãµã¼ãã®å®è£
ã¢ãã«ãã¾ã¡ã¾ã¡ãªã®ã§æ³¨æãã
- å ±éã®gRPCãµã¼ãå®è£ ã¨ããã®ã¯ãªããåããã°ã©ãã³ã°è¨èªãã¨ã«ä¸å¯§ã«å®è£ ããã¦ãã(ããããã®è¨èªã®å®è£ ãçºããã¨ããããã)
- å®è£ ã¢ãã«ãç解ãã¦å©ç¨ããªãã¨ããã©ã¼ãã³ã¹ã®åé¡ãèµ·ãããããããªã(PythonãRubyã§ã¯GILã«æ³¨æããã¨ã)
- PHP ã§ã¯ãããããµã¼ãã®å®è£ ããªãã£ãããã
- ããã°ã©ãã³ã°è¨èªãã¨ã«protocã§çæãããgRPCã¯ã©ã¤ã¢ã³ãã®æ©è½ãã¾ã¡ã¾ã¡ãªã®ã§æ³¨æãã
- Pythonã®ã¯ã©ã¤ã¢ã³ãã§ã¯éåæã«gRPCã®ã¡ã½ããå¼ã³åºãããã¦çµæãfutureã§å¾ããã§ãã¦ããããã
- éçåä»ãã®ããã°ã©ãã³ã°è¨èªã¨ç¸æ§ãè¯ãå°è±¡
- Protocol Bufferã§å®ç¾©ããmessageåã¨ãgRPCãå®è£ ãã¦ããããã°ã©ãã³ã°è¨èªä¸ã®åã¨ã®éã«ç´æ¥å¯¾å¿ãããã¨ãããããã
æ¸ãã¦ã¿ãä¸ã§ã¯ãGoã¨ç¸æ§ãè¯ãã£ãããã«æããGoogleæååã®æè¡å士ã ããã¨ããæãã¯ããã
次ã®ã¢ã¯ã·ã§ã³
ã²ã¨ã¾ãã·ã³ãã«ãªãµã¼ãã¨ã¯ã©ã¤ã¢ã³ããå®è£ ããã ããªã®ã§ãããå°ãé²ãã ãããã¯ã«ãåãçµãã§ã¿ã
- ã¹ããªã¼ãã³ã°
- gRPCã¯ã¹ããªã¼ãã³ã°ã§ã¡ãã»ã¼ã¸ãéåä¿¡ã§ããã®ã§ä½é¨ãã¦ã¿ã
- ãã¼ããã©ã³ã·ã³ã°/åé·å
- å®éã®ã·ã¹ãã ã§å©ç¨ããã«ã¯ãã¼ããã©ã³ã·ã³ã°ãåé·åãå¿ è¦ã«ãªããgRPCçã«ã¯ä¸ã¤ã®ãããã¯ã¿ãããªã®ã§èª¿ã¹ã¦ã¿ã
- GCPã ã¨ããæãã®ã°ããºãããã ã¨ããAWSã®ALBã¨ç¸æ§ãæªãã£ã½ãã¨ãã®åãèã
- grpc-gateway
- gRPCã¯ãã¤ããªãããã³ã«ã¨ãããã¨ããã£ã¦ãgRPCã«å¯¾å¿ãã¥ããã·ã¹ãã ããã¢ã¯ã»ã¹ã§ããªãã£ãããæ°æ¥½ã«curlã§è©¦ããªãã£ãããã
- gRPCã®ã¡ã½ããã«ãããã対å¿ããREST APIãçããã¦ãããã°ããºããããããã®ã§è©¦ãã¦ã¿ããå®éç¨ã§ã¯ã©ããããããã®ãå¿ è¦ãã
- æå³ã®ããgRPCãåãã¢ããªã±ã¼ã·ã§ã³ã®éçº
- ããã¡ãã£ã¨ç¾å®å³ã®ãã課é¡ã«åºä¼ãããããããªã