BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース NetflixによるgRPCを使った実用的なAPIデザイン

NetflixによるgRPCを使った実用的なAPIデザイン

原文(投稿日:2021/09/21)へのリンク

NetflixでのAPI設計に関する2部構成の記事が、最近、同社のテクノロジーブログで公開された。バックエンドAPIの要求と応答において無関係なメッセージフィールドを無視する問題をどのように解決したかを説明している。この実現には、Protocol Buffers(Protobuf)メッセージの特別なFieldMaskを使っている。

NetflixのシニアソフトウェアエンジニアのAlex Borysov氏とRicky Gardiner氏は、APIクライアントが大抵の場合、リクエストへの応答に存在するすべてのフィールドを使用することはないと述べている。1つの特定の要求に対する無関係な情報の送信と計算は、帯域幅と計算リソースを浪費し、エラー率を高め、全体として待ち時間を増加させる可能性がある。

この開発者は、APIクライアントが各リクエストに対して、どのフィールドが関連するかを指定することで、そのような無駄を回避できると述べている。彼らは、この機能がGraphQLやJSON:APIなどのAPI標準にそのまま存在すると述べており、NetflixがバックエンドでgRPCを幅広く使用することで同じメカニズムの恩恵を受けることができるかどうかを確認している。

彼らは、FieldMaskと呼ばれる特定のメッセージがProtobufで定義されていることを見つけた。ProtobufはgRPCのベースとなるメッセージエンコーディングだ。APIリクエストに含めると、クライアントは関連するフィールドを一覧で指定できる。これは読み取り操作と変更操作の両方に適用できる。

Selecting a few fields from a large message body.
出典: https://netflixtechblog.com/practical-api-design-at-netflix-part-1-using-protobuf-fieldmask-35cfdc606518

この開発者は、各APIのデータモデルの進化を管理すると共に、ある程度の下位互換性を維持するために選ばれたパターンについても説明している。古いフィールドは非推奨となり、新しいフィールドが優先される。また、更新操作ごとに有効なフィールドマスクまたはバージョン番号を要求することを推奨している。

APIトラフィック全体のフットプリントを最適化する必要性は、さまざまなドメインでも感じられる。また、送信するデータをクライアントが制御できるようにすることは有益であると結論付けている人もいる。コンサルタントのAdam DuVander氏は、APIリクエストの柔軟性に関する以前の記事で「データが多すぎたり少なすぎたりするのは些細なことのように思えるかもしれないが、集約すると大きな影響を与える可能性がある」と指摘している。Adam氏は、さまざまなAPI実装がこの問題にどのように対処したかを示している。

詳細なコードとProtobufメッセージの例が記事に記載されており、NetflixでFieldMaskメッセージがどのように使用されるかを説明している。

この記事に星をつける

おすすめ度
スタイル

BT