[OT] OPENAPI Design

11 views
Skip to first unread message

Zhao Quan

unread,
Sep 22, 2014, 5:28:01 AM9/22/14
to sh...@googlegroups.com
Hi All

事情是这样的,
我最近不是在做一个订单系统的设计么。

发现,一些操作其实是有顺序的。
如:新建 => 付款 => 取消
只能按照这个顺序在客户那里实现,如果用户拿的顺序不对就不行。

关键是,很多客户没有外网接口,不可能推给他们。
只能开放接口给他们拉。

========================================================

之前,我的设计是每个操作都单独暴露一个接口。
每个接口业务独立,各自的数据契约也相对简单。
对于顺序问题,我的想法是在我们的服务端进行处理。
比如,客户来 拉 付款 单子 时,先判断下单子是否有效。

这样对于客户来说,使用是相对简单的。

========================================================

但是,
最后结果的设计是这样的。
1. 所有的操作变成了一个状态。
2. 所有操作接口合并为一个。
3. 接口每次调用时,将所有历史操作以及当时的订单状态发送给客户。采用时间戳来区分。

=========================================================

我个人觉得这个设计很丑陋啊!
但是,被反驳说:
“如果不这么做,在我们的服务端将要维护复杂的判断逻辑。
而现在的设计客户拿到同步后的数据,一模一样在自己的系统中处理就可以了。”

==========================================================

貌似,我也感觉确实没有好的替代方案啊。

大家怎么看呢?

Robert Lu

unread,
Sep 22, 2014, 11:41:04 AM9/22/14
to sh...@googlegroups.com
我觉得还是将每个操作单独导出一个接口比较好。

不过这种事情看需求,客户没有如此细化的需求,接口一刀切是可以的。

--
-- You received this message because you are subscribed to the Google Groups Shanghai Linux User Group group. To post to this group, send email to sh...@googlegroups.com. To unsubscribe from this group, send email to shlug+un...@googlegroups.com. For more options, visit this group at https://groups.google.com/d/forum/shlug?hl=zh-CN
---
您收到此邮件是因为您订阅了Google网上论坛中的“Shanghai Linux User Group”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到shlug+un...@googlegroups.com
要查看更多选项,请访问https://groups.google.com/d/optout



--
Regards,
Robert Lu

About me: http://about.me/RobberPhex

DaboD

unread,
Sep 22, 2014, 3:17:52 PM9/22/14
to sh...@googlegroups.com
API 分開比較好, 但可提供一層簡化後的版本 (完整 API 的包裝), 用以維持彈性 & 可維護性, 及使用上的簡便性.

設計上可這麼拆分.

以 state 保存特定步驟的狀態 (或是說 action 的執行結果), 串成 list 代表動作完成的步驟.

不同的 state 會跟 1 到 N 個 action 關聯, 代表在這個狀態可做的動作, 如果 user 要做的動作不在目前 state 關聯的 action 列表中, 就傳回錯誤訊息.

action 會關聯 1 到 N 個 validator, 在執行動作前 and/or 後用來驗証狀態或參數是否滿足條件, 如果不滿足則收集各 validator 返回的 error messages. 如果滿足才執行 action 或轉移到下個 state.

這樣, action & validator 只專注特定的事情, 邏輯簡單, 易於重用, state/action/validator 間的關係也可放在設定檔中, 要改變流程時會容易得多.
Reply all
Reply to author
Forward
0 new messages