【読書記録】Webを支える技術 第4部
第4部の構成
HTML
- 見出しや段落などの構造を定義した文書フォーマット
microformats
- HTMLに比べ、WebAPIをプログラム用に別途用意する必要がない、メンテナンス性などの面ですぐれている
Atom Publishing Protocol(AtomPub)
第10章 HTML
HTMLの構成
- ヘッダとボディから構成される
ヘッダ
- 文書のメタデータ
ボディ
- 文書の内容そのもの
- ブロックレベル要素:段落や見出しなど大きなかたまり
- インライン要素:ブロックレベル要素の中に入る、強調や改行・画像埋め込みなど
第14章 JSON
JSONとは
- データを表現するフォーマット
- JavaScript記法。多くのプログラミング言語がライブラリを用意しており、言語間でデータを受け渡すことが容易
メディアタイプ
- application/json
- UTF-8,16,32のいずれかでエンコードするルール
- UTF-8でエンコードしたJSONの場合
Content-Type: application/json; charset=utf-8
使用可能なデータ型
- オブジェクト:名前と値の集合(メンバと呼ぶ)。メンバの名前は常に文字列。値は下記いずれも使える
- 配列
- 文字列
- 数値
- ブーリアン
- null
{
"name": "Yamada",
"age":34,
"interests":["web","xml","rest"].
"address":{"pref": "tokyo" , "region":"shinjuku"}
}
JSONPによるクロスドメイン通信
- JSON with Paddingの略
クロスドメイン通信とは
- 不特定多数のドメインに属するサーバにアクセスすること
- AjaxではJavaScriptがあるサーバと別のサーバとは通信できない
- 実際にはサービス構成上、ほかのサーバのWebAPIと通信が必要になるシチュエーションもある(地図データなど)
script要素による解決方法
- script要素はブラウザのセキュリティ制限を受けない
- JSONPではJSONを関数名でラップし、ドメインの異なるサーバからデータを取得する
- 上記をレンダリングするとJSONPのURIを自動的にGETし、JSONをサーバ側で読み取ることができる
【読書記録】Webを支える技術 第3部③
第9章 HTTPヘッダ
HTTPヘッダの意義
HTTPヘッダの歴史
メールと共通しているヘッダがある
- Content-Type、Dateなど
- HTTPヘッダの仕様は電子メールのメッセージ仕様をもとに定義されたため
- メールとHTTPで異なる点は、HTTPは双方向通信・メールは単一方向の通信であること
- そのため、HTTPでは電子メールにはないヘッダも存在する
MIMEメディアタイプ
- リソースの表現の種類を指定
言語指定ヘッダ
- Content-Languageの値は「言語タグ」と呼ばれる
- 例)Content-Language; ja-JP
コンテントネゴシエーション
クライアントとサーバが交渉してメディアタイプや文字エンコード、言語タグを決めることもできる
- Acceptヘッダ
- Accept-Charsetヘッダ
- Accept-Languageヘッダ
Content-Length
- メッセージにボディがある場合、そのサイズを10進数のバイトで示す
- 例)Content-Length:5538
チャンク転送
- 動的に画像を生成するようなWebサービスの場合、ファイルサイズが決まる前からレスポンスを少しずつ転送できる
- 例) Transfer-Encoding: chunked
認証
Digest認証
WSSE認証
- HTTP1.1では標準外。AtomPubなどのWebAPIの認証に使われる
- パスワードそのものをNW上に流す必要がなく、Digest認証ほど手間がかからない
- ただしサーバ側では生のパスワードを保存しておく必要がある
補足:OAuth
- Webサービス間でデータをやり取りできるようにするための仕様(認可の移譲)
キャッシュ
- サーバから取得したリソースをクライアントのローカルに蓄積し再利用
ヘッダに持つ情報
- キャッシュ可能かどうか(Pragma)
- 有効期限(Expires)
- 詳細なキャッシュ方法(Cache-Control):上記2点のヘッダの機能を代用可能
ETag
- キャッシュされたリソースにはエンティティタグ(ETagヘッダ)の情報を持つ
- リソースの更新状態を比較するために使用する(更新すると値が変わる)
【読書記録】Webを支える技術 第3部②
第7章 HTTPメソッド
8種類のメソッド
- GET
- POST
- PUT
- DELETE
- HEAD
- OPTIONS
- TRACE:ほとんど使われていない
- CONNECT:ほとんど使われていない
代表的なメソッド
- GET(読み込み)
- POST(作成)
- PUT(作成・更新) ※POSTで代用可能
- DELETE(削除) ※POSTで代用可能
POSTとPUTの使い分け(作成処理)
- 上記の通り、POSTでもPUTでも作成処理が行える
PUT/DELETEのPOSTによる代用
なぜ代用を考えるのか
- ブラウザによってはGETとPOSTしか対応していない場合がある
- セキュリティ上の理由でプロキシサーバがGETとPOST以外のアクセスを制限していることもある
代用方法
- _methodパラメータ(Ruby on Rails)
- X-HTTP-Method-Override(GoogleのGData)
条件付きリクエスト
- メソッドを実行するかどうかの条件をつけ、実行有無をサーバが選択できるようにすることが可能
- 例:ヘッダにリソースの更新日時を付加し、この日時以降更新されていたらGET処理を行う
べき等性(冪等性)と安全性
べき等性
- ある操作を何回行っても結果が同じになること
- PUTやDELETEはべき等。同じPUT(DELETE)を何回行っても同じ結果
安全性
- 操作対象のリソースの状態を変化させないこと
- GETとHEADは安全
まとめ
下記の点でHTTPはすぐれたプロトコルといえる
- HTTPは限られたメソッドで構成される=RESTの統一インタフェース制約
- GETの安全性
- PUTとDELETEのべき等性
- いざとなればなんでもできるPOST
第8章 ステータスコード
分類とよく使われるコード
- 先頭の数字で場合分けすることでCL/SV間の約束事を減らし、結びつきをゆるやかにする効果(疎結合)
1xx:処理中
2xx:成功
- 200:リクエスト成功
- 201:リソース作成成功
3xx:リダイレクト
- 301 リソースの恒久的な移動
- 303 別URIの参照
4xx:クライアントエラー
- 400 Bad Request リクエストの間違い
- 401 Unauthorized アクセス権の不正
- 404 Not Found リソースの不在
5xx:サーバーエラー
- 503 Service Unavailable サービス停止
【読書記録】Webを支える技術 第3部①
第3部の構成
第6章 HTTPの基本
HTTPとは
- Web上でクライアント/サーバ間でリソースをやり取りするためのプロトコル
- RESTの特徴である統一インタフェース、ステートレスサーバ、キャッシュなどを実現し、Webの基盤となっている
HTTPのバージョン
- 本書執筆時点で最も広く使用されているバージョンはHTTP1.1
※すでにHTTP2や3が出ている時代なので、詳細は割愛します(本記事は初版2010年発行、2022年に発行された第16刷をもとに執筆)
HTTPの仕組み①クライアントとサーバ
Salesforceのフローの使用場所を確認する方法
Salesforceのカスタム項目の画面には「使用場所」のボタンがあり、どの画面や処理で項目を使用しているかを確認することができますが、
項目以外でも「このリソース、どこで使ってたっけ?」と悩むことがあります。
今回、フローを題材にメタデータで使用場所を検索する方法をまとめます。
VS Codeを使用します。
こちらのオンラインセミナーで作成した、ケースを作成するフローを題材にします。
コード初心者でも大丈夫。Einstein GPTでApex開発に挑戦! #Salesforce - Qiita
VS Codeでメタデータを取得する
※拡張機能「Salesforce Package.xml Generator Extension for VS Code」をインストールしておくと便利です。
また、取得したメタデータに漏れがあると、そもそも検索できないので注意です。
フローのAPI参照名でメタデータを検索する
ホーム画面に配置していることがわかりました。
Salesforce画面上で確認できるようになれば嬉しいですが、メタデータを使いこなせるとリリース時などにも便利なので、今後もこの方法を活用していきたいと思います。
補足「Flow」と「FlowDefinition」について
フローのメタデータとして「Flow」「FlowDefinition」の2種類がありますが、下記の違いがあります。
- Flow:フローの定義内容の詳細
- FlowDefinition:現在有効なバージョン
【読書記録】Webを支える技術 第1部②
第3章 REST
アーキテクチャスタイルとしてのREST
RESTにとって重要な「リソース」の概念
- リソースとはWeb上に存在する、名前を持ったありとあらゆる情報
例:東京の天気予報、東京駅の写真、このブログ
RESTを構成する特徴
- 下記6つの特徴を持つ
- クライアント/サーバ(ここに下記5つの制約を付加したものがREST)
:UI(クライアント)と処理(サーバ)を分離することで、マルチプラットフォーム(PCやスマホ、ゲーム機・・)が実現できるなどの利点
- ステートレスサーバ
:サーバ側でアプリケーションの状態を持たないことで、サーバの実装を簡略化できる
※例外としてHTTPをステートフルにする要素:Cookieを使ったセッション管理
- キャッシュ
:一度取得したリソースをクライアント側で使いまわすことで、サーバとの通信を減らし処理を効率化する
- 統一インタフェース
:インタフェースを固定。たとえばGETやPOSTなど8個のメソッドしか定義しないことで、実装の独立性が向上する
- 階層化システム
:ロードバランサやプロキシをCL/SV間に設置できるが、CL側はそのことを意識せずSVを利用できる(統一インタフェースを採用することで階層化が可能になる)
- コードオンデマンド
:プログラムをクライアントにダウンロードして実行する 例)JavaScript