howdylikes

Google Developersってわかりづらいよね

Web API The Good Partsを読んだメモ

発売後すぐ買ったのに積読してた本の一つです・・・(汗

Web API: The Good Parts

Web API: The Good Parts

URIの設計方法からHTTPやセキュリティについての知識まで網羅した本です。
広く浅く最低限知っておかなければならない事が書かれている感じなので初級者〜中級者向けです。
また実際のWebサービスで使われている実例と合わせて書かれているのでその辺を使う際に役立つかも。

以下は備忘録

l.76 chatty api

おしゃべりなAPI。バックエンドをクライアントに意識させてはいけない。必要最低限のリクエストで済ませるべき。場合によってはSSKDsで同時更新もありかも。

l.83 json injection

jsonはトップレベルに配列を返してはいけない。 scriptタグで読まれる。

l.107 リダイレクト

301(Moved Permanently)が恒久リダイレクト
302(Found)が一時的なリダイレクト
これらはリダイレクト時にメソッドを変更してはいけないのが本来の意(RFC2068)

303(See Other)はGETでリダイレクト
307(Temporary Redirect))は一時的なリダイレクト 308(Permanent Redirect)は恒久的なリダイレクト 307,308はそれぞれメソッドを変更してはいけないという意味で再定義(RFC2616,RFC7238)

l.108 401と403

401(Unauthorized)は認証(アクセス元が識別できるか)のエラー
403(Forbidden)は認可(アクセス権があるか)のエラー

l.114 Dateヘッダ RFC1123

DateヘッダというかHTTPヘッダではRFC1123の日付で返すのがベター
タイムゾーンとしてはGMT以外指定できない Thu, 04 Oct 2014 23:59:45 GMT

l.116 検証モデル キャッシュ方法と強さ

クライアントはキャッシュが新鮮かどうかを判断するためのリクエスト(If-Modified-Since,If-None-Match)を送る
※サーバーはLast-ModifiedとEtagを返しておく

サーバー側はチェックをして304(Not Modified)か200を返す。

Etagは頭にW/をつけると弱い検証(意味合いとしては同じ)を行う

l.118 Cach-Control: no-cache

キャッシュをしないという意味ではない
期限切れモデル(Expires)のチェックはしないが検証モデルは利用するとういう意味。
クライアントの日付は正しいとは限らないため期限切れモデルは微妙。
@プロキシサーバーにも残したくない場合はno-storeを使う

l.130 ザーバー駆動型コンテントネゴシエーション(Server Drien Content Negotiation)

URI以外の要素、例えばAccept-Languageによって結果が変わる場合
Vary: Accept-Languageをいれることで言語ごとのキャッシュとなる

l.134 独自ヘッダ

接頭辞にX-を使えるのが一般的だが自分たちのサービス名をつけている時点で判別できるため不要論がある模様

l.165 Content Sniffering

IEにはContent Typeを無視していい感じに判別してくれるおせっかい機能がありセキュリティ上好ましくない。
IE8以降はX-Content-Type-Options: nosniffを指定することで機能をオフにできる。

l.165 X-Request-With

Scriptタグでの読み込みやFormタグでの実行が可能になるのをさけるために X-Requested-With: XMLHttpRequestを付加していない場合にエラーとするような仕組み
Angularではデフォルトオフ、jQueryはcrossDomainフラグでオフにできる。 これはCORS利用時のプリフライトリクエスト対象になるのを嫌っているため

l.180 CSP

Conent-Security-Policy: default-src 'none'のように返すことで他のリソースの読み込みを制限することが可能
他にもインラインスクリプトが無効になったりとかいろいろある