首页 文章 精选 留言 我的

精选列表

搜索[cms],共1588篇文章
优秀的个人博客,低调大师

一套发布接口要对接二十多套CMS,协议差异该怎么收口?

一、三十个站点、十四套系统,一个运营员管不过来 接手站群运营这个活的时候,客户手里的清单是这样的:三十一个站点,横跨十四套建站系统,其中企业站九个、资讯站十一个、行业站六个,剩下的五个是老站,用的系统连版本号都查不全。运营员只有一个人,每天的活是把生成的文章按栏目分发到这些站点上去。她的操作路径是打开后台、登录、选栏目、贴正文、传配图、点发布,一个站点走完要六到八分钟,三十个站点走一遍就是一个上午,中间喝口水的功夫忘了哪个站点发没发,就得从头核对。 自动化的需求就这么来的,但真正难的不是定时和批量,而是「对接」本身。十四套系统的发布入口长得完全不一样,有的是标准的表单提交,有的要先进后台拿一个会话令牌再调内部接口,还有三个只开放了数据库写入这一条路。同一个动作「发一篇文章」,在十四套系统面前是十四种方言。 ![](https://developer.qcloudimg.com/http-save/yehe-10201489/9f19e7942bb3cf495da271a31ffe75af.jpg) 我们做了个统计,如果按最朴素的方式干,给每套系统写一个独立发布模块,代码量大概是每人每周出一套,十四套就是三个多月,而这只是第一版。更麻烦的在后面,任何一套系统升级了后台,对应的模块就要单独返工,一个人维护十四份高度相似的代码,出错的概率会随着时间越滚越大。 二、差异摊开看,其实收敛在四件事上 把十四套系统的发布流程逐个拆完,我们发现差异虽然多,但都落在四个维度里。第一是登录方式,表单加验证码、令牌接口、Cookie 直填、数据库直写,拢共四种。第二是字段模型,标题、正文、栏目、标签、缩略图这几个概念家家都有,但字段名、必填规则、长度限制各不相同,有的系统正文里不允许出现指定标签,有的缩略图是必传项。第三是附件上传,有的走 multipart 表单,有的要先传到媒体库拿到文件标识再引用,还有的直接收一个外链地址。第四是发布后的确认方式,有的返回文章标识就算成功,有的要再调一次列表接口核对,还有的页面返回 200 但文章躺在待审核队列里。 直觉做法是写一个巨型函数,里面按系统名一路 if 下去。这个写法撑到第五套系统就会失控,因为四个维度的差异是自由组合的,十四套系统就是十四个组合分支,改任何一个分支都可能碰到隔壁的。我们真正需要的是把「不变的流程」和「变化的细节」分开,流程是拿凭据、选栏目、传附件、发正文、验结果这五步,变化的是每一步在特定系统下的具体做法。 还有一个更隐蔽的问题,栏目结构。同一家客户的文章要按栏目定向分发,而每套系统的栏目树、栏目标识格式都不同,有的用数字编号,有的用路径字符串,还有的在后台改版之后悄悄换了标识。发布配额也是栏目级的,资讯栏目一天二十篇,公告栏目一天两篇,这个配额必须挂在栏目维度上而不是站点维度上。 三、两条路,我们选了驱动注册表 第一条路是广度优先,选五六套主流系统做深适配,剩下的让用户走通用的接口协议自己对接。这条路前期快,但客户买系统图的就是省事,一听说一半的站点要自己写对接脚本,意愿立刻就下去了,而且「通用协议」对不会写代码的站长来说等于没有。 第二条路是驱动注册表,每套系统一个驱动模块,实现统一的五个步骤接口,注册表按系统类型查驱动。代价是每接入一套新系统都要写一个驱动,工作量没有消失,只是从散落变成了集中。我们选这条路的关键原因是它把「加一套系统」这件事的代价固定住了,写一个驱动、过一遍测试清单,不影响其他任何系统,也永远不会碰坏发布主流程。 驱动之外我们补了一个自定义发布接口协议,给那些不在支持列表里的自建系统用。用户配一份请求模板,把标题、正文、栏目的位置用占位符标出来,发布引擎就按模板组装请求。这个协议后来承接了两个用自研框架搭的内网站点,配置加联调半天就通了。 四、驱动长什么样,配额怎么挂 驱动的接口刻意收窄到五个方法,login、listColumn、upload、publish、verify,每个方法只管自己那一步。驱动之间的差异全部收敛在实现内部,注册表和发布引擎对驱动只有一条要求,按约定的顺序把五步走完,每一步把结果写进任务的状态记录里。这套适配结构后来装进了AI智能SEO助理的发布引擎,十四套系统的驱动加起来两万三千行,发布主流程本身不到八百行。 栏目级的配额和间隔配置存在站点配置里,两个数字,每日上限和两次发布之间隔多少秒。发布引擎在取任务的时候先看配额表,超了就顺延到第二天,间隔按上一次成功发布的时间戳算。这两个数字不是装饰,有家客户早期把间隔设成了零,一天往同一个栏目塞了六十篇,那个站的收录不升反降,后来我们把它做成了创建任务时的必填项,默认值是六十秒。 ![](https://developer.qcloudimg.com/http-save/yehe-10201489/7ed18c7c9392a76060cf42bff756dbad.jpg) 自定义发布接口的模板设计走的是极简占位符路线,{{title}}、{{content}}、{{column}}、{{images}} 四个占位符加请求头和鉴权的自由配置区。刻意不做条件逻辑和循环,因为模板一旦支持编程,用户就会写出无法排错的配置,遇到复杂场景宁可引导他们走驱动对接。 五、三个坑,都是站点多了才暴露 第一个坑是栏目标识的缓存失效。驱动把栏目树拉下来缓存在本地,加快栏目匹配的速度。某套系统后台改版,栏目编号整体换了一轮,缓存的映射关系没失效,当天上午六十七篇文章全发到了错误的栏目下。根因是缓存没有版本概念,改法是每次登录成功后重新拉一次栏目树并比对签名,不一致就重建缓存,同时把发布日志里的栏目名一并记录,方便事后核对。 第二个坑是待审核状态的误判。有几套系统发布接口返回成功,文章实际进了待审核队列,运营员以为发出去了,三天后发现收录是零。根因是我们把「请求成功」当成了「发布成功」,这两个概念在那几套系统里隔着一个人工审核环节。改法是 verify 这一步强制化,返回状态必须落到 待审、已发、失败 三选一,待审的文章在面板上单独一列,绝不和已发的混在一起。 第三个坑是附件上传的重复传输。早期每次发布都把配图重新传一遍,同一个站点同一天发十篇就是三十次上传,有一次触发了对方服务器的频率限制,整个站点封了半天。根因是驱动没有做文件的幂等,改法是上传前按文件的哈希查媒体库,命中就直接复用文件标识,上传量降了七成。 ![](https://developer.qcloudimg.com/http-save/yehe-10201489/30ced01b102593f314e2ad309af7aed0.jpg) 六、协议之外,还有一半的活是运维约定 对接做得再干净,站群运营的稳定性也有一半靠约定。我们的清单里有三条是硬性的,凭据按站点独立保存并且定期轮换,任何一个站点的连续失败超过五次就自动熔断当天剩余任务,每个站点保留最近一百条的发布日志供追溯。熔断这条是吃过亏的,有一次某个站的服务器迁移期间接口一直超时,脚本不死心地重试了一上午,把对方本就脆弱的服务压得更厉害。 还要坦白一层边界,协议适配层解决的是「怎么发出去」,解决不了「发出去之后收录好不好」。内容质量、更新频率、站点自身的权重,这些在搜索引擎那一侧的决定因素,不是发布环节能左右的。客户问起的时候我们直说,工具守住的是流程可控,不承诺排名,这句话反而让沟通省了很多力气。 七、小结 这件事做下来的核心结论只有一条,对接类系统的复杂度要靠固定代价来驯服。每加一套系统的代价是一份驱动加一轮测试,这个数字从第一个月到现在没有变过,变过的只是驱动列表的长度。流程与细节分离之后,发布主流程近两年没有动过,动的是驱动和配置。 如果你也在做类似的事,AI智能SEO助理里这套驱动注册表加自定义接口协议的实现可以拿去对照,十四套系统的驱动清单就是协议差异最真实的一手样本。把它拆完你会发现,所谓二十多套系统的兼容,拆到底就是四种登录方式、几组字段映射和一条必须强制执行的验证规则。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册