April 2020
Intermediate to advanced
496 pages
7h 33m
Japanese
本章では4章と5章で説明してきた機能のいくつかをGo言語で表現します。本書でGo言語によって実装しているのは、APIサーバーにリクエストを送るクライアントを作成するための方法を伝えるという直接的な目的以外に、コードを使って理解を補強するという目的もあります。いくつかの機能はAPIクライアントとして利用する場面がなくても、4章、5章で説明してきた内容を再確認し、理解を補強できます。筆者もソフトウェア系の論文や難しいアルゴリズムを学ぶときは、それを実装したコードを併読したり、それを自分の得意な言語に移植することで理解を深めます。曖昧な理解ではコードを書けないので、実際に動かすことで理解が正しいかどうか再確認できます。
3章ではテスト用のサーバーに対してリクエストを送るクライアント側のコードのみを紹介しましたが、HTTP/1.1ではクライアントから見たセマンティクス(通信内容や意味)は変わらなくても、シンタックス(通信のプロトコル)が変わっている部分が数多くあります。いくつかの項目では実際にクライアントを繋いで動作確認できるように、まずサーバー側のコードを紹介しています。
Go言語のHTTP APIは、何も設定しなくても標準でKeep-Aliveが有効になっています。正しく通信が完了したあとも、セッションが維持されるようになっています。ただし、そのためにはクライアントコード側で必ずresponse.Bodyを最後まで読み切ってからクローズする必要があるとドキュメントに明示されています1。ソケットという1本のパイプを時間分割で共有する仕組みなので、最後まで読みきって終了したことを明示しなければ、次のジョブをいつ使い始めればいいのか判断できずに再利用できません。 ...