岩本隆史の日記帳(アーカイブ)

はてなダイアリーのサービス終了をうけて移行したものです。更新はしません。

多言語リソースのURIに関する覚書

RESTful Webサービス』の「4.6.1 表現の選択」に「プレスリリースが英語とスペイン語の両方で提供されている場合」への言及があります。著者が推奨するのは、各言語用に個別のURIを割り当てる方法です。

  • http://www.example.com/releases/104.en
  • http://www.example.com/releases/104.es

http://www.example.com/releases/104 のみを提供し、コンテントネゴシエーション(同書では「コンテンネゴシエーション」)でクライアントの要求する言語を判別する方法もありますが、外部プログラムにURIを渡す場合などを考慮すると非推奨、とする著者の主張には納得がいきます。

同じリソースに複数の表現があり、それぞれにURIが割り当てられるとすると、著者のいう「希薄化」が問題になります。「つまり、プレスリリースを異なる言語で話している人々が、別のことを話しているように見える」問題です。

希薄化を緩和するには、言語に依存しない「プラトニック形式のURI」(http://www.example.com/releases/104)を提供する方法があります。プラトニック形式のURIを「4.3.2 URIとリソースの関係」にある「正規URI」とみなし、非正規URI(104.en や 104.es)がリクエストされた場合には Content-Location ヘッダで正規URIを返すのです(付録「C.1.14 Content-Location」も参照)。

正規URIに対してリクエストがあった場合、サーバは英語とスペイン語、どちらでレスポンスを表現するか決めなければなりません。Accept-Language ヘッダを見てもよいのでしょうが、それだとコンテントネゴシエーション方式と紛らわしいので、デフォルト言語をあらかじめ決めておいてもよいのではないか、と個人的には考えています。