2014-10-01 36 views
4

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

现在,第二部分。如果我正在构建一个简单的Todo应用程序,我应该如何在Laravel中管理我的路线和资源。这是我非常困惑的地方,有点难以解释,但留在我身边一会儿。例如,我在/ users处有一个用户资源,我可以通过在/ users发出GET请求来获取所有用户,或者通过在/ users处发出POST请求来创建新用户。同样,我可以在/ users/1上发出GET请求,并用其他请求动词获取第一个用户等等。现在,我有另一个资源称为任务。我应该如何实现这个资源?我应该像嵌套资源say/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对象中。

我在正确的方向思考?我是新手,我不完全知道处理这种数据库体系结构问题的标准方法是什么?什么是最佳实践?

+0

保持angularjs文件和Laravel文件分开这样您的应用程序将是少耦合。此外,如果您需要部署多个前端服务器以实现可扩展性,则可以轻松完成。它还有其他几个优点。 – 2014-10-20 05:23:59

+1

这要么太宽泛,主要是基于意见。关注一个问题。 “我应该在哪里放置AngularJS文件?” “什么是标准或最佳实践”? “如果我正在构建一个简单的应用程序,我应该如何管理我的路线?” “我做对了吗?”? “还有,如果我使用的是NoSQL DB?” “我在朝着正确的方向思考?” “处理这种数据库架构问题的标准方法是什么?最佳实践是什么?”问题太多,焦点不够,询问意见。 – 2014-10-20 12:46:41

回答

1

这是我的建议。

基本上你需要将你的应用程序划分为模块。对于例如登录,功能1,功能2等现在你应该有每个模块的文件夹,你可以保存所有与它相关的文件(controllers.js,services.js,index.html,style.css,filters.js和[name ]这是你分离所有的代码,这是可行的移动你的代码的方式。

您可以定义模块为:

(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创建变量,以便您可以从一个位置对其进行控制。

希望这有助于:)

0

我应该将它们放置在Laravel安装的公共文件夹或我应该让他们完全 分开,因为我会发布的资源调用Web服务,它会返回 JSON数据,因此有不需要他们在同一个地方。

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

现在,对于第二部分。

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

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

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

1

第一部分

这是你高达。如果您不想让原始组件公开显示,请将它们放在公共目录之外的单独目录中。

第二部分

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

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

同样,要使用PARAM users = null获取所有任务发出的GET请求到“/ tasks”。要获取链接到一组用户的所有任务,使用PARAM用户的GET /任务= < 逗号分隔的用户标识>。 GET/tasks/{task_id}将以任务细节和相关用户进行响应。要添加一个或多个任务,POST到“/ tasks”;可选地发送用户=其他假设当前用户在服务器端。

,使现有的任务和用户之间的关系,使用PUT /任务/ {TASK_ID}与PARAM用户= < 逗号分隔的用户id>

相关问题