既然有人看,那咱就分享一下
摘抄:http://www.startupcto.com/backend-tech/building-an-api-best-practices
You'll generally want to wrap all your API responses in an 'envelope' which specifies metadata about the APIcall.
// sample JSON envelope
{
"status": {
"code": 10000,
"message": 'Success'
},
"response": {
...results...
}
}
Doing this allows for client handler code to behave the same way for all API calls, since it gets a responses back in a universal format.
语义上再好一点,推荐:
// sample JSON envelope
{
"status": {
"code": 10000,
"message": 'Success'
},
"data": {
...results...
}
}
可视化编辑校验: http://jsoneditoronline.org/
http://ruby-china.org/topics/15164#reply5
xiaogui 7楼 , 19小时前 喜欢
#5楼 @lytsingsun
先说几点个人建议吧:
1、返回 json 数据,最好外面包一层校验,能让客户端快速知道,这数据合不合法、是否有错;
2、代码复用方面,主要看你项目的实际情况;
3、最好是能给客户端进行充分的沟通,怎么让双方都正规还方便;
4、性能方面,不外乎负载均衡、上缓存、数据库读写分离、代码优化;
第一点:就是说上面返回的 status,要有 code 和 message,根据 code 来判断问题,一般会直接 alert 出来 code:message 或者在日志里
这是 xiaogui 说的外面包一层校验的意思
其他的就没啥需要特殊说明的了
http 的状态码是直接在 request 里的,这个一般指服务器的状态,api 是假设每一个请求都是 200 的,在客户端非 200 的请求统一处理异常,而 200 的请求,首先解读 status 获取 code 是否为 0(假设 0 是请求正确返回),如果是 0 就读取 data,继而完成相应业务逻辑处理。
每一个 request 都可以获得状态码,而上面我给出的 json 是在 response 里,那么在在 http 请求完成的时候我们仍然可以获得此 request 的所有信息
如果仍然在 response 里加入 request 里的东西,这样做是重复的,真的是没有必要的,not DRY
换个角度讲,一般我们使用 http 库的时候要自己封装处理 http status code 的,尽力减少每个请求的代码,是不可能每个 request 都去
判断code==200.。。。。。然后。。。。。
不过我还没有发现好的实现,还请各位指点
还是看 open api 吧
比如获取新闻接口返回数据如下:
{
"data": [
{
"nid": 2,
"mid": 1,
"text": "this is a test.",
"images": [
"http://121.199.40.172:8086/images/news/12.png",
"http://121.199.40.172:8086/images/news/13.png",
...
],
"videos": [
"http://121.199.40.172:8086/videos/news/12.amr",
"http://121.199.40.172:8086/videos/news/13.amr",
...
],
"like": 0,
"comment": 0,
"publish_time": "2013-01-01 12:30:10"
},
...
],
"status": {
"code": "0",
"msg": "success"
}
}
返回的对象数组,乍看是合适的,但是我们发现 1 条新闻对应着多个评论,如果评论没有出现在此接口中,我就要发一个新的请求,这样问题就来了,该不该呢?
个人觉得,好的 api,如果一次 news 的数据不是特别多,就应该最新评论,如 5 条,10 条的带上
使用 rack-cors,解决跨域问题,实际中也是这样用,不过 application.rb 里配置的路由还需要更严谨
config.middleware.use Rack::Cors do
allow do
origins '*'
resource '/*', headers: :any, methods: [:get, :post, :put, :delete, :destroy]
end
end
一般移动测试都要起一个 server,然后访问 api 服务器的时候就要跨域,这样就可以在移动端浏览器里测试了。
而 phonegap 打包的时候是本地 html 所以不用跨域,但是为了测试方便,服务器还是建议加上 rack-cors。
欢迎关注我的公众号【node 全栈】