看看日期,马上过春节了。年前的任务很简单,就是联调。快过春节了,懂的都懂,大多数人心里都想着回家。结果前端做网关app的就把自己的工作量降到了极致。这个梗是这样的:
首先,前端是做嵌入软件的,需要发送多个用户信息到后台,这边使用http发送过来。本来呢,直接使用json或者xml格式把用户信息放在body里面就ok了。一开始说好了,用json格式,结果一个星期过去了。联调的时候发现这大兄弟发过来的是这样的:

QrCode=xxx&NodeQrCode=xxx&useramount=4&username=¹݀&userid=0&keynum=2&userrole=1&userban=0&weekdayban=0&expiretime=0&username=ε𧥵serid=1&keynum=2&userrole=2&userban=0&weekdayban=0&expiretime=0&username=µµ¤&userid=2&keynum=0&userrole=2&userban=0&weekdayban=0&expiretime=0&username=δӤ&userid=3&keynum=0&userrole=2&userban=0&weekdayban=0&expiretime=0

我第一反应,就是跟那哥们说,大哥,你格式发错了,这个不是json格式。结果呢,这兄弟说就这样吧,以前都是这样传的,改成json格式,又要换接口。意思我懂,就是又要弄很久,快过年了,其实我也懂,主要是这兄弟估计没心思弄了。算了,就自己整个方法把他这些串转换成json格式以后再做处理吧。虽然从长远角度上说是不对的,但是考虑到后续如果前端有一天修改成json或者其他格式,其实后台这边改动量也挺小的。
然后呢,一会这大兄弟又说,他们嵌入式那边获取到的名字的格式是gbk格式的,其他的都是utf8的。我说看这名字是怪怪的,你把统一转成utf8过来吧。我的天,他回的直接就是我转吗?我说你这个接口编码要统一啊哥哥。他回复,可以。
过了一阵子,他又说嵌入式那边加上这个转码的库以后,程序大小从600k涨到2m,要不把对应字段转成十六进制字符串发给后端吧。我算是明白了,这哥们是想回家了。算了,就答应了。然后就变成嵌入式网关发过来的body内容类似如下:

QrCode=xxx&NodeQrCode=xxx&useramount=4&username=B9DCC0EDD4B10000&userid=0&keynum=2&userrole=1&userban=0&weekdayban=0&expiretime=0&username=B9DCC0EDD4B10000&uerid=1&keynum=2&userrole=2&userban=0&weekdayban=0&expiretime=0&username=B9DCC0EDD4B10000&userid=2&keynum=0&userrole=2&userban=0&weekdayban=0&expiretime=0&username=B9DCC0EDD4B10000&userid=3&keynum=0&userrole=2&userban=0&weekdayban=0&expiretime=0

然后我在给处理成相应的字符串如下以后再处理:

{
	"NodeQrCode": "9EE5521F004B1200",
	"QrCode": "E739311C004B1200",
	"useramount": 4,
	"users": [{
		"expiretime": 0,
		"keynum": 2,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 1,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 2,
		"userban": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 0,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 0,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}]
} {
	"NodeQrCode": "xxx",
	"QrCode": "xxx",
	"useramount": 4,
	"users": [{
		"expiretime": 0,
		"keynum": 2,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 1,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 2,
		"userban": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 0,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}, {
		"expiretime": 0,
		"keynum": 0,
		"userban": 0,
		"userid": 0,
		"username": "管理员",
		"userrole": 2,
		"weekdayban": 0
	}]
}

这次联调的感触还是挺深的吧。也许这就是目前大部分小公司开发的现状。这接口定义格式,其实基本没什么约束力。开发者没想到后续维护的问题,怎么简单怎么来。去年笔者由于感觉程序员只是上班没啥出路整了点副业,大半年没上班,年底面试的时候觉得很多知识点都有遗忘的迹象,就找了一家里自己住的地方很近的公司上班。确实是感觉到,在只要求功能实现的创业初期的公司。确实是无力吐槽…