サンダーボルト

相手モンスターを全て破壊する。

Webを支える技術 メモ

この記事は何?

以下を読んだのでメモ

f:id:nao_666:20200113195042j:plain
Webを支える技術

メモ

Webの構成要素

まず、もちろんだけどインターネット=Webではない。最初はインターネットができて世界がつながるようになったけど、メールとかしかなくて、しかもメールでも初期は送信側と受信側が同時に電源がついてないと届かないみたいな時代があった。 そこにWebが登場した。WebはHTML, HTTP, URIで構成される。HTMLがフォーマット、HTTPがプロトコルURIがドキュメントを一意に特定するもの。これらが出現したことで一気にWebがインターネットにおいて主流になり、栄えることとなった。

また、HTTPはステートレスなプロトコルとして設計されている。そのため、サーバー側の作りがシンプル(関数的)になる。ステートフルだとスケールしにくい(サーバー台数が増えたときの同期のオーバーヘッド)という問題もある。しかし、ステートレスな設計にも問題はあり、

  1. 認証などの決まった処理を繰り返すコストがかかる
  2. 送信データが増える

といったものが挙げられる。 認証にSessionを使うのはHTTPの考え方からすると反しているように思えるし、そういう意味ではJWTはHTTP的なのかなとも思う。

URI設計

URI設計はER図、クラス図、情報アーキテクチャ(すでに存在するWebサイト等)を参考にすることができる。また、COOLなURIは変わらない。言語に依存したURI等は避けるべき。

ER図

ER図を参考にする場合、例えばDBの1レコードを1リソースとして扱うことが考えられる

クラス図

1:n(has a)の関係が見えたらそれをURIの階層構造として表示したり、継承(is-a)の関係ならURIでは同階層で表現できないかを検討できる。

情報アーキテクチャ

もうすでにあるテーマをWebサイトとして表現しているようなものが存在する場合、そのサイトマップ、構成をURIの参考にできる。例えば、Webサイトのリンク関係を図にして関係性を見る。

その他

改めて、リクエスト/レスポンスヘッダをいろいろ見ると面白い。 例えば、

Accept-Charset: Shift_JIS,utf-8;q=0.7,*;q=0.7

は、Shift_JISが優先度1、その他は0.7で受け付けるというネゴシエーション