2013-08-26 34 views
0

鉴于使用推送状态和RESTful后端的单页应用程序,我们可以想象访问资源列表/resourceName(即/users)。所以/用户将创建用户在RESTful单页上访问JSON资源应用程序

现在的问题是,这个资源JSON或XML的饲料应该也可以映射到/resourceName的格式化列表,因此,如果开机,在/形成我的应用程序入口点,然后一切都很好,导航到时候JS路由器可以触发一个获取JSON数据的Ajax调用。现在的问题是,如果URL直接指向/users,那么我将登陆一个JSON提要,而不是实际的列表。我可以将所有调用路由到主入口点,然后让JS路由器完成工作,但如果我这样做了AJAX调用来获取JSON将会制动。

我记得前一段时间人们将.json添加到他们的json请求,甚至GET参数​​然后让控制器采取不同的操作。我觉得这有点hacky ..有没有其他方法可以解决这个问题?

对于这个问题我使用laravel4后端和backboneJS

回答

0
  1. 它是有效的说你要哪个表示。例如。 JSON,XML或二进制,取决于你想要什么和你开发了哪些序列化器。

  2. 您的框架应该支持默认表示的任何设置,或者如果你提供一些映射URL - >method你应该能够说你要去哪个表示返回 - 默认情况下也是一方或某些对象,表示内拍摄的请求。

+0

感谢您的意见,但并没有真正回答我关于解决该问题的其他方法的问题。 – silkAdmin

1

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

1

您使用什么方法获取不同的响应取决于您想如何去做。既然你问的是一个有意见的话题(没有一个正确的答案),这里有一些你可以探索的选项。

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

  1. Rails的方式:附加在您的要求结束时以.json,.xml或其他扩展和处理中Laravel代码(您可以在“前使用“过滤器来检查请求或Laravel的优秀路由参数,这允许使用正则表达式来定义路由)。
  2. 您可以检查请求中的“accept”标头,并将您的ajax调用中的该标头设置为“application/json”而不是默认的“application/html”,以通知您的应用程序在其响应中使用哪种格式。同样,之前或之后的过滤器可以派上用场,以检查请求并定义响应,适当
  3. 创建一个查询字符串`?格式= JSON”或类似的。同样的话在点1

Laravel没有内置的方法来改变你的响应,但是你可以很容易地检测到被问到的内容并选择返回的格式。但是,确实需要考虑如何实现这一目标。

了我的头顶部的一些选项:过滤器“后”

  1. 使用“前”或检查什么请求“希望”的格式,并且做一些与响应变革,使这项工作
  2. Extend the request and response class为“自动”这(请求类检测格式,响应类改造响应正确的格式)

希望帮助

+0

感谢您的输入,我仍然觉得这有点hacky ..我正在为多个端点的方法,这是一个轻松实现与L4!欢呼 – silkAdmin

+0

太棒了 - 当你来到它时,可能会很快地看到你的最终解决方案。我知道我会好奇,看你做什么! – fideloper

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 
}); 

美丽!

相关问题