小猿大圣

概述 · Phoenix 一个Elixir编程语言的web框架

小猿大圣 · 2016-12-15翻译 · 1210阅读 原文链接

Phoenix 是一个基于Elixir语言的MVC模式的web开发框架。如果你有其他的web框架像Ruby on Rails或者Python的Django的开发经历,她的许多组件和概念会感觉很熟悉。

Phoenix 融合了两种开发特性的精华 - 极高的开发效率和超高的应用性能。她还提供了有趣的新特性,比如实现了实时特性,以及高速度预编译模板。

如果你已经熟悉 Elixir,很好! 如果没有,有一些地方可以学习它。 Elixir 指南 是一个很好的开始。我们在学习 Elixir 和 Erlang 指南上也有一个有用的资源列表。

这篇介绍性指南的目的是提供一个简短的,高层次的Phoenix概述,使您对她有一个全面的了解。

<iframe src="https://player.vimeo.com/video/131633172" width="640" height="360" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>

Phoenix

Phoenix 实际上是建立在一个模块化、灵活的多层次系统之上,包括接下来在这篇概述里要谈到的PlugEcto。而Phoenix更基础的 Erlang HTTP server, Cowboy 组件,本文档将不会直接涉及。

Phoenix 是由许多不同的零件组成的,它们目标明确,各司其职,共同体现在构建一个Web应用程序上。我们将在接下来的章节中详细介绍他们,但是这里仅做一个快速分解。

  • 终端

    • 处理请求到知道其到达路由部分

    • 提供一组核心组的插件,适用于所有请求

    • 将请求分发给指定的路由

  • 路由

    • 解析传入的请求并分配给指定的控制器和动作(controller/action),按需要传递参数

    • 生成一些 helpers 方法提示路由路径和指向的资源

    • 定义命名的管道,通过我们的请求

  • 管道

    • 允许简单应用的插件组设置路由

    • 控制器

    • 提供的功能,呼叫actions,处理请求

  • 动作( Actions )

    • 准备数据并将其传递到视图中

    • 通过视图调用渲染

    • 执行重定向

  • 视图

    • 渲染模板

    • 充当展示层

    • 定义可以在模板中修饰数据的一些helper方法

  • 模板

    • 如名字所示 :)

    • 预编译并且快速

  • 通道

    • 管理方便实时通信的套接字(sockets)

    • 和控制器概念类似,另外她支持具有持久连接的双向通信

  • PubSub(发布/订阅)

    • 在通道(Chnannels)层的下面,允许客户端订阅 topics

    • 为第三方的订阅和发布抽象出统一的适配器

插件( Plug )

Plug 是一个通过可组合的模块们去构建web应用的规范,基于这个规范,她实现了一系列可重用的模块和函数。她们提供了松耦合的功能----比如请求头的解析和日志系统。得益于小而一致的API,组件们可以像管道命令那样被定义和顺序执行,他们也可以被重新使用在一个项目或跨项目。

Plugs 被设计成几乎能处理任何事,从权限验证到参数预处理,甚至渲染。

总的来说,Phoenix 的插件具有很大的优势,尤其是路由(router)和控制器(controllers)部分。

Plug 最重要的功能之一就是为 HTTP server 提供适配器,并最终向我们的用户提供应用程序内容,但目前 Plug 只是为 Cowboy 充当适配器,后者是 Loïc Hogui用 erlang 编写的 HTTP server 99s

更多细节参考 插件指南

Ecto

EctoElixir的一个数据库的封装和语言集成查询组合工具,通过Ecto,我们可以读写不同的数据库,模型化我们的域数据,用类型安全的方式编写复杂的查询,并保护我们免受常见的攻击,比如SQL注入等等。

Ecto 建立在如下四个核心概念之上:

  • 信息库 - 一个信息库代表一个独立的数据库连接。每个数据库操作都是通过这个信息库完成。

  • 模型 - 模型是对我们数据库数据的定义,它们定义表名、字段以及每个字段的类型,同时还定义模型之间的关联信息。

  • 查询 - 查询是连接信息库和模型的纽带,能让我们优雅的从信息库检索数据并作用在模型上。

  • 变更 - 变更声明转换规则,用于处理模型数据以便于上层应用使用,包括类型转换,验证等等。

新建的 Phoenix 应用默认使用 Ecto 和 PostgreSQL数据库。

关于这些指南的一个说明

如果你发现了这篇指南存在错误或者想帮助改善这篇指南,请在Github的Phoenix指南checkout。提问题并且解决问题的请求会被愉快的接受!

译者补充

1、phoneix中文社区:

2、phoneix中文入门教程

3、phoneix中文文档

4、Elixir 程序设计

相关文章