最近Webアプリケーション作成に興味を持ちましたが、知識が足りないと痛感しました…
そのため、この
伸び悩んでいる3年目Webエンジニアのための、Python Webアプリケーション自作入門
を読み、Webアプリケーションとはどういうものなのかを理解していけたらと思います。
私は3年目でもなければWebエンジニアでもないのですが、とてもわかりやすく楽しい内容だと思うので、興味のある方はこの本を読んでみてください。
本記事は、Chapter1~Chapter8の内容について、自分用のまとめとして作成しています。
Webアプリケーションとは、Webサービスを提供するプログラムである
乱暴にかみ砕くとこのように言えます。Webサービスというのはブラウザを介して利用するサービスのことで、GmailやGithubなど普段私たちがブラウザ上で利用しているもののことです。このWebサービスは、プログラミンした文字列ではなく、それらを解釈して実行した結果実現される機能群です。なので、このWebアプリケーションのソースコードを書き、あるプログラムで実行することで、Webサービスが私たちに提供されています。
以下の画像がWebアプリケーションの概要図になります。ブラウザがWebサーバーへ何かリクエストを送信すると、Webサーバーは、Webフレームワークを介してサービスごとに固有のプログラムをブラウザに返してくれます。このWebサーバー+Webフレームワーク+サービスごとに固有のライブラリをまとめてWebアプリケーションと呼ぶことができます。
Webサーバーとは、Webサービスを提供するプログラムと考えていいです。ここで、Webアプリケーションもそうだったじゃないかと思いますよね。実は広義の意味ではこの二つは同じ意味なのですが、多くの場合、WebサーバーはWebアプリケーションの中でも特にWebサービスを提供する窓口部分のプログラムのことだけを指します。
Webサービスはかつては単一のプログラムで提供されており、それをWebサーバーと呼んでいました。しかし、提供するサービスがとても多くなり、よりリッチなサービスとなったため、どんなWebサービスでも使用する共通部分は共通プログラムとして、サービスごとのプログラムと分けて作成するようになりました。その結果、この共通プログラム部分がWebサーバーと呼ばれるものになってきました。
Webサーバーの代表例として、apacheやnginxがあります。
先ほどのサービスごとのプログラムの中にも、定番の共通機能がよく見られ、それらがライブラリとして世の中に出回っていきました。それがWebフレームワークと呼ばれるものです。
Webサーバー上で追加で動かすような構成になっており、PythonのDjangoや、Laravelなどがあります。
Webサーバは別名HTTPサーバと呼ばれ、クライアントとHTTPというプロトコルで通信します。他にも様々なサーバが存在し、それぞれプロトコルの違いにより区別されています。
通信プロトコルとは、通信する際の規格のことです。この取り決めを守ることで、メーカー、機種などに左右されずに、全てのパソコンやサーバ間で通信を行うことができます。データの通信ではパケット交換方式が用いられています。これは、通信データをパケットと言われる単位に分割し送ることで、多くのユーザが同時にデータを送受信することを可能にしています。パケットは、ヘッダという通信先や通信元の情報と分割されたデータによって構成されています。
実際にWebサーバとブラウザが通信しているところを確認し、真似することで簡易的なWebサーバを作ります。
ChromeとApacheの通信、つまり、ブラウザとWebサーバの通信というのは、ブラウザからWebサーバに向かってリクエスト(Webサービスを提供してほしい)を送り、Webサーバがそれに対してレスポンス(Webサービス)を返すということです。
インターネット上で、あるプログラムが別のプログラムへ何かを送るとき、必要となるのは宛先と内容です。
このうち、Chromeでは、宛先だけをURLバーに入力すれば、内容は自動で生成されます。
ここで、Webサービスにおける宛先のことを、URLと呼び、以下のような形式で表現されます。
URL = ** <protocol>
: // <host>
: <port>
/ <path>
?** <query>
リクエストの送り方を指定する。Webサービスではhttp
やhttps
がよく用いられる。郵便に例えると、「普通郵便」や「本人限定受取」といった郵便の送り方のようなものです。このように、宛先や内容には関係ないですが、送る手順や受け取り方がprotocolごとに変わります。
http
ではいわば普通郵便で、送りたい内容をそのまま送ります。
https
は暗号化通信で、http
よりセキュアな通信が可能となります。
送り先のWebサーバープログラムが動いているマシン(=コンピュータ)のインターネット上の住所を示します。基本的には、インターネット上のマシンを特定するためにIPアドレス
を使用する。
IPアドレス以外にhost
に使用できるものとして以下のものがあります。
DNSに登録されたドメイン:zenn.dev
google.com
など
localhost:IPアドレス127.0.0.1
とみなされ、自分のPCを指す。
ただ、自分のPC上には様々なプログラムが動いており、host
だけでは宛先として不十分となります。例えば、マンションで、住所だけがわかっても部屋の番号がわからないような状態といえます。そこで、必要になるのがport
です。
port
は、インターネット通信の際に特定のマシンの中で動いている複数のプログラムから、目的のプログラムを特定するための番号。通常、PCやサーバー上では複数のプログラムが動いているため、ポート番号を指定することで、同一IPのプログラムの中から、任意のプログラムへリクエストを送ることができる。
port番号は、プログラム起動時にプログラムが0~65535番の中から自分で設定することができる。
well-known ports
という。0~1023番まではすでに決まっている。例えば、HTTP
は80番、HTTPS
は443番、FTP
は20・21番など。ただし、必ずしもwell-known portsでサービスを動作させる必要はなく、ソフトウェアによって設定できるようになっていることが多いです。多くのブラウザでは、http通信する際は、デフォルトで80番ポートへ向けて通信すると決まっているため、httpでポートが80番の場合に限り、port番号を省略し、http://localhost/~
と書いてもいいです。
上記の、protocol
,host
,port
がそろえば、ブラウザは相手のWebサーバプログラムの場所を特定して、通信を始めることができます。しかし、一般的に1つのWebサービスに対する要求は1種類ではありません。そのため、どのようなサービスを要求したいかを伝える目的で、pathにその情報を追加します。
pathは、/
区切りで、サーバ内部のアクセスする対象のファイルの場所を指定する。初期のウェブでは、ウェブサーバー上の物理的なファイルの場所を指定していたが、現在は物理的なものではなく、ウェブサーバーによって処理される、抽象的なものを指定することが多いです。
query
は、pathに加えて、何か情報を追加で送りたいときに使います。送る情報は、名前と値を=
で区切り、パラメータ同士を&
で区切ります。ウェブサーバーに与える引数のようなものです。
TCPサーバーとは、TCP(Transmission Control Protocol)で通信を行うサーバーのことです。TCPは、IPの上位プロトコルで、トランスポート層で動作します。ネットワーク層のIPとセッション層以上のプロトコル(HTTP,FTP,telnet)の橋渡しをする形で動作しています。トランスポート層では、UDPというプロトコルも存在しています。
TCPのコネクションは、3wayハンドシェイク
と呼ばれる方法で結ぶ、通信相手との仮想の通信路のことをいいます。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント