中型Laravel项目架构(一) - 路由和中间件
中型Laravel项目架构(一) - 路由和中间件

对于像Laravel此类的MVC框架来说,初学者或者没有架构概念的使用者,一般会有几个问题:

  • 所以逻辑都写在Controller,导致Controller臃肿
  • 所有逻辑都写在Model,导致Model臃肿
  • 代码过于分散,不能很好的复用

这其实都不能算得上是错误,对于一个小微型的应用来说,如此实现很快很好用,并且维护简单,但是如果代码量到了一定程度,就非常痛苦,Controller或者Model总是一坨一坨的代码,写到Model里倒也还行,如果总是在Controller中,还没办法复用,下次遇到相似逻辑就直接复制过来,然后修修改改,这一坨代码变成那一坨。

作为一个Coder,我的要求是: 「代码要有洁癖」

知道问题出在哪里,我们开始重构我的代码。

路由-中间件

虽然路由这方面的优化不大,但我还是想从这个项目的开始来谈起,路由的命名,以及中间件的使用,值得我去稍作注意。

路由命名

路由的命名,很多人都用RESTful的方式来做为标准,在开发过程和前端同事协作的过程中,前端的工程师并不喜欢使用此类标准。

既然都是HTTP请求,区分POST和GET请求本身就十分麻烦,更别提GET请求参数放在URL上了。- 前端工程师

如果按照标准的RESTful的开发标准,对于用户的某个接口,可能是如下:

GET: /User 列出所有用户信息

POST: /User 新建一个用户信息

PATCH: /User/ID 更新一个用户信息

Delete: /User/ID 删除一个用户

同样的URI定义,不同的是协议(动作)的不同,如果沟通不善,或者开发不注意很可能就导致接口的错误调用,更新操作变删除,列表操作变新建,给开发造成非常大的困扰。

我们采用RESTful的反模式来重新设计整个API,全部采用POST请求,URI中包含动作,所以上面的接口地址就改写为:

GET: /Users 列出所有用户信息

GET: /User/Create 新建一个用户信息

GET: /User/Update 更新一个用户信息

GET: /User/Delete 删除一个用户

上面的改写可以说是,完全不符合RESTful标准的,但是也不必拘泥于此标准,适合整个团队的方案就是最好的方案。

中间件的使用

路由的下一层就到达了中间件,很多初级的开发者都会忽略掉这一层,认为逻辑控制应该放在控制器,对于一些对于请求和相应需要处理的统一操作,都可以放在中间件里来实现,比如:用户权限的验证,Log服务等等。

具体中间件的使用不做介绍,举一个小例子,每次API接口请求都包含着Token,我们是同过Token来获取某个用户的信息,验证用户的合法性,那么这个操作就可以放到中间件。

而且还可以使用Laravel中的容器注入,将验证后的用户信息放入,以便在控制器中使用,非常之方便。

所以说,中间件是介于请求和响应之间的一层,非常适合做统一的请求,响应处理,这些统一的逻辑切记不要放在控制器中。


If You Have Any Question, You Can Contact Me Through liam@blue7wings.com, @Blue7Wings, #Liam_Hsia