サービス設計の基礎

webを支える技術という本を読みました。
 
普段使っているwebに関して知らない知識がたくさんあった。
使っているけど知らないことがこんなにあるなんて。それほどWebというものが便利ということなのかもしれない。
 
例えるなら自動車を運転することはできるけど、自動車の仕組みは知らないみたいな。
 
だから、この本ではwebで使われているものの仕組みが学べる。
そして、最後の章ではwebサービスを作るときに必要となるwebの設計の知識が述べられている。
以前にデータベース設計に関する本を読んだが、いろいろなところで設計してからサービスは作られるのだと感じた。
実際の現場ではネットなどで、ホワイトボードにポストイットをたくさん貼って会議してたりする画像を見たことがあるがあのような会議でペルソナ設定、データベース設計、サービス設計が行われていくのではないかと思う。
とにかく
 
 
web…webサイト、UI(ルーター、テレビ、プリンタ)、WEB API
webはHTTPというプロトコル(約束事)の元、URIでリンクを介して、HTMLが表示されるという関係で構成されている。
インターネットでこれだけWebが広がったのは以前の閉じたネットワークを構成していたRPCに比べ、必要最低限のリンク機能が簡単かつ拡張性の富んでいたから、多くの人に使われることになったから。
また、RESTというアーキテクチャスタイル、Ajaxという技術によるUIの向上によりWebがより広まった。
RESTの重要な概念としてリソース(URI)がある。リンクをたどるだけでサイトに到達できる簡単さが魅力。
URIとURLはほぼ同義語。URIは誰からでも簡単にアクセスできるように、言語に依存せず、実装依存のパスを使わず、そのページを表すわかりやすい名詞を用いる。
 
HTTPはTCP/IP(ネットワークプロトコル)をベースに作られている。
アプリケーション層
クライアント側でリクエストをサーバー側に送り、レスポンスするという仕組み。
ステートレスなので、必要な情報はクライアント側に含まれていてシンプルな反面、送信するデータ量はステートフルに比べ多くなる。
 
HTTPメソッド
リソースの...
GET 取得
POST 作成、追加
PUT 更新、作成
DELETE 削除
HEAD ヘッダ情報取得
OPTIONS メソッドの取得
べき等性…何回操作しても同じ処理
安全性...リソースの状態を変化させない
POSTはべき等でも安全でもない。だからクレジットカードの支払いとかをネットでする時にボタンを2回押さないでくださいって出る!
 
1...処理中
2...成功
3...リダイレクト
4...クライアントエラー
5…サーバーエラー
 
HTTPヘッダの仕様は電子メールメッセージの仕様と似ている。
日時、文字エンコーディング、メディアタイプなどの情報があり、HTMLのheadタグみたいだなと感じた。
basic認証…ユーザー名とパスワード
digest認証...パスワードを暗号化するのでbasic認証より安全。
 
キャッシュ…ローカルストレージに蓄積されるデータ、その手法。
 
XML木構造。HTMLよりシンプルな構造
HTMLはヘッダにメタ情報、ボディに内容
メタデータをHTML内に埋め込めるのはmicroformatsという技術があるおかげ。
HTTP、URL、リンクによりWebが成り立つのでリンク構成は重要
JSONXMLより軽量なjavascript記法のデータフォーマット
不特定多数のドメインのサーバーにアクセスすることをクロスドメイン通信
JSONPの機能により、この不都合が解消されるためAjaxには必須。
 
AtomRSSフィードなどに使われている技術でXMLフォーマット。基本的なメタデータを持っている。
エントリリソース->メンバリソース->コレクションリソースの順に粒度が高くなる
 
コレクションリソースがいわゆるフィード
Atomでデータフォーマットを作り、AtomPubというプロトコルにより基本的なメタデータのリソースをCRUDする。
 
リソース設計…webサービス、web apiの外部設計。どちらも同じように考える。
 
リソース指向アーキテクチャ
1、webサービスで提供するデータを特定
2、データをリソース分け
3、リソースにURIで名前付け
4、クライアントに提供するリソースの表現を設計
5、リンクとフォームを利用してリソース同士を結びつける
6、イベントの標準的なコースを検討
7、エラーについて検討
 
1、2の段階で何にリソスとして名前を与えるのか判断しづらい場合があるのでそれに対する他の手法が存在する。
ER図を用いる関係モデル...データの持つ階層構造、トップレベルリソースの存在
オブジェクト指向モデル...トップレベルリソースの導出はできない。詳細な情報を含む(関係モデル比)
情報アーキテクチャからの導出...リソース指向アーキテクチャのデメリットを補完できるがこれだけではwebサービス設計は完了しない。