ãå³è§£ã§æ¯èŒãgRPC vs REST â APIéä¿¡æ¹åŒã®éãã培åºè§£èª¬
äžçªå€§ããªéãã¯ããŒã¿ã®ããåãã®ä»æ¹ã ããRESTã¯JSONïŒããã¹ã圢åŒïŒã§ããŒã¿ãéããã©ãgRPCã¯Protocol BuffersïŒãã€ããªåœ¢åŒïŒã䜿ããã ããã€ããªã ãã人éã«ã¯èªããªããã©ãã³ã³ãã¥ãŒã¿ã«ãšã£ãŠã¯è»œããŠéããã ãã
ãã€ããªã£ãŠã0ãš1ã®ãã€ã ããïŒããã ãšéçºã®ãšãã«ãããã°ãã«ãããªãã®ïŒ
ãã質åã ãããããã«RESTã®JSONã¯ãã©ãŠã¶ãcurlã§ç°¡åã«äžèº«ã確èªã§ãããã©ãgRPCã®ãã€ããªã¯ãã®ãŸãŸã§ã¯èªããªãããã ãgRPCã«ã¯å°çšã®ãããã°ããŒã«ïŒgrpcurlãBloomRPCïŒãããããProtocol Buffersã®å®çŸ©ãã¡ã€ã«ïŒ.protoãã¡ã€ã«ïŒãèŠãã°æ§é ãããããããæ £ããã°å°ããªããã
.protoãã¡ã€ã«ã£ãŠäœãªã®ïŒ
APIã®ãèšèšå³ãã¿ãããªãã®ã ããã©ããªããŒã¿ãããåãããããã©ããªã¡ãœããããããã.protoãã¡ã€ã«ã«å®çŸ©ããŠãããšããããããµãŒããŒãšã¯ã©ã€ã¢ã³ãã®ã³ãŒããèªåçæããããã ãRESTã ãšOpenAPIã®ããã¥ã¡ã³ããæžããŠãããããã³ãŒããçæããããšããããã©ãgRPCã¯ã³ãŒãçæãæšæºãããŒã«çµã¿èŸŒãŸããŠããã®ã倧ããªç¹åŸŽã ãã
ã³ãŒããèªåã§äœãããã®ã¯äŸ¿å©ããïŒéä¿¡ã®éãã«ãéããããã®ïŒ
䜿ãããããã RESTã§HTTP/2ã䜿ã£ãŠããJSONã®ããã¹ãè§£æã®ãªãŒããŒãããã¯æ®ããã ãgRPCã¯ãã€ããªïŒHTTP/2ïŒããããŒå§çž®ã®çµã¿åããã§ãå šäœãšããŠRESTãã2ã10åéããšèšãããŠããããç¹ã«ãã€ã¯ããµãŒãã¹éã®éä¿¡ã®ããã«å€§éã®APIã³ãŒã«ãé£ã³äº€ãå Žé¢ã§ã¯ããã®å·®ãããªãå¹ããŠãããã ã
ãããã¹ããªãŒãã³ã°ã£ãŠããã®ãèããããšããããã©ãã©ãããããšãªã®ïŒ
RESTã¯åºæ¬çã«ããªã¯ãšã¹ããéã£ãŠãã¬ã¹ãã³ã¹ãè¿ã£ãŠãããã®1åŸåŸ©ã§å®çµãããããgRPCã«ã¯ããã«å ããŠ3ã€ã®ã¹ããªãŒãã³ã°ãã¿ãŒã³ããããã ããµãŒããŒãé£ç¶ã§ããŒã¿ãéããServer streamingããã¯ã©ã€ã¢ã³ããé£ç¶ã§éããClient streamingãããããŠåæ¹åã«ãªã¢ã«ã¿ã€ã ã§ããåããããBidirectional streamingãããã£ããããªã¢ã«ã¿ã€ã ç£èŠã®ãããªçšéã«ã¯ãšãŠã匷ããã
ããã髿§èœãªãã ãïŒã§ããã©ãŠã¶ããgRPCã£ãŠäœ¿ããã®ïŒ
å®ã¯ãããgRPCã®åŒ±ç¹ãªãã ããã©ãŠã¶ã®JavaScriptããã¯çŽæ¥gRPCãåŒã¹ãªããgRPC-Webãšãããããã·çµç±ã®ä»çµã¿ã¯ãããã©ãåæ¹åã¹ããªãŒãã³ã°ã䜿ããªããªã©å¶çŽãå€ããã ããWebããã³ããšã³ã â ããã¯ãšã³ãã¯RESTãGraphQLã䜿ããããã¯ãšã³ãã®ãã€ã¯ããµãŒãã¹éã¯gRPCã䜿ãããšãã䜿ãåããå€ããã ãã
ãªãã»ã©ãå Žæã«ãã£ãŠäœ¿ãåãããã ãïŒçµå±ã©ãéžã¹ã°ããã®ããªïŒ
ã·ã³ãã«ã«èšããšãå€éšå ¬éAPIãWebã¢ããªã®ããã¯ãšã³ãã«ã¯RESTãåããŠãããåŠç¿ã³ã¹ããäœããŠããã©ãŠã¶ããçŽæ¥å©ãããããšã³ã·ã¹ãã ãæçããŠããããããäžæ¹ã§ããã€ã¯ããµãŒãã¹éã®å éšéä¿¡ããªã¢ã«ã¿ã€ã æ§ãå¿ èŠãªã·ã¹ãã ãã¢ãã€ã«ã¢ããªã®ããã«åž¯åãç¯çŽãããå Žé¢ã§ã¯gRPCã匷ããGoogleãNetflixã®ãããªå€§èŠæš¡ãµãŒãã¹ã§ã¯ãå éšéä¿¡ã®ã»ãŒãã¹ãŠãgRPCã«ç§»è¡ããŠãããã
äž¡æ¹çµã¿åãããŠäœ¿ãã®ãçŸå®çãªãã ããããã©ã³ã®äººã§ãç¥ããªããããªãã€ã³ãã£ãŠããã®ïŒ
æå€ãšç¥ãããŠããªãã®ããgRPCã®ãªãã¬ã¯ã·ã§ã³APIã ãããµãŒããŒãèªåèªèº«ã®APIå®çŸ©ãè¿ãä»çµã¿ã§ã.protoãã¡ã€ã«ããªããŠãã¯ã©ã€ã¢ã³ããAPIã®æ§é ãåçã«çºèŠã§ãããã ããããããgRPCã®ãããã©ã€ã³äŒæãšããæ©èœãéèŠã ãããµãŒãã¹AããµãŒãã¹BãåŒã³ãBãCãåŒã¶ãããªé£éã§ãæåã«èšå®ããã¿ã€ã ã¢ãŠããèªåçã«äžæµã®ãµãŒãã¹ã«äŒãããããããããããã§ããã€ã¯ããµãŒãã¹ã®ã¿ã€ã ã¢ãŠã管çãåçã«æ¥œã«ãªããã ãRESTã§ãããããããšãããšãèªåã§å®è£ ããªãããããªããã ãã
ã¿ã€ã ã¢ãŠããèªåã§äŒããã®ã¯ç¢ºãã«äŸ¿å©ã ãïŒ
ãããªãã ãããšProtocol Buffersã«ã¯åŸæ¹äºææ§ã®ã«ãŒã«ããã£ãããã£ãŠããã£ãŒã«ãã®è¿œå ã¯æ¢åã¯ã©ã€ã¢ã³ããå£ããªããããã£ãŒã«ãçªå·ã䜿ã£ãŠç®¡çãããããJSONã®ããŒå倿Žã®ãããªäºæ ãèµ·ãã«ããèšèšã«ãªã£ãŠãããå€§èŠæš¡ããŒã ã§APIãé·æéçšãããšãã«ã¯ããã®å ç¢ãããšãŠãå¹ããŠãããã ãã