リソースとURIとクエリストリングの話

RPCのHTTP風正書法 - winplusの日記」を読んで、論旨とは無関係に気になった点があったので、例によってRoy T. Fieldingの意見を調べた。

  • http://example.com/blog/entry123.html
  • http://example.com/blog/entry123.json

上記の2つのURIは、それぞれ異なる2つのリソースを示す(参考1参考2)。

  • http://example.com/blog/entry123?type=html
  • http://example.com/blog/entry123?type=json

上記の2つのURIも、それぞれ異なる2つのリソースを示す。ただし、望ましいクエリストリングの使い方とはいえない(参考3参考4)。

  • http://example.com/blog/entry123?type=edit

上記のURIも、もちろん異なるリソースを示す。ただしこれも、望ましいクエリストリングの使い方とはいえない。

というわけで、望ましいURIは下記のようなものだろう。

HTML形式のブログ記事リソース
http://example.com/blog/entry123.html
JSON形式のブログ記事リソース
http://example.com/blog/entry123.json
ブログ記事編集画面リソース
http://example.com/blog/entry123/edit

まとめ

  • 2つのURIをGETするとして、それぞれに異なる応答が期待されるのなら、それらは異なるリソースを示す
  • クエリストリングはクエリにのみ使うべし

Roy T. Fieldingはそう言っている。

ハイパーリンクは何をつないでもいい

ハイパーリンクはリソースをつなぐべき、という指針はRESTの統一インターフェース(Uniform Interface)制約をWebシステムのアーキテクチャに適用したときに導かれるものだ。RESTのスタイルに関心がない、言い換えればスケーラビリティにこだわりのないAPI設計者が、RPC的にURIやHTTPメソッドを使うのは自然なことだろう。

僕自身はスケーラビリティよりもRESTのシンプルさに惹かれている。API設計をドライブしてくれる感じがするからだ。ハイパーリンクはリソースをつなぐべき、という指針には特に疑問を持たないし、これからも従っていくつもりだ。

記事検索
Twitter