Kōhei Yamamoto

RFC 5988 "Web Linking" を読んだ

JSON を返す API サーバでページネーションを実装したいと思っていて、前/後ページや最初/最後のページなどといった他のリソースとの関係を表すメタ情報をどこに格納すべきかなと考えていました。解決方法として少なくとも次の二つがありそうです。

レスポンスヘッダに当該メタ情報を入れる後者の方法について提案している文書としては、RFC 5988 “Web Linking” があります。この方法は大きなサイズのコレクションをページネーションで返す API のレスポンスを設計するときにも使えるという話を見つけたので、メタ情報はボディよりヘッダに入れたほうが場所としては適切だろうと思い、ページネーションを実装する前に、この RFC を読んでみました。

RFC 5988 の要点をハイパーざっくりまとめておきます。


イントロ

リンクとは

リンク関連型

関連型の種類

レジストリに最初に登録された関連は該当 RFC 6.2.2 節に載っている。

現在のレジストリ登録済み関連は IANA のページに載っている。結構増えてますね。

例を示す。

“chapter2” が現在のリソースの前に位置していることを示すリンク。

Link: <http://example.com/TheBook/chapter2>; rel="previous"; title="previous chapter"

ルートリソース (”/”) が拡張関連型 http://example.net/foo でこのリソースと関連していることを示すリンク。

Link: </>; rel="http://example.net/foo"

title* 属性でドイツ語で「前の章」、「次の章」というタイトルを指定しているリンク。

Link: </TheBook/chapter2>; rel="previous"; title*=UTF-8'de'letztes%20Kapitel,
      </TheBook/chapter4>; rel="next"; title*=UTF-8'de'n%c3%a4chstes%20Kapitel

複数のリンクも持てる。

Link: <http://example.org/>; rel="start http://example.net/relation/other"

結局、ページネーションでは、Link Relations あたりに載っているリンク関連型から、first, last, next, previous を使ってリンク先を示すようなメタ情報をヘッダに入れておけば十分そうです。

参考資料

脚注

  1. https://www.ietf.org/rfc/rfc3987.txt