用途:在 Elixir/BEAM 上用 Phoenix 构建 REST/JSON API 与 WebSocket 实时功能,利用 BEAM 的容错与轻量进程实现受监督的 PubSub/Presence。
主要能力:控制器处理 JSON API,配合 plugs、pipelines 与版本化路由;Contexts 拥有数据逻辑(Ecto schema 与查询),向控制器/Channel 暴露窄接口;Channels + PubSub 做实时广播,Presence 跟踪用户/设备;鉴权通过 plugs(浏览器用 session/cookie,API 用 token/Bearer)与签名参数。
使用方式:项目初始化命令为 mix phx.new my_api --no-html --no-live,随后 mix deps.get、mix ecto.create、mix phx.server。关键文件包括 endpoint.ex(plugs、sockets)、router.ex(pipelines、scopes、sockets)、controllers、contexts 与 channels。路由中区分 browser 与 api 管线,用 scope 做版本化,并暴露 socket "/socket"。控制器保持轻薄,错误经 FallbackController 统一转换;Contexts 用 changeset 校验,多步操作用 Ecto.Multi,大列表用分页库。Channel 在 join 时授权并 track Presence,handle_in 中 broadcast。
适用场景:需要 JSON API 与实时推送并存的 Elixir 服务,多节点 Presence、租户分区主题、遥测导出(OpentelemetryPhoenix/Ecto)、发布(MIX_ENV=prod mix release)与 libcluster 集群。
限制与注意:资料未提供具体收费、价格或平台信息。常见陷阱包括控制器直接查询而不走 Contexts、未在 UserSocket.connect/3 授权导致主题暴露、缺少 action_fallback 造成错误格式不一致、未限制事件负载、未使用却保留 longpoll。测试可用 ConnCase、ChannelCase、DataCase 与 fixtures。