RESTful アプリケーションでは、「リソース」URL を使用して JSON データとデータにアクセスするページの両方を提供することは良い考えですか? そうでない場合、2つのことをどのように区別すればよいですか?
ページ/routes
があり、すべてのルートを一覧表示するページがあるとします。私はこれを行う必要があります:
HTML ページ
GET /routes
Accept: text/html
Response:
<h1>Routes</h1>
<p>blah blah blah</p>
... <table></table>
<script>
$.getJSON('/routes').done(insertDataIntoTable);
</script>
JSON レスポンス
GET /routes
Accept: application/json
Response:
[
{"number": "95", "start": "Place d'Orléans", "end": "Barrhaven Centre"},
{"number": "96", "start": "Hurdman", "end": "Kanata"},
{"number": "97", "start": "Bayshore", "end": "Airport/Aéroport"},
/* etc... */
]
2 つの要求が同じ URL/URI に対して行われているため、これは間違っているように見えますが、異なるリソースが返されます (1 つはアプリケーション ページで、もう 1 つはデータです)。次のようなものを提供する方が適切と思われますAccept: text/html
:
GET /routes
Accept: text/html
Response:
<table>
<thead>
<tr><th>Number</th><th>Start</th><th>End</th></tr>
</thead>
<tr><td>95</td><td>Place d'Orléans</td><td>Barrhaven Centre</td></tr>
<!-- etc... -->
</table>
(あまり役に立たないので、おそらくやらないでしょう。)
私はいくつかのオプションについて考えました:
Accept
上記のように HTTP ヘッダーを使用します- クエリ パラメータを使用する (例:
/routes?type=html
) - ページに別のパスを使用する (例:
/routes
データ/pages/routes
用とアプリケーション用) - 拡張機能を使用する (例:
/routes
データ用および/routes.php
アプリケーション用)
1 と 2 はあまり正しくないようです。ページはそれ自体がリソースであり、アプリケーション内のエンティティを正確に表しているわけではありませんが、私は 3 にあまり熱心ではありません。オプション 4 は単純に醜く見えます。
主要なサイトが何をしているかを調べてみましたが、それらはすべて別のホスト/サブドメイン (例: facebook.com
/ graph.facebook.com
、twitter.com
/ api.twitter.com
) からデータを提供していますが、これは私にとって選択肢ではありません。
何か案は?この質問は主に意見に基づくものであってはならないので、参考にしていただければ幸いです。