鉴于使用推送状态和RESTful后端的单页应用,我们可以想象在/resourceName
(即/users
)访问资源列表。所以/ users会创建一个格式化的用户列表
现在问题是这个资源JSON或XML提要也应该映射到/resourceName
,所以如果从我/
的应用程序入口点启动,那么一切都很好,导航到{{1 JS路由器可以触发获取JSON数据的Ajax调用。现在的问题是,如果URL直接指向/users
,那么我将登陆JSON提要而不是实际列表。我可以将所有调用路由到主入口点,然后让JS路由器完成工作,但如果我这样做,则需要AJAX调用以获取JSON wil闸门。
我记得很久以前人们将/users
添加到他们的json请求中,甚至是GET参数.json
然后让控制器采取不同的操作。我发现有些hacky ..还有其他方法可以解决这个问题吗?
就此而言,我正在使用laravel4后端和backboneJS
答案 0 :(得分:1)
我认为请求结尾的.json
是最好的方法。另一种方法可能是为api请求创建一个单独的端点端点api.mydomain.com
vs www.mydomain.com
答案 1 :(得分:1)
您使用什么方法来获得不同的响应取决于您希望如何进行此操作。既然您在询问有关自以为是的主题(没有正确答案),那么您可以选择以下一些选项。
首先,这是一个good read from Apigee on API design,它涵盖了我在这里写的内容。请参见第20页“支持多种格式”
Laravel没有内置方法来为您更改响应。但是,您可以非常轻松地检测出被询问的内容并选择要返回的格式。但是,确实需要考虑如何实现这一目标。
我头脑中的一些选项:
希望有所帮助
答案 2 :(得分:0)
说出你想要的代表是有效的。例如。 JSON,XML或二进制文件取决于您的需求以及您开发的序列化程序。
您的框架应该支持默认表示的设置,或者如果您提供一些映射URL
- > method
您应该能够说出您要返回的代表 - 也可以是默认情况下,也可以代表您的请求。
答案 3 :(得分:0)
我最终使用了@Aaron Saunders建议的不同端点。在laravel 4中,这很容易使用组路由实现:
app.php:
'domain' => 'whatever.dev',
routes.php文件:
define('APP_DOMAIN', 'app.' . Config::get('app.domain'));
define('API_DOMAIN', 'api.' . Config::get('app.domain'));
Route::group(array('domain' => API_DOMAIN), function()
{
// API ROUTES
});
Route::group(array('domain' => APP_DOMAIN), function()
{
// VIEW ROUTES
});
美丽!