RESTful Web APIs 読書メモ(8)
Chapter 8. Profiles
- アプリケーション特化の拡張機能に対するドキュメント化
アプリケーション特化の用語の定義、ドキュメント化
現在、一般的用いられていることは、大量のhuman-readableなドキュメントを作成すること
- APIドキュメントについてはRESTful(自己記述性メッセージ)でない
クライアントアプリはいかにしてドキュメントをさがすのか?
クライアントがリクエストやレスポンスの意味を推測すべきではない
- メッセージ自身が、詳細に説明すべき
レスポンスはクライアントがなすべきことを全て含めるべき
- Content-type
- リソースの解析方法を示す
- ハイパーメディアコントロール
- 次に発行すべきリクエストをレスポンスに含める
- プロトコルセマンティクスを明示する
- ドメイン特化フォーマットの場合
- リソースに問題領域の状態遷移を含める
- アプリケーションセマンティクスを付与する
- Content-type
多くの場合、プロトコルセマンティクスとアプケーションセマンティクスの両方をフォーマットから読み取ることはできない
- 仕様Profileが欠損している
Profile
media-typeを元にリソースを解析しても得られない仕様(APIドキュメント)
- たいていHuman-readableな文書
- machine-readable profile
- linkやdescripterで記述されたhuman-readableなドキュメント(Profile)を自動収集できる
定義(RFC6906)
- リレーションを使用してProfileとリンク(rel="profile")
- IANAにそのリレーションが登録されている
- relをサポートするあらゆるハイパーメディアコントロールで利用可能
- htmlのaタグ
- html, Collection+JSON, HALのlinkタグ
- RFC5988のLINKヘッダ
- relをサポートするあらゆるハイパーメディアコントロールで利用可能
- Ontent-Typeパラメータに追記
- application/collection+json;profile="(リンク先URL)"
- すべてのmedia-typeで使用できるわけではない(RFC4288)
- Collection+JSON
- JSON-LD
- HAL
- XHTML
- httpヘッダでprofileリンクを示したいなら、すべてで使えるLINKヘッダを使うべき
- Microdataのitemtype
- Urlで、リンク先のprofileを指定する
- IANAにそのリレーションが登録されている
- リレーションを使用してProfileとリンク(rel="profile")
プロトコルセマンティクスProfile
- どのようなHTTPリクエスト発行されるのかについて
- フリーフォームな文体で記述
- ハイパーメディアコントロールを持たないmedia-type(JSON)に対して用意
- HALのようにプロトコルセマンティクスが削ぎ落とされている場合に用意
- ハイパーメディアコントロールであれば、リンクリレーションを用いて指定
- ハイパーメディアコントロールから駆動される状態遷移を記述した文字列
- GETでアプリケーション状態を遷移
- POST, PUT,DELETEでリソース状態を遷移
- ハイパーメディアコントロールから駆動される状態遷移を記述した文字列
アプリケーションセマンティクスProfile
人が用語を理解するようにコンピュータにも理解させること
利用するデータ構造、パラメータなどの説明文を用意
用語をセマンティクス記述子に表記
- microformats
- class属性
- Siren
- classエンティティ
- 生JSON
- オブジェクトキー
- 生XML
- タグ名
- microformats
XMDP
- machine-readable profileの一種
- ほかのmicroformatを説明するためのmicroformat
- class属性に特別な意味があることを伝えられる
- 自動的に理解するわけではなく、そんなツールを書く必要がある
ALPS
- XMDP同様、meta-microformst
- HTML専用
- プロパティ
- descriptor
- 一つの用語に対して一つ作る
- type="semantic"
- 子要素のdocタグにhuman-readableな説明を書く
- docタグ以外はmachine-readable
のようにすることで、ハイパーメディアコントロールにすることもできる
- descriptor
JSON-LD
- 元のJSONドキュメントに"context"と呼ばれるmachin-readableドキュメントを組み込む
- APIの変更なしに組み込むことが可能
- RDFからの派生
- アプリケーションセマンティクスを直接説明せず、ハイパーメディアリンクを添えるだけ
- "n":
- "photo_link": { "@id":
, "@type": "@id" }
- "n":
API自身にドキュメントを埋め込む
APIにhuman-readableドキュメントを埋め込めるフォーマットを用いる
- HTML
- inputタグのvalue属性
- HAL
- linkタグのtitle属性
- Siren
- actionオブジェクトのtitleフィールド
- HTML
machine-readableとhuman-readableドキュメントの両方を用意することについて
- 人との対話により動くクライアント、自動化クライアントの両対応のため
- 両方のセマンティクスギャップをより縮める