我应该在哪里将Angularjs文件保存在我的Web应用程序中,以及如何构建我的路由和资源?

时间:2014-10-01 11:23:41

标签: angularjs rest laravel-4

我正在使用Laravel和Angluarjs的前端单页应用程序构建RESTful Web服务。现在我应该在哪里放置Angularjs文件?我应该将它们放在Laravel安装的公共文件夹中,还是应该将它们完全分开,因为我将向Web服务中的资源发出调用,它将返回JSON数据,因此不需要它们在同一个地方。什么是标准或最佳实践?

现在,第二部分。如果我正在构建一个简单的Todo应用程序,我应该如何管理Laravel中的路由和资源。这是我真的很困惑的地方,这有点难以解释,但与我保持一分钟。例如,我在/ users有一个用户资源,我可以通过在/ users发出GET请求来获取所有用户,或者通过在/ users发出POST请求来创建新用户。类似地,我可以在/ users / 1发出GET请求并获取第一个用户,依此类推其他请求动词。现在,我有另一个叫做tasks的资源。我该如何实现这个资源?我应该像嵌套资源说/ users / {user_id} / tasks一样实现它。当我在/ users / 1 / tasks发出GET请求时,它将获取第一个用户的所有任务。但现在它变得复杂,因为如果在/ users / 10 / tasks / 1发出GET请求,它应该为第10个用户获取第一个任务。但是,由于我必须寻找第10个用户的第一个任务,因此这种逻辑的实现变得非常困难。

我想通过在/ users / {user_id} / tasks中设置GET路由来解决这个问题,这显然会返回指定用户的所有任务。然后我会创建一个完全不同的资源/任务来处理所有其他请求动词。我这样做了吗?

如果我使用的是像MongoDB这样的NoSQL数据库,在这种情况下,数据将以/ users / {user_id} / tasks / {task_id}不会很难实现的方式存储每个用户都将在他们自己的JSON对象中。

我在思考正确的方向吗?我是新手,我不知道解决此类数据库架构问题的标准方法是什么?什么是最佳实践?

3 个答案:

答案 0 :(得分:1)

这是我的建议。

基本上,您需要将应用程序划分为模块。比如说登录,功能1,功能2等。现在你应该有每个模块的文件夹,你可以保存所有与之相关的文件(controllers.js,services.js,index.html,style.css,filters.js和[name]模块] .js)这样就可以将所有代码分开,从而使代码移动成为可能。

您可以将模块定义为:

(function () {
    'use strict';
    angular
        .module('myapp.login', [
            'myapp.login.controllers',
            'myapp.login.services'
        ]);
}());

你需要在app.js中包含这个,就像这个

angular
    .module('myapp', [ 'ngRoute',
    'ngResource',
    'myapp.login'
])

这样您可以添加所有模块。

您想要包含的一个更重要的文件夹是公共文件夹。您可以在其中包含应用程序中可能包含的所有可重用组件的模块。

对于测试,您可以在其中包含一个单独的测试文件夹(e2e和单元文件夹)。我一直在使用黄瓜进行测试,我创建了features文件夹,我为每个模块创建文件夹,我在其中定义了功能。您还可以创建一个名为steps的文件夹,您可以在其中为每个模块分别使用单独的js文件。

除此之外,您还可以拥有配置文件,您可以在其中为所有api创建变量,以便您可以从一个地方控制它。

希望这会有所帮助:)

答案 1 :(得分:1)

第一部分

这取决于你。如果您不想公开显示原始组件,请将它们保存在公共目录之外的单独目录中。

第二部分

我的意见是你应该创建两个资源URI - “/ users”和“/ tasks”。将它们视为多对多实体,以便将来扩展。这样,您也可以将任务分配给多个用户。例如,您和您的伴侣共享的“电费支付”。

让所有用户向PARAM tasks = null的“/ users”发出GET请求。要使所有用户链接到一组任务,请使用PARAM任务的GET /用户=< 逗号分隔的taskIds >。 GET / users / { user_id }响应用户详细信息和相关任务。要创建一个或多个用户,请POST到“/ users”。

同样,为了让所有任务向PARAM users = null发出GET请求到“/ tasks”。要将所有任务链接到一组用户,使用PARAM用户的GET /任务=< 逗号分隔userIds >。 GET / tasks / { task_id }将响应任务详细信息和相关用户。要添加一个或多个任务,请POST到“/ tasks”;可选地发送users =< 逗号分隔的userIds >否则假设服务器端的当前用户。

要在现有任务和用户之间建立关系,请使用PUT / tasks / { task_id }与PARAM用户=< 逗号分隔的userIds >

答案 2 :(得分:0)

  

我应该将它们放在Laravel安装的公共文件夹中,还是应该完全保留它们   因为我将发布对Web服务中的资源的调用,它将返回   JSON数据,因此不需要它们在同一个地方。

首先,由于Same Origin Policy,您应该将Angularjs文件放在公用文件夹中。 如果你想把它放在另一个ip:port中,那么应该使用JSONP而不是JSON。 (related

  

现在,第二部分。

你走在正确的道路上?这是一个意见问题。做实验。并自己决定。在我看来,设计问题上没有最佳实践取决于用例。

无论哪种方式,我认为你的方法是不对的。你想打开用户列表吗?没有!另一种选择是向名为“owner”的任务添加一个字段,并匹配登录用户。

要保持RESTful,您可以使用token or cookie在没有会话的情况下发送用户信息。