首页 > 代码库 > 开发日记:接口开发设计
开发日记:接口开发设计
接口开发使用规则
业务术语:
请求:通过HTTP协议把需要传输的数据发送给接收方的过程。
返回:根据得到的数据处理完成后,将处理完成的结果反馈给接收方。
敏感词:带有敏感政治倾向,暴力倾向,不健康色彩或不文明的词。
特殊字符:特殊字符包括:^ | $ # 等。
操作结果:成功失败,成功返回结果,失败返回结果错误信息。
操作流程:执行之前,执行之后,正在执行。
接口编写规则:
1. 所有的接口必须包含method和version参数。
2. 所有的接口增加了版本号管理,以便适应多个不同版本客户端的使用。
3. 统一的接口调用方式,减少切换思维导致编码速度下降。
4. 接口返回结果统一使用标准的JSON格式,暂时不考虑使用XML格式。
5. 所有的接口必须要有日志,方便维护。
接口接入规则:
1. 配置合作着接入ID必须是唯一的。
2. 所有的接口必须包含method和version参数。
3. 参数列表中,不可空的参数必须配置。
4. 参数列表中,可空的但需要多选一的多个参数中,必须配置至少一个。
5. 字符串转化成字节流时指定的字符集必须与接口一直,常用的字符串编码有:(ASCII/Unicode/UTF-8)。
6. 接口数据传输必须使用http协议,支持get或post方式提交。
7. 保证网络顺畅,防止重复提交。
8. 如果响应时间过长直接导致数据返回失败,提示接收端重新提交。
接口编码设计:
使用抽象依赖倒置思维进行接口设计
· 定义一个通用抽象类
public interface IService{/// <summary>/// 调用服务。/// </summary>void Invoke(HttpContext context);}public abstract class Service{protected abstract void Execute(HttpContext context);public void Invoke(HttpContext context){this.Execute(context);}}
· 所有接口继承这个抽象类 如下:
public class CompanyPersonnelOmitTotal : Service{protected override void Execute(HttpContext context){//默认执行1.0版本的业务逻辑string ver = LRequest.GetString("version");if (ver == "2.0"){//在这里编写业务规则}else{//在这里编写业务规则}}}
public class TestService : Service{protected override void Execute(HttpContext context){lock (this){string sMothod = LRequest.GetString("method");IPatrolNew p = ClassFactory(LRequest.GetString("version"));var result = (Result)MethodCaller.CallMethod(p, sMothod, context);context.Response.Clear();if (result.ResObject != null){if (result.ResObject is DataTable){var table = result.ResObject as DataTable;string strjson = JsonHelper.DataTableToJSONStr(table).ToString();context.Response.Write(strjson);}else if (result.ResObject is string){string strjson = result.ResObject as string;context.Response.Write(strjson);}}else{context.Response.Write(result.StatusCode.ToString());}}}private IPatrolNew ClassFactory(string version){IPatrolNew p;switch (version){case "1.0":p = new Patrol2();break;default:p = new Patrol2();break;}return p;}}
· 使用IHttpHandler方式对外的代码
public class LCLPolling : IHttpHandler{public void ProcessRequest(HttpContext context){var ser = new TestService();ser.Invoke(context);}}
接口调用示例:
以下是一个接口的描述
Android接口调用示例:
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();params.add(new BasicNameValuePair("method"," GetCompanyPersonnelOmitTotal"));params.add(new BasicNameValuePair("departId","725"));params.add(new BasicNameValuePair("dateType","currMonth"));try {String result = HttpUtilByPost.httpPostData("http:192.168.1.118:6666\LAndroid\LCLPolling.ashx ", params);JSONObject json = new JSONObject(result);if(json.length() == 0){System.out.println("empty json");return;}JSONArray array = json.optJSONArray("object");for(int i = 0;i < array.length(); i++ ){JSONObject obj = array.getJSONObject(i);}} catch (Exception e) {e.printStackTrace();}
调用 人员漏巡统计 接口示例
JQuery接口调用示例:
<script src="http://www.mamicode.com/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script><script type="text/javascript" language="javascript">$.ajax({type: "POST",url: "http:192.168.1.118:6666/LAndroid/LCLPolling.ashx",data: "method=GetEmployeesAlarmStat&departId=725&dateType=currMonth",cache: false,async: false,dataType: "text",success: function (data) {document.write(data);},error: function () {alert("error");}});</script>
时间查询接口参数设计
datetype | ||
curryear | ||
currmonth | ||
quarter | ||
yearindex代表是那一年,默认当前年度 | ||
quarterindex代表第几季度,默认第一季度 | ||
year | ||
yearindex代表是那一年,默认当前年度 | ||
month | ||
yearindex代表是那一年,默认当前年度 | ||
monthIndex代表那月,默认1月 | ||
date | ||
startdate开始时间,时间格式:yyyy-MM-dd HH:mm:ss | ||
enddate结束时间 |
开发日记:接口开发设计