1. 什么是对前端友好的 http 接口

搞前端的都少不了跟服务器数据交互, 跟服务器数据传输主要是调 http 接口. 在平时做项目、活动中也接触过各种各样接口, 接口一般是开发同学根据自己需要写, 接触了各种接口后我觉得有必要说下我认为的对前端友好的 http 接口. 在淘宝接口一般都是 java 同学写的, 这个也主要是写个 java 同学看的, 但是还是想先发到前端群里大家讨论下, 看看什么才是对前端友好的 http 接口. :)

## 请求参数格式统一

目前 http 接口参数格式不统一, 有 camelCase 形式的, 也有 camel_case 的, 甚至还有同一个接口两种形式都有的, 虽然用起来没什么区别, 但是看起来有中蛋蛋的忧伤; webx 有个参数是用来说明参数编码的 _input_charset=utf8 , 我觉得可以跟 webx 一致, 格式统一用 camel_case 形式; 如果两个词连起来很容易区分直接 camelcase 形式, 比如 itemid=121343

## 请求参数名称统一, 参数最好见名知意

比如 jsonp 接口回调统一叫 callback, 目前见过叫 cb 的, 也有叫 jsonp 的, 这么随心所欲的写, 让用的人情何以堪啊? 下面几个是我想到的常见参数的命名:

## JSON 使用正确的数据类型

json 是 javascript 的子集, 也是有数据类型的, java 里数据类型应该可以方面的 serialize 为字符串. json 中的数据类型有: Object, Array, String, Number, Boolean, Null. 具体见 json 文档: http://json.org/. 但是有些 json 的数据类型用的不规范, 比如 {isSelected: '1'}, 其实这个 '1' 是一个人造常量, 用 true | false 更合适, 如果觉得 true|false 会增加响应内容长度, 用 0|1 也比 '0'|'1' 好.

## JSON 中 key 参数统一

这个其实和请求参数一样, 最好能有一致的格式, 这里我觉得 用 camelCase 的方式好些, 比如: title, itemId, itemLink, itemPic, itemPrice, actPrice, shopId

## json 与 jsonp 支持

区别: json 格式在前端跨域是不能调用的(ajax 浏览器限制), XMLHttpRequest2 可以跨域调用, 但需要服务器设置, 如果 json 格式请添加 cros 头部, 具体见: http://docs.kissyui.com/1.4/docs/html/api/io/index.html

假设 jsonp 统一参数名为 callback, 如果不传 callback 参数或 callback 参数为空, 返回 json 格式.

## 接口不要与业务结合态紧密

既然做成 http 接口了, 我觉得可以适当考虑灵活性, 不要太与业务关联. 比如: 接口中 image 字段不要限定为业务中的大小(添加后缀), 现在都在搞移动端, 接口化后前端可以直接用接口搞移动端适配, image 字段限定大小了适应起来移动端不是麻烦了么?

## 用 java 序列化为 json 字符串

很多 java 同学用 vm 拼接 json 接口, 这写起来不方便不说, 而且容易出错, Array 少个逗号 ie 报错很多人应该遇到过.

## 一些工具

/* vim: set ft=markdown:*/

blog comments powered by Disqus