企业 Mobile 框架

Odoo 企业版移动端为什么先问版本再谈登录:version_info、authenticate 与 session route contract 讲透

web_mobile 的价值不是一个“手机壳”,而是一组稳定的服务契约:先探测服务端兼容性,再认证,再以统一 session JSON-RPC 结构支撑

企业 框架
进阶 开发者 1 分钟阅读
0 评论 0 点赞 0 收藏 5 阅读

很多人谈 Odoo 手机端时,注意力会放在 UI:菜单有没有适配、弹窗会不会太挤、某个视图在手机上好不好用。但 web_mobile 的一个更重要价值是:它提供了一组稳定的服务端契约,让 Android / iOS App 能先确认“这台 Odoo 能不能接”,再谈后续登录与会话。

主要参考:

  • enterprise/web_mobile/tests/test_mobile_routes.py
  • enterprise/web_mobile/static/src/js/mobile_service.js

一、为什么第一步不是登录,而是 version_info

测试里先打 /web/webclient/version_info,并确认 server_version_info 最后一个标记为 e。这说明移动端并不是盲目拿着账号密码就开始试,而是先探测:

  • 这是不是真正可兼容的 Odoo 服务器
  • 企业版能力是否存在
  • 客户端是否应该继续握手

这类“先问版本、再谈登录”的设计,在 App 侧特别重要,因为它能把“不兼容服务器”尽早拦在门外。

二、数据库发现、认证与 session 获取是分层的

测试分别覆盖:

  • /web/database/list
  • /web/session/authenticate
  • /web/session/get_session_info

这反映出移动端契约不是“一条登录 API 包办所有事情”,而是把发现环境、校验账号、建立会话拆成三步。这样每一步的失败原因都更明确,兼容策略也更稳定。

三、JSON-RPC 结构稳定,比返回内容多少更重要

测试中反复校验返回是否是标准 JSON-RPC:成功必须有 result,失败必须有 error,并且错误结构里要带 namemessage 等字段。

对移动端来说,这个稳定结构极其关键。因为 App 不怕出错,怕的是每个接口出错格式都不一样。只要契约稳,客户端就能写出统一的错误恢复逻辑。

authenticate 成功后,测试会验证 session_id cookie 存在,再用它去打 get_session_info。这说明移动端和网页端共享了 Odoo 的同一套会话模型,而不是另起一套 token-only 体系。

这样做的好处是:

  • 权限、上下文、用户信息都能复用
  • 许多现有 JSON-RPC 接口不必为移动端重写
  • 调试时网页与 App 行为更容易对齐

五、最容易忽略的点:这些测试本身就是契约文档

test_mobile_routes.py 不只是自动化测试,它还是一份很好的“移动端服务契约说明书”。哪些路由要存在、出错怎么返回、版本怎么判断、cookie 怎么建立,测试里全写着。

在企业项目里,这种测试往往比某张架构图更可靠,因为它描述的是“系统实际承诺什么”。

六、结论

web_mobile 的关键不只是手机端多了一层样式,而是它明确了移动 App 和 Odoo 服务端之间的握手顺序:版本探测 → 认证 → 会话信息 → 统一错误结构

这套 contract 稳了,移动端体验才稳。否则再漂亮的 UI,也会败在连接与登录阶段。

DISCUSSION

评论区

想参与讨论?先 登录 再发表评论。
还没有评论,你可以成为第一个留言的人。