在REST中提供HTML应用程序页面和JSON数据
在RESTful应用程序中,使用“资源”URL提供JSON数据和访问数据的页面是否是一个好主意?如果没有,我应该如何区分这两件事 假设我有一个页面在REST中提供HTML应用程序页面和JSON数据,json,rest,http,content-negotiation,http-accept-header,Json,Rest,Http,Content Negotiation,Http Accept Header,在RESTful应用程序中,使用“资源”URL提供JSON数据和访问数据的页面是否是一个好主意?如果没有,我应该如何区分这两件事 假设我有一个页面/routes,我有一个页面列出所有路由。我应该这样做: HTML页面 这似乎是错误的,因为这两个请求指向相同的URL/URI,但返回不同的资源(一个是应用程序页面,另一个是数据)。为Accept:text/html提供这样的服务似乎更合适: GET /routes Accept: text/html Response: <table>
/routes
,我有一个页面列出所有路由。我应该这样做:
HTML页面
这似乎是错误的,因为这两个请求指向相同的URL/URI,但返回不同的资源(一个是应用程序页面,另一个是数据)。为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>
GET/routes
接受:text/html
答复:
数字起点
奥莱安斯巴黑文中心95号广场
(我可能不会这么做,因为它不是很有用。)
我考虑过几个选择:
Accept
标题/routes?type=html
)/routes
,应用程序使用/pages/routes
)/routes
,应用程序使用/routes.php
)facebook.com
/graph.facebook.com
,twitter.com
/api.twitter.com
),这不是我的选择
有什么想法吗?这个问题不应该主要基于观点,因此参考文献将非常受欢迎。第4项看起来是最好的选择,因为HTML页面与API中的资源类型不同。 将页面与API资源分开似乎是个好主意。
twitter和Facebook的例子也支持这种方法 您可以使用HTTP Accept标头,这将允许进行运行时内容协商。参考
但是我更喜欢使用两个单独的URL,比如/routes.json作为json响应,/routes.html作为即用html。如果“即用”html指的是我第三块中的代码,我根本不打算提供“即用”html,因为它似乎没有任何用处。我主要关心的是用户的JSON和HTML页面。
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... */
]
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>