サーバー間のデータのやり取り

 以前、記事「サーバーとは?(サーバーの基本的な知識) - デジタル社会を泳ぐイルカ」にて、サーバーとは何だったかというお話をさせて頂きましたが、覚えておりますでしょうか。(恐らく、結構前の記事なので、再読してみてください。)この記事でご紹介したサーバーとして、Webサーバーやファイルサーバー等、色んなサーバーをご紹介しておりましたが、今回はそんなサーバー間でのデータ送受信の話を出来ればと思っております。

目次

はじめに

 今回は、サーバー間におけるデータの送受信の話をしていきますが、具体的にどのようなものがあるか、少しイメージを持ってもらいたいと思います。とはいえ、現代社会においては、多くの人がデータの送受信を随時行っているため、あまり意識することもないかもしれませんが、それこそこのブログを見たり、youtubeを見たり、メールを受信したり、ファイルを受け取ったり、と様々なデータの送受信を皆さんは経験されているかと思います。
 これらのデータの送受信は、いくつか分類することが出来、送受信の規則がそれぞれで決められております。そして、この送受信の規則をプロトコル(Protocol)と言います。実際にどんな種類があるのか、例に挙げたものでご紹介していきましょう。
 例えば、ブログを見たり、youtubeを見たり、という部分で使われているものに関しては全てWebサーバーとのやり取りでHTTP(Hypertext Transfer Protocol)というプロトコルが利用されております。そして、メールとのやり取りでは、メール受信に使われるのはPOP(Post Office Protocol)というプロトコル、メールの送信ではSMTP(Simple Mail Transfer Protocol)やIMAP(Internet Message Access Protocol)というプロトコルが利用されております。*1その他にファイルサーバー間でのファイルのやり取りではFTP(File Transfer Protocal)が利用されております。
 このようにデータの送受信においては、プロトコルという言われる送受信の規定が決まっており、それに従ってファイルを送受信しております。それこそ、私たちが知るインターネットもIP(Internet Protocal)といわれるものでやり取りされております。とはいえ、今回は詳しいことは一旦置いておき、この中でも重要となるHTTP通信やFTP通信を簡単にご紹介していきます。

様々な通信

 先ほどのHTTPやFTP、POP、IMAPといった様々な通信規則がありますが、具体的なイメージでも覚えておいてください。特にここで紹介するイメージというものが非常に重要となります。以前の記事に少し補足する形でもありますが、サーバーと対峙するものとして、クライアントという概念がありました。そして、このシステムの世界で出てくるサーバーやクライアントというのは、それぞれサーバーソフトウェアやクライアントソフトウェアというものをインストールしたハードウェアのことであるということも以前の復習も兼ねて覚えておいてください。そして、このサーバーとクライアントのやり取りにおいて、重要となるのは、クライアントがサーバーに対して、サービスを要求する(request)こととそれに対して、サーバー側はサービスを提供する(response)ことです。そのイメージを以下に共有していきます。

サーバーとクライアントのやり取り

 そして、この中で、POST/PUTメソッドやGETメソッドというものを登場させましたが、クライアント側からサーバー側に一方向的にファイルを転送するものをPOST/PUTメソッドと言い、クライアント側がサーバー側にファイルを取りに行くものをGETメソッドと言います。特にPOST/PUTメソッドに関しては、HTTPではどちらも利用されますが、FTPではPUTメソッドのみが利用されるため、合わせて覚えておいてください。
 ただ一方で、なぜこの図を出しのかというと、色んなシステム間の通信において正直この図をしっかりとまずは念頭に置いておけるかどうかによる差が非常に大きいためです。それこそ、先ほど出したHTTPやFTP、POP、IMAPでも、この図に当てはめて基本的には考えることが可能で、ただ単にやり取りするものが違うだけです。それこそ、HTTPであれば、Web情報をやりとりしますし、FTPであれば、CSVファイルなどのファイルをやり取りし、POPやIMAPはメールをやり取りするための通信規則となっております。
 また、特に現代においては、SaaSなども含めて色んなサービスが登場しておりますが、各サービスに自社システムのデータを転送しないといけないということも往々にして発生します。その際には、HTTPやFTPでのデータの転送が実施されます。その際に、HTTP通信であればほとんどのケースがAPIApplication Programming Interface)連携を利用し、その中でPOSTメソッドやGETメソッドで値のやり取りをすることが多いです。実際にAPIの仕様書も色んなサービスでサポートサイト等に記載されておりますが、POSTとGETが理解できていれば正直あとは何をやり取りするのかという部分が分かれば、詳細は分からずとも大枠はわかるかと思います。また、同じように前日の受注情報を全てサービスに転送したいとなるとFTPによるデータ転送を行うケースが多いです。FTPに関しても、各サービス側からデータを自社システムに取りに来てもらうGETメソッドの方法か自社システムから各サービスに送り付けるPUTメソッドのどちらを利用してデータを転送します。特に、現代の傾向だとリアルタイム性を求められる企業も増えている部分もあり、APIでのデータ連携が流行りです。そのため、HTTPでの通信の方がデータ転送や取得時によく利用されている傾向があります。
 また、HTTPやFTPに関しては、よくHTTPSやFTPS、SFTPといった形で目にすることも多いのではないでしょうか。これらは安全な(セキュアな)通信方法だとよく言われますが、文頭文末の「S」はそれぞれ安全にするための方法を表しております。(決して、「Secure」の「S」ではありません。笑)HTTPSやFTPSであれば、SSL証明書という証明書により通信をセキュアにしており、SFTPであればSSH公開鍵により通信をセキュアにしております。ここでセキュアと言っているのは暗号化通信のことを指します。今回は暗号化通信に関しての言及はしませんので、別機会にご紹介します。
 加えて、各サービスと自社システムを通信するために接続したいとなると、接続情報を登録してないといけないです。今回は暗号化通信はしない前提で回答しますが、先ほどの図を見て考えてみてください。
 結論から言うと、POST/PUTメソッドでは、データをサーバー側に送り付けるためサーバー側のIPアドレスやホスト名、ポート番号、ディレクトリパスといった接続情報が必要となります。*2また、GETメソッドでもクライアント側がサーバーにデータを取りに行くため、サーバー側のIPアドレスやホスト名、ポート番号、ディレクトリパスといった接続情報が必要となります。ちなみに、API連携でも必要な情報の概念自体は同じとなりますが、基本的にはサービス間のやり取りとなるため、各サービスの自社の領域にアクセスするためのトークン情報やユーザーIDとパスワードといった情報が接続情報となります。

さいごに

 本日は簡単ではありますが、サーバー間のデータのやり取りをご紹介させて頂きましが、重要なことは絵をしっかり理解することと、色んなプロトコルがありましたが、その違いは通信にてやり取りする対象であるということです。そのため、絵を描いてみて、その中で何を転送しているのかをメモしながら各プロトコルと対応付けてみてください!

*1:分かりやすい記事がありましたので、是非ここを見てみてください!(SMTP・POP・IMAPとは?メール配信の仕組みと機能と設定方法を解説! - 起業ログ

*2:IPアドレス、ホスト名、ポート番号、ディレクトリパスはそれぞれサーバーの住所を示すためのものだと考えてください。それこそ、IPアドレスが東京都xxx区xxx町xxx丁目みたいなイメージで、ホスト名はxxx番地xxx号、ポート番号は建物名、ディレクトリパスは部屋番号的な感じで特定の住所を示していると考えてもらえると良いかと思います。