最近技术群上有人问接口要怎么写,做了这么多接口的我思考了一下,打算告诉他,接口其实就是APP或者WEB请求后端写的一个方法即请求数据,后端返回约定好的数据格式。说到数据格式,一般都会选择用json格式,其它像xml这些我觉得也可以,个人认为要构成和解析一个xml格式的数据比较复杂耗时,所以还是用json比较方便。目前公司用的json格式是这样的
{
code:200, //错误码
ret:1, //这个有点多余,因为code200的都是1 其他都是0
data:{ //数据
},
msg: //消息提示
}
抓了一下别的公司,也有用errono,errmsg的,errono不为0则是成功。怎么定还是要看公司或者跟开发人员之间的约定。
返回的数据data是一个对象,对象里的成员可以是各种格式的数据类型,说到数据类型,因为不同语言的类型是不同的,所以经常会发现一些这样的问题:
ios开发:price字段怎么有时是数字有时是字符串?
我:??数据库存的是decimal类型的,我也没做什么处理阿?!
ios开发:你这里有数据的时候返回的是对象,没数据的时候返回的是数组?(这里其实有一个坑的)
我:??哈,我没动代码哦,怎么会这样?!
ios开发:你这个字段怎么返回null?
我:???...会有问题吗?
然后我重新复习一遍c语言的数据类型,了解一下他们的数据类型,字典、列表等;手机端,web端还有后端用的语言不同,数据类型不同,难免会一些坑,有时候要注意一下的,例如:
$info = [];
if (true) {
$info = [
'file1' => '1',
'file2' => '1',
.....
];
}
//info里有数据的时候
{
data:{
info:{
'file1':'1',
'file2':'1',
....
}
}
}
//info里没有数据的时候
{
data:{
info:[]
}
}
这就是我上面说的那个坑了,解决的办法就是(object)$info,强制转为对象。至于数据类型,处理数据的时候稍微注意一下就行了。
要注意返回的数据中不能有null,前端可以处理,但是并不能保证处理之后APP不会崩,一些重要字段返回null的话,基本都会崩的。而null最好不要存到数据库里,用空的字符串 ‘’代替,null是会占空间的,而且对null的操作有特殊处理。在之后我抓取别人公司接口的时候,发现有null的!null属于特殊的数据类型(或者不是),这个字段一下子是string,一下子是null,你让前端每个字段都做null判断处理吗?所以还是不要出现null。
有段时间研究别人公司的接口,不得不说,我写的接口还是可以的。抓了两家公司的接口,他们犯的错很相似。
首先是对查询的数据没有做处理,用的是join查询(一看就知道了,一大堆有的没的),连用户加密过的password都给返回了,手机号码地址起码屏蔽一下,我爬一下接口都能把用户的手机号码给爬出来,也没做null处理;有一家甚至连后台管理系统的地址都显示出来了,他将图片存到admin模块里了,然后取图片的时候就暴露了;
其次是发送验证码为什么要在接口返回验证码呢?两家公司都是这样,我都有点怀疑我错了?
然后是没有关闭调试模式阿!你用的tp3.2.3框架,后台管理系统用的amze_ui前端框架,根目录,用phpstudy搭建的环境我都知道了,看到这些技术,大概知道你是什么水平了。
在x莞这个小城市,技术水平是会有瓶颈的,这么水的技术工资比我高,我就有点不服了。我也知道很多人在面试的时候为了高工资吹嘘自己的技术水平有多厉害的,我不喜欢带有水分的东西,对自己和他人都没有好处。自己什么水平值多少,这些事情自己最清楚。