这个接口设计得到底合理不合理?

说明:以下是昨天和同事关于一个接口的讨论,我觉得很有意思,针对同一个问题大家从不同的角度来看接口设计的问题。记录下来可以为自己以后设计接口提供参考,更希望有对此有想法的人能一起探讨下(顺便拉小弟一把帮我进步一下)

背景

注册时需要对用户输入的密码进行一定的规则校验,页面和后端都校验(废话-_-)。但是我们的系统的 admin 可以对这个校验规则进行配置,实时修改。那么为了保证前后台校验规则的一致性,我们采取的方案是通过 ajax 从后台获取密码的校验规则(正则表达式),而不是在 javascript 里面写死。以下是接口及返回 demo 版本:

// interface http://xxx.xxx.com/xxx/xxx/login/access
/*
  Response JSON:
  {
    data: {
      ...
      pwdRegExp: "^(?=.*[\p{Digit}])(?=.*[\p{Lower}])(?=.*[\p{Upper}])[\d\p{Upper}\p{Lower}\p{Punct}]{8,20}$"
      ...
    },
    mcode: xxx
    result: true
  }
*/

接口返回的字段中 pwdRegExp 就是后台对密码的验证规则,它的值是 java 的正则表达式。页面收到这个字段后通过一个转换器把她转成 javascript 的正则表达式

function toJsRegExpMap( backendRegExp ) {
  return new RegExp( backendRegExp.
                      replace(/\\p{Digit}/g, '\\d').
                      replace(/\\p{Lower}/g, 'a-z').
                      replace(/\\p{Upper}/g, 'A-Z').
                      replace(/\\p{Alpha}/g, 'a-zA-Z').
                      replace(/\\p{Punct}/g, PUNCT)
                    );
}

讨论

申明在前,我在这里记录下讨论绝对没有偏好,没有谁对谁错,只是想还原原来的讨论,我自己最后也承认这个问题我可以接受任何的合理的结论(A,C 是同事,B 是我,讨论有删减,不保证完全是原文)

A:这个api为什么不直接让他们提供一个可用的正则?如果是要js去转的话,就是说每个使用这个api的地方都要自己去转。这样肯定是不合理的。

B:为了保证前后端验证规则一致,后端传出它的正则,然后由其他系统去做其他系统的转换及 mapping,这个我个人认为是 make sense。因为后端不能保证它给出的前端正则和后端正则的校验结果能严格一致。(我假设后端开发人员对 js 不熟 - 这括号中是我写此文时候的补充,非原对话中有)

A:那使用api的各方各自转换能确保一致吗?这更走远了。输出api的那方直接给出正则,有问题改的也只是输出api的地方。

B:因为转换规则是其他系统所知,后端系统并不可知。

A:直接是隔离了问题。现在就 java 和 js,如果有再添加就行了。或者没有再转。

B:自己系统的问题自己维护,你转错了是你的问题,好比后端只给出规则,其他系统负责实现,只是这个规则以 Java 正则来表达的。

A:但是 java 和 js 这两种是肯定会有用的。

C: 因为现在只有 js 消费这个正则,如果这个接口同时需要为 php 提供服务的话,它不太会为所有消费者提供转换的 后台会变得太复杂了。

B:你一定说只有两系统,那传一传也可以,我是从系统隔离的角度考虑的。

A:转换没风险吗?还是使用 api 的各方自己转,怎么保证各方转换是对的?有多少个调用的地方就有可能有多少个出错的地方。

B:有风险,看你怎么看这个问题,最好个各系统给出各自的转换器,至于这个转换器是放在一个系统中还是各自系统中,那就看你看中沟通成本还是系统稳定性。如果一个转换器出问题,拥有者自己去改,那么影响的系统只是他那个系统。不过我们这个例子简单,其实放哪里都可以,问题不大。

C:你这样考虑吧,这个接口的返回其实和其他普通的json返回一样,虽然它有个正则属性在里面,就是普通的数据返回,其他系统想怎么用就怎么用呗。他是接口,那么必定不是只为了我们页面存在的。如果它是页面 那必须用js正则。

A: 对,使用者自己改又说明api不易用。

B:这个问题从不同的角度看都有一定道理,我都认可。

写在讨论后

A 后来提到的接口可用性确实是一个问题,当初我考虑的时候也忽略的了这个方面,如果是作为一个接口的消费者来说这个接口是不友好。如果要兼顾系统隔离,则应该传递一个中立的非指定语言的规则。不知道各位大神,各位看官怎么看这个问题?

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,028评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,647评论 18 139
  • 1、 儿子看若谷妈妈晒若谷自制的鸡蛋面和拍黄瓜。 睿今天非要自己撑勺,自己煮面。 2、 睿玩游戏太多了,看书太少。...
    麦子在唱歌阅读 236评论 1 0
  • 在之前很久的面试里,出于推销自己都会像面试官提及自己新媒体运营的经验,卷大爷教着我吹着牛逼说着恩我带领团队使得公众...
    聪明羊的频道阅读 336评论 0 1
  • 一天24小时对于每个人都是公平的。但是,有的人似乎每天都有用不完的时间,能完成的事情很多。有的人,却总觉得自己没时...
    松哥生涯阅读 585评论 3 3