WEBを支える技術まとめ


WEBとは

ハイパーメディアにより構成された分散システムである

RESTアーキテクチャスタイル

  • クライアント/サーバ
    クライアントとサーバに分離して処理をすることで、クライアントをマルチプラットフォームにできる

  • ステートレスサーバ
    サーバにアプリケーション状態を持たない
    それにより、サーバの実装を簡略化できる
    RESTから見るとCookieを使ったセッション管理は間違った運用
    必要最低限で使用するようにする

  • キャッシュ
    一度取得したリソースをクライアントで使い回す
    サーバとクライアント間の通信を減らすことでネットワークの帯域や処理時間を縮小し、効率的に処理する

  • 統一インターフェース
    URIで指定したリソースに対する操作を、統一した限定的なインタフェースで行う
    HTTPではGET、POSTなどの8個のメソッドだけに限定されている
    インタフェースを統一することでクライアントとサーバの実装の独立性が上がる

  • 階層化システム
     システムをいくつかの階層に分離する

  • コードオンデマンド
    プログラムコードをサーバからダウンロードし、クライアント側で実行する
     クライアントを後から拡張できる

ULCODC$SS

RESTを無理やり採用する必要はない
より適したアーキテクチャスタイルを採用するのが賢明

URI

クールなURI
URIは変わらないのが理想
プログラム言語に依存した拡張子やパスを含めない
メソッド名やセッションIDを含めない
URIはリソースを表現する名詞にする

少ない文字数や人にわかりやすい文字を使うことがクールなURI

URIを変えたい時は古いURIから新しいURIにリダイレクトするようにする

URIはクライアントにとって不透明

HTTP

  • HTTPとは
    ハイパーテキストの転送用プロトコル
    実際には、画像や音声、動画やプログラムファイルなどコンピュータで扱えるデータであればなんでも転送できる

  • HTTPはステートレス性
    サーバはクライアントの状態を覚えずに処理に必要な情報を毎回転送させる
    サーバはクライアントのアプリケーション状態を覚える必要がない為、サーバ側のシステムは単純になる
    但し、送信するデータ量が多くなったり、認証などのサーバに負荷がかかる処理を繰り返してしまう
    通信エラーの場合、複数回同じ処理をしてしまうことがある

 ステートフルだと、サーバが増えると複数のサーバ間でアプリケーション状態を同期するのが大変
 セッション管理が可能

HTTPメソッド

  • GET
    リソースの取得

  • POST
    リソースの作成、追加

  • PUT
    リソースの更新、作成

  • DELETE
    リソースの削除

  • HEAD
    リソースのヘッダの取得

  • OPTION
    リソースがサポートしているメソッドの取得

リソースの作成はPOSTで行いURIもサーバ側で決定する

いざとなればPOSTでなんでもできる

べき等性と安全

べき等性とは
同じ処理を何度繰り返しても結果が同じになること

安全とは
操作対象のリソースの状態を変化させないこと

べき等 安全
GET
POST
PUT
DELETE
HEAD

ハイパーメディアフォーマット

HTML

マークアップ言語
webの基本的な技術

microformats

HTMLの中でさらに意味のあるデータを表現するための技術
プログラムから見てわかりやすくする

Atom

拡張性のあるフィード

JSON

様々なプログラム言語から扱いやすいデータ構造を記述できる
そのため、プログラム言語間でデータを受け渡すことができる

クロスドメイン通信

AjaxのXMLHttpRequestは、セキュリティ上の制限からJavaScriptファイルを取得したのと同じサーバとしか通信ができない
不特定多数のドメインに属するサーバにアクセスすることをクロスドメイン通信と呼ぶ

XMLHttpRequestではクロスドメイン通信ができない

HTMLの<script>要素を用いると、複数のサイトからJavaScriptファイルが読み込める

<script src="http://hogehoge.jp/foo.js"></script>

みたいな

JSONP

JSONPは<script>要素を使いクロスドメイン問題を回避する
オリジナルのJSONをクライアントが指定したコールバック関数名でラップして、ドメインの異なるサーバからデータを取得する
(一度はまったことがあったので、この説明はありがたかった)

WEBサービスの設計

人からもプログラムからもわかりやすい構造を心がける

最後に

まだまだ理解があまりできていないところもあるので、何度か読んでいこうと思う