Open zhangsanshi opened 7 years ago
对于上面的 code 码,最近有了新的看法,我们过段时间是否看得懂 code 码是什么,所以, code 码应该是两个对象。 第一个对象:
{
OK: '200',
PARAMS_ERROR: '409'
}
这个对象是在程序中使用,这里用英文表示错误,对应的是错误码。 第二个:
{
200: '正常'
}
这里可以放在结果中返回,也可以留给前端查找,甚至可以在线下暴露出服务,这样的话,后端定义好错误类型,前端可以很方便的知道是什么错误,告知后端对应的状态码。
后端代码中使用的时候就是CODE.OK
CODE.PARAMS_ERROR
,这样代码看起来就很清晰了
API 书写规范
如果没什么必要,请不要破坏
约定
ok,从一个例子说起
请求阶段
解析
url
是链接的主体部分,:id
代表了这个值是动态获取method
是请求的方法,一般是get
、post
、put
、delete
等等params
是url
的search
部分,拼接到 url 后, 即:/api/person/:id?type=a&type2=b
data
是需要发送的参数,这部分是放在请求body
中的,这里也有需要注意的点:attr
的值是一个JSON
对象,如果你需要的是一个序列化的JSON
对象,请写成attrStr
对应的形式, 前端的处理方案是JSON.stringify({})
,对于Array
同理特别说明
原则上,后端如果从
url
部分读取了id
, 就不应该从params
或data
再次读取id
, 而事实上我遇到过,遇到的情况是会从param
读id
,读不到id
去拿列表的数据,读到id
就去干别的事情。 这说明了啥,说明了一个API
可以干两件不同的事情,所以可不可以这么推断,所有的API
都可以通过一个链接解决,只需要给不同的params
,这种设计表面上是有了所谓了灵活性,实际上是不能再糟糕的设计了其他方面
Content-Type
这里多写一点东西
对
application/x-www-form-urlencoded;charset=utf-8
类型, 发送到服务端的格式是x=1&b=2&c[]=1&c[]=2
或者x=1&b=2&c[0]=1&c[1]=2
对
multipart/form-data
是1 ------WebKitFormBoundaryMb9nnUlXLKUn49G9 Content-Disposition: form-data; name="b"
2 ------WebKitFormBoundaryMb9nnUlXLKUn49G9--
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryMb9nnUlXLKUn49G9
下载链接
这个也有值得说的地方
数据返回阶段
目前已有约定
code 码
解析
code
这个作用很明显,不理解的人仅仅会得知是一个数字,自己人会知道代表的含义,同时message
作为补充用来提醒用户message
返回信息data
返回数据特别说明
上面三个即可解决绝大部分的问题,但是
data
这里未规定,但是有一些东西需要补充的,这里和前端尤为相关, 来一个例子child
是Array
,childObj
是对象, 在PHP
里,貌似都是Array
,但需要分清楚child
和childObj
的区别,尤其是对于key
是数字的情况time1
是unix
时间戳,这个属性的问题有两个:unix 时间戳
是按秒算的,首先需要明确告知前端time1
是unix 时间戳
,在交流这个数据的时候,什么时候用unix 时间戳
,什么时候用其他格式的,同时做好约定,不要这个接口我用这种类型的,下个接口就换了,或者过段时间就忘了。。。时间戳是
Number
类型的吧,事实上我遇到过'false'
和'0'
类型的返回值,处理起来很繁琐,本来可以很简单的解决的问题,导致写了一大堆代码,有些项目采用了typescript
,因为有类型约束,导致问题更严重,虽然不知道在js
中,这些约束报错不。。。age
是Number
类型的,倾向于写成Number
类型,而不是ageStr
,在js
里其他方面
希望后端有个通用的处理流程,我感觉很多数据还是手工转的,一不注意,写出的代码就不符合约定了,比如出来个
'false'
之类的。接口尽量定义的规范一些。。。虽然有时间不规范很省事啊
希望能统一交流语言吧,很多人还描述不清自己想要什么数据,写又写不出来。。。不如现在就用此做个规范吧。
讨论
前端接手
API
的时候,其实已经比较迟了,而且做页面会遇到各种问题,后端可不可先写文档,然后再编程,前端遇到问题,可以及时更改思路?接上一个,后端的文档是
JSON
格式,后面可以实现一个mock服务器
,来生成数据,方便前端测试?API 文档的保存问题,聊天记录里?
PM
里?wiki
里?还是专门写一个服务管理?API 文档能否生成的问题,毕竟手写还是有点累的。