プログラミング 新技術

初心者用API構築でgRPCのメリットデメリットと便利ツールの紹介

gRPC

概要

APIの構築におすすめなのがgRPCです。API作成は主にRest、gRPC、GraphQLの3種類あります。それぞれメリットデメリットがあります。

今回は特にgRPCについて解説していきます。

gRPCの基礎知識

gRPCって何?

gRPCはGoogleが開発したRPC技術です。Protocol BuffersというGoogleが開発した(IDL)インターフェース定義言語で定義して、プログラミング言語でデータのやり取りを実装します。

RPCって何?

PRC(Remote Procedure Call)の略で通信プロトコルのことです。他のアプリと他のアプリの情報のやり取りをする時に通信する必要があります。その時に使う通信手段ということです。

IDLって何?

インターフェース定義言語と言われており、以下のことを定義します。gRPCの場合はProtocol BuffersというGoogleが開発した言語で定義します。

  • APIにリクエストする時にどのような項目を送るのか
  • APIから返ってくるレスポンスの項目をどうするのか
  • APIをどこのURLに送るのか

gRPCのメリットデメリット

gPRCのメリット

Protocol BuffersというIDLでAPIの定義をすることができます。

双方向通信が高速です。

gRPCのデメリット

API構築する時の方法3つ

APIを構築する方法は3種類あります。メジャーな順に概要を解説していきます。

  • REST
  • gRPC
  • GraphQL

REST

Representational State Transferの略です。API作成の定義に使用されるなかで最も有名な作成方法です。HTTPメソッドでアクセスし、データの送受信を行います。

gRPC

今回の本題であるgRPCはProtocol Buffersという定義言語を使った高速通信ができます。

GraphQL

クエリ言語と言われており、SQLのような命令文書を書くことで必要なデータを取得することができます。

スキーマ言語 Protocol Buffers

わかりやすく伝えるとAPIのエンドポイントとリクエスト、レスポンスを定義するための言語です。

スキーマ言語というのはXMLやJSONといったデータの型を入れる言語のことです。その一つにProtocol Buffersというのが存在します。

gRPCの確認方法

gRPCを開発していく上で必要なツールがあります。

  • Evans
  • gRPCurl
  • BloomRPC

Evans

gRPCはcurlでリクエストを送信することができませんがEvansというデバッグツールを使うことでcurlのようにデータの送受信をコマンドで確認することができます。

https://github.com/ktr0731/evans

gRPCurl

こちらもEvans同様curlのように利用することができます。EvansとgRPCurlは基本的に変わりません。

https://github.com/fullstorydev/grpcurl

BloomPRC

私お一番のおすすめです。GUIで利用することができます。RESTの場合だったらPOSTMANというツールがあります。似たソフトウェアです。

https://github.com/uw-labs/bloomrpc

対応言語

Python

JAVA

C#

C++

Go言語

Dart

PHP

Haskell

Ruby

Kotolin

Objective-C

Javascript

TypeScript

技術選定のアドバイス

言語の選定はエンジニアが集まりやすいかどうかという観点と言語スピード品質の観点があります。

エンジニアが集まりやすい観点

エンジニアが多いのはJAVAやPHPといった言語は昔からあるので人は集まりやすいです。その中でRESTで作成するAPIを選択すると人は多くスピード感のある開発が可能になります。

スピード・品質

Go言語を選択すると処理速度は早く型もしっかりしているので品質も高いです。エンジニアは少ないですがしっかりしたものは作成できます。またさらに新しい通信のgRPCも処理速度が速いのでこちらを選択することが正しいです。

まとめ

様々なAPI作成の方法があります。細かくいうとメリットデメリットはありますが、正直作り方が違うだけで機能は同じです。

データベースで言うSQLのようにProtocol Bufferというスキーマ言語があり、多少は複雑です。それぞれの企業でいろいろ模索しながら開発しているので全ての作成方法をマスターしておくことがエンジニアとして重宝されるので3つの使い方は勉強しておいた方がいいでしょう。

-プログラミング, 新技術