在RESTful单页应用程序上访问JSON资源

时间:2013-08-26 04:38:50

标签: rest backbone.js laravel single-page-application

鉴于使用推送状态和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

4 个答案:

答案 0 :(得分:1)

我认为请求结尾的.json是最好的方法。另一种方法可能是为api请求创建一个单独的端点端点api.mydomain.com vs www.mydomain.com

答案 1 :(得分:1)

您使用什么方法来获得不同的响应取决于您希望如何进行此操作。既然您在询问有关自以为是的主题(没有正确答案),那么您可以选择以下一些选项。

首先,这是一个good read from Apigee on API design,它涵盖了我在这里写的内容。请参见第20页“支持多种格式”

  1. Rails方式:在请求结束时附加.json,.xml或其他扩展名并在Laravel中处理该代码(您可能希望使用“之前”过滤器来检查请求或Laravel的出色路由参数,允许使用正则表达式来定义路线。)
  2. 您可以检查请求中的“accept”标头,并在ajax调用“application / json”而不是默认的“application / html”中设置该标头,以通知您的应用程序在其响应中使用哪种格式。同样,之前或之后的过滤器可以派上用场检查请求并根据需要定义响应
  3. 创建一个查询字符串`?format = json'或类似的。与第1点相同的注释。
  4. Laravel没有内置方法来为您更改响应。但是,您可以非常轻松地检测出被询问的内容并选择要返回的格式。但是,确实需要考虑如何实现这一目标。

    我头脑中的一些选项:

    1. 使用“之前”或“之后”过滤器检查请求“想要”格式的内容,并对响应进行一些转换以使其起作用
    2. Extend the request and response class“自动化”这个(请求类检测格式,响应类将响应转换为正确的格式)
    3. 希望有所帮助

答案 2 :(得分:0)

  1. 说出你想要的代表是有效的。例如。 JSON,XML或二进制文件取决于您的需求以及您开发的序列化程序。

  2. 您的框架应该支持默认表示的设置,或者如果您提供一些映射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
});

美丽!