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サービスの設計
人からもプログラムからもわかりやすい構造を心がける
最後に
まだまだ理解があまりできていないところもあるので、何度か読んでいこうと思う