我算是半个程序员吧,在一家小公司做技术相关,其实主要是打杂加写点业务代码。最近老板不知道从哪儿接了个新活儿,说是要搞个内部管理系统,把以前几个分散的老古董系统给串起来。这活儿理所当然地,又落到了我头上。
说实话,我之前做的都是修修补补的活儿,这种从零开始设计一个“系统”的经历几乎为零。老板给的要求还挺多,其中一个核心功能就是要能处理各种上传的图片,比如报销单拍照、产品图啥的,然后自动把上面的文字给提取出来。我一听就懵了,这不得用 OCR 吗?我自己肯定写不出来啊。于是我就去搜,发现好多云服务商都提供“识别图片文字”的 API,调用看起来也不算复杂。但问题来了,这就算是我把“API 怎么处理图片输入”、“api 怎么识别图片文字”这两个技术点搞明白了(其实也还在摸索,比如图片格式、大小限制、返回的 JSON 结构怎么解析),也只是万里长征第一步。
更让我头秃的是整个“系统设计”。我们公司还有另外两套旧系统,员工得记三套账号密码。老板这次发话了,新系统要做成统一入口,也就是“单点登录”。我一听“单点登录”头更大了,这玩意儿听起来就涉及权限、令牌、会话管理,安全要求还高。我又去查“api 怎么做单点登录”,看了一些 OAuth 2.0、JWT 之类的介绍,概念是懂了一点,但具体到我们这个缝合怪项目里,到底该怎么落地?新旧系统怎么对接?用户数据在哪里统一管理?光是画个架构图我就改了好几版,越想越觉得漏洞百出。
我感觉自己现在就像是在玩一个超高难度的拼图游戏,手上有几块关键的碎片(处理图片的 API、实现单点登录的 API 或方案),但完全不知道整体的图画应该是什么样子,更不知道怎么把这些碎片严丝合缝地拼到一起。比如,用户通过单点登录进来后,他上传图片,我调用 OCR API,这个流程里,权限要不要校验?图片处理的服务和用户认证的服务怎么部署?是放在一起还是拆开?数据库怎么设计?这些决策我一个都不敢做,生怕现在图省事,后面坑越挖越大。
我也看了网上一些文章,有的讲得太理论,什么微服务、中台,对我们这种小项目来说有点杀鸡用牛刀;有的又太碎片,只讲“怎么调用某一个 API”,根本不提它在一个完整系统里应该放在什么位置、承担什么角色。
所以想来问问社区里有实战经验的各位前辈,你们在做这种需要集成多个 API(尤其是像图片处理和认证这种核心且复杂的 API)的项目时,整体的“系统设计”思路是怎样的?是从数据库开始推,还是先画数据流图?有没有一些适合中小型项目的、不那么重但又足够稳健的设计模式或原则可以遵循?或者说,对于我这种情况,是不是应该先说服老板,把“单点登录”和“图片 OCR”这两个需求拆成两个独立的阶段来做,先解决一个再说?
真的,这几天天天对着空白的设计文档发呆,咖啡都救不了我。求过来人指点迷津,随便唠点经验教训都行。