精华内容
下载资源
问答
  • 系统接口设计

    万次阅读 2015-06-23 12:31:22
    最近两年一直在和银行、公安、保险、民政等第三方单位之间做接口,写的接口文档不下30份...但仍有很多技术层面的心得,恰巧上周参与温昱老师的一个性能设计的外训,里面老师讲到了接口设计,正好回来一起整理一下接口设

            最近两年一直在和银行、公安、保险、民政等第三方单位之间做接口,写的接口文档不下30份,最初的接口文档漏洞百出,改了又改,丢了不少人,也被批评、埋怨,指责了很多次,久而久之,明白了一个最重要的道理,协作决定接口。双方谈接口时,技术不是最重要的,要兼顾双方技术,成本,工期等等很多因素。但仍有很多技术层面的心得,恰巧上周参与温昱老师的一个性能设计的外训,里面老师讲到了接口设计,正好回来一起整理一下接口设计的经验。主要从3个方面总结一下系统间接口设计:接口定义、接口实现、其他一些注意事项。


    一、接口定义

            接口是双方(可能是系统、模块、服务等)之间数据交互的一个标准,定制接口方要想让对方没有疑问,接口考虑到的因素一定要全面,一般情况下,主要考虑3个步骤:

            

            交互机制:如同步请求/应答方式、异步请求/应答方式、会话方式、广播通知方式、事件订阅方式、可靠消息传输方式、文件传输等。

            接口技术:WebService、Scoket、交易中间件、消息中间件、文件方式、共享数据库等。

            接口格式:这个就根据所选技术,实际情况来定义即可。

     

            拿我们(具体行业不便透露)和银行的接口为例(和每个地区银行都不同,以1个为例)

            交互机制:异步请求/应答方式,我们有查控请求时调用银行接口,将请求信息发过去,银行查控完毕后,调用我们接口,将查控结果反馈给我们。调用失败后,会有重试,重试每30分钟一次。

            接口技术:WebService接口,Java开发,xml格式报文,数据采用3DES加密。

            接口定义:具体字段说明,xml格式等略。

            有了这些说明,在对方拿到接口文档后,不出意外(比如对方完全不懂技术,无法看懂)对方都能看懂接口,也能描述清楚,如果回答不上这些问题,恐怕就是有漏洞了。




            这个接口还有很多不完善的,很多地方有更好的选择,还是前面说的,协作决定接口,合适即可。


    二、接口实现

            接口定义完成了,开发过程中要考虑的就是非功能层面的了,比如各种约束,像我们这边数据量、并发都较大,需要考虑下面几个情况:


            1.高性能,支持高并发,大容量,速度快;

            2.健壮性,防止因大量数据,或大量占用资源导致系统不可用;

            3.可监控,随时看到接口的运行情况,便于及时发现错误及排除故障;

            4.可扩展,两个方面,一是可支持扩展新功能,二是并发增加时支持扩展新硬件。


            考虑这些可能会引起接口的改变,比如我们考虑高性能,速度快时,由于我们同时对应30多家银行,每个银行每天大约1000人次查询,单个调用需要3w次,所以改成了支持批量,单次调用最多100人,发送和接收大约5s左右。同时由原来串行改成了并发调用,使用了一个线程池(线程不能太多,可能造成银行接口并发太大导致崩溃)。

            有时主动发起的接口可能不如定时轮询的接口,比如上面我们的接口是主动发起,需要做连接池限制并发,免得并发多了给银行造成问题,后来再其他省改成了完全由我们做服务端,银行定时调用获取要查询的请求信息,虽然有几分钟延迟(依据银行轮询时间决定),但是开发简单不少,考虑的情况也少了不少,接口速度也快了不少。

           考虑可监控时,有很多开源监控组件,比如我们用的JavaMelody,可以监控某个类执行次数。

           考虑可扩展,功能可扩展,比如我们用XML、JSON格式报文,或者其他自定义格式,有一定的规则,千万别用具体含义的参数,一旦增删就会影响接口。


    三、注意事项

            1.支持批量,这个一定要有,主要是为了性能考虑,后续数据量大了,再修改支持批量就会导致整个接口修改,所以前期一定要支持批量。

            2.支持部分拆包,比如报文中最好解析报文头就能知道具体业务或能找到处理的逻辑,避免全部解析后才能知道如何处理,比如我们和一个公司做接口(他们制定接口),有10多个实现类,他们文件加密的,必须整体解密后才能读取到用哪个实现类处理,文件大约200M,每次处理5s左右,有3s都在选择用哪个实现类,并发时及其慢,后来改成了前面32个字节标示哪个实现类,后来处理每个包2s左右,性能提升40%多。

            3.安全性,接口的安全控制在逻辑上包括:安全评估、访问控制、入侵检测、口令认证、安全审计、防恶意代码、加密等内容。这个根据实际情况,有些单位要求高,有些无所谓,不涉及互联网的项目,加密为了防止管理员直接看到等,要求不高的Base64就行,或者3DES,高点的通道认证等,再高就根据具体情况来了。

            4.实体文件,FTP等方式传实体文件比较容易,我们用WebService较多,文件较小的一般采用转换成文本(Base64),当文本传输,好处是简单,缺点一是慢,二是文件大了或并发大了,内存可能不够;文件大的,我们一般放到FTP上,然后传给对方FTP上的路径,这个配置比较麻烦。

            5.日志,这个最最最重要,接口的每个环节都要保留详细的日志,可以设置优先级,上线后单独打印到某个文件或者只保留重要的,因为现场出错后只能根据日志分析,很多情况下对方的接口问题对方不承认时,或者出错后对方把责任扔给咱们时,你会发现最可靠的就是日志。

            6.监控,这个也太重要的,但是我们经常忽略,很多时候双方联调测试都没问题,经常一上线就出问题,不外乎数据量大了,并发大了等,此时有一个监控页面,你顿时就会信心倍增。

            7.接口文档编写,一般公司都有自己的接口文档模板,当然我们也有,大部分模板都主要定义个一些步骤,如背景、功能描述、交互机制、安全性……我这整理一下我和各个单位讨论时,碰到的一些文件描述不清楚问题,主要是一些格式定义,字段说明等

           (1)字段类型,一定要统一标准,比如日期、时间格式,不足补0等,如2015-01-0112:01:02。

           (2)实体文件,是Base64之后传递字符串,还是其他规则,或者传递一个FTP上的地址,如果是地址,结束时是否带有斜杠“/”等。

           (3)数值,精确小数后几位,小数点前后位数不足时是否补0等。

           (4)异常,最好有错误码,或者其他信息,以及错误后处理机制等。

           (5)必填项如何校验,代码值是否需要校验等。

           (6)最重要的一点,写完了一定要给别人看看,看看别人是否可以看懂,用词准确,是否有遗漏等。

     

            上面只是一些大体的总结,适合一些web项目等,很多其他模式下的接口都不适用,各个点也都没有深入的研究,后续研究后再加进入吧。

     

    展开全文
  • 电商系统、p2p网贷系统、第三方支付都可以有自己的账务系统,账务系统与用户系统可以完全独立,不需要用户ID等信息,只提供给其它系统若干接口。服务可以用WebService的方式...账务系统的功能接口设计1.开户 可选输入
    电商系统、p2p网贷系统、第三方支付都可以有自己的账务系统,
    账务系统与用户系统可以完全独立,不需要用户ID等信息,只提供给其它系统若干接口。
    服务可以用WebService的方式实现,对内提供服务非常方便,调用接口,就要调用普通的API一样。
    也可以做成HTTP的方式,外部使用相对麻烦一些。
    疑问:WebService提供的接口,可以直接用HTTP的方式调用么?


    账务系统的功能接口设计


    1.开户

      可选输入:用户ID、账户资金类型(人民币、美元)
      功能描述:创建一个账户。
      理论上不需要存入用户的ID,因为账务系统和用户系统是比较独立的。
      
      当然也可以存入用户ID,方便查询。
      另外,构造账户号的时候,可以把用户ID作为账户号的一部分。


    2.交易
      充值:为一个账户增加一笔钱。
      提现:从一个账户减少一笔钱。
      转账:把一个账户中的钱,转移到另外一个账户。
      批量转账:转账的增强版。
      冻结资金:把一个账户的资金,冻结一部分,可用余额会减少相同的数额。
      解冻资金:把一个账户的资金,解冻一部分,可用余额会增加相同的数额。


    3.冻结账户/解冻账户
      冻结;把一个账户给冻结了,冻结的账户可能无法进行提现等操作。
      解冻:把账户从冻结状态,变为正常状态。


    4.查询
     基本信息查询:查询一个账户的总金额、可用余额、冻结余额等信息。
     批量查询:查询多个账户的金额等信息。
     开户-冻结账户-解冻账户
     冻结资金、解冻资金等日志
     交易明细:包含了充值、提现、交易等所有的账户资金变动日志。
     

     补充:一次购物消费,交易行为只会记录一条,而做账需要2条记录,借和贷。

    CSDN2014博客之星评选,帮小雷投一票吧

    http://vote.blog.csdn.net/blogstar2014/details?username=fansunion

    展开全文
  • 我们在软件成本估算时,对于系统集成类项目,各系统之间的接口设计怎么计算呢?在这种情况下,系统集成接口开发该怎么算就怎么算,外部接口文件+基本过程等等,计算出来的是集成接口开发总费用,一般不再分解到各个...

    我们在软件成本估算时,对于系统集成类项目,各系统之间的接口设计怎么计算呢?在这种情况下,系统集成接口开发该怎么算就怎么算,外部接口文件+基本过程等等,计算出来的是集成接口开发总费用,一般不再分解到各个开发环节上为各开发环节定价。

    版权属于: 北京中基数联所有。转载时必须以链接形式注明原始出处及本声明。

    展开全文
  • 系统接口框架设计与实现

    千次阅读 2019-07-16 14:28:28
    2 设计 2.1 InterFace 2.2 Business Service 2.3 Object Transaction Data 3 实现 3.1 WebService.asmx 3.2IBusinessService 3.3 Common (SubmitResult) 4 使用说明 4.1 编写业务代码 4.2 接口服务配置 ...

    目录

     

    1 引言

    2 设计

    2.1 InterFace

    2.2 Business Service

    2.3 Object Transaction Data

    3 实现 

    3.1 WebService.asmx

    3.2 IBusinessService

    3.3 Common (SubmitResult)

    4 使用说明

    4.1 编写业务代码

    4.2 接口服务配置

    4.3 调用测试

    5 下载链接


    1 引言

    本文设计并实现一个系统接口框架,使用WebService和Framework类库实现。纯粹抽象的框架没有什么意义,本文框架设计用于Camstar对外系统接口。读者如果只想使用并不关心设计实现,可以直接从第四节开始看。

    2 设计

    该框架设计目的有以下4点:

    (1)轻量级,扩展简单,开发人员只需要编写业务代码。

    (2)普遍性,改接口要能和大部分系统对接。

    (3)规范性,接口调用方根据指定的服务编码调用特定的业务接口,接口发布方可以通过配置方式管理接口。

    (4)安全性,数据传输加密,接口调用需要验证调用者。

    2.1 InterFace

    对外暴露一个稳定的,不修改的接口。

    2.2 Business Service

    设计具体的业务服务都有一个唯一的编码,接口调用方可以通过编码调用指定的业务服务。接口发布方也可以通过管理编码的方式,通过配置管理接口服务。

    2.3 Object Transaction Data

    对内设计Common,对外使用json。接口调用方使用json字符串调用接口,框架获取到json后转化为object。开发人员在编写业务代码的时候再转化成需要的数据对象。接口调用结束返回时又转换成json返回给调用方。保持系统之间使用json传输数据。

    3 实现 

    根据设计实际实现该接口框架,数据加密可以调用第三方加密服务,也可在Json回传数据的过程中自己编写加密算法。本文略过不实现。另外配置文件统一用了web.config。这个也可以添加新的配置文件做更明确的细分。整体代码如下图所示:

     

     

    3.1 WebService.asmx

    该类对外只暴露一个CallInterface方法,通过工厂类创建指定的业务服务,返回抽象业务接口IBusinessService,该方法调用IBusinessService.ExecuteServce()接口调用具体业务服务。代码如下:

    using MESBusiness.Interface;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Services;
    
    namespace MESWebService
    {
        /// <summary>
        /// WebService 的摘要说明
        /// </summary>
        [WebService(Namespace = "http://tempuri.org/")]
        [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
        [System.ComponentModel.ToolboxItem(false)]
        // 若要允许使用 ASP.NET AJAX 从脚本中调用此 Web 服务,请取消注释以下行。 
        // [System.Web.Script.Services.ScriptService]
        public class WebService : System.Web.Services.WebService
        {
            IBusinessService ibs = BusinessServiceFactory.CreateBusinessService();
            [WebMethod(Description = " user:调用者 ;password:调用密码 ;serviceID:调用服务编码 ;json 调用参数(json格式)" )]
            public string CallInterface(string user, string password, string serviceID, string json)
            {
                return ibs.ExecuteServce(user, password, serviceID, json); 
            }
        }
    }

    3.2 IBusinessService

    IBusinessService接口代码如下

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MESBusiness.Interface
    {
        public interface IBusinessService
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="user">用户</param>
            /// <param name="password">密码</param>
            /// <param name="serviceID">服务编码</param>
            /// <param name="jsonStr">参数json字符串</param>
            /// <returns></returns>
            string ExecuteServce(string user, string password, string serviceID, string jsonStr);
        }
    }
    

    实际通过工厂类BusinessServiceFactory注入,BusinessServiceFactory类提供俩个创建业务服务接口的方法,无参方法产生默认业务服务接口。代码如下:

    using System;
    using System.Collections.Generic;
    using System.Configuration;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MESBusiness.Interface
    {
        public class BusinessServiceFactory
        {
            public static IBusinessService CreateBusinessService()
            {
                return CreateBusinessService("DEFAULTBUSINESSSERVICE");
            }
            public static IBusinessService CreateBusinessService(string id)
            {
                string strClass = ConfigurationManager.AppSettings[id];  
    
                Type type = Type.GetType(strClass);  
    
                Object obj = System.Activator.CreateInstance(type);
    
                return (IBusinessService)obj;
            }
        }
    }
    

    3.3 Common (SubmitResult)

    该Project中设计各种数据结构,方便代码编写。其中常用的SubmitResult为所有业务方法的指定返回数据类型。该类代码如下:

    using Camstar.WCF.ObjectStack;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MESCommon.Default
    {
        public class SubmitResult
        {
            private bool isSuccess;
    
            private string message;
    
            private object data;
    
            public SubmitResult()
            {
    
            }
    
            public SubmitResult(ResultStatus rs)
            {
                IsSuccess = rs.IsSuccess;
                Message = rs.IsSuccess ? rs.Message : rs.ExceptionData.Description;
                data = rs;
            }
    
            public bool IsSuccess { get => isSuccess; set => isSuccess = value; }
            public string Message { get => message; set => message = value; }
            public object Data { get => data; set => data = value; }
        }
    }
    

    4 使用说明

    假设有一个开发人员使用该框架添加新的业务代码,只需要编写业务代码,然后再将新编写的业务代码配置到配置文件即可。

    4.1 编写业务代码

    测试代码写在DefaultBusinessService中,在该类中添加一个方法HelloWorld,添加后的DefaultBusinessService类如下:

    using Camstar.WCF.ObjectStack;
    using Camstar.WCF.Services;
    using MESCommon.Default;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace MESBusiness.InterfaceImpl
    {
        class DefaultBusinessService : BusinessService
        {
            public SubmitResult HelloWorld(object para)
            {
                SubmitResult sr = new SubmitResult();
                sr.IsSuccess = false;
                sr.Message = "Hello World.";
                return sr;
            }
        }
    }

    4.2 接口服务配置

    在配置文件中加入一行配置,key为调用方需要调用的服务id,value为业务方法的方法名。如下所示:

    <add key="003" value="HelloWorld"/>

     

    4.3 调用测试

    在iis发布后用地址访问,或者直接运行项目。输入参数调用接口。其中ServiceID:3表示调用配置文件中配置的key为3的方法。

    调用成功如下:

    5 下载链接

    源码可从链接处下载:下载链接

     

     

     

     

    展开全文
  • 系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输到FPGA图像采集卡中进行数据实时处理,并通过PCI接口实现采集卡和计算机之间的通信。本文主要研究数据采集系统 Cam-era Link接口...
  • 软件接口设计

    万次阅读 2016-11-26 17:27:47
    软件接口设计 《构建可扩展的Web站点》主要介绍了Web应用程序的概念、体系结构、硬件需求、开发环境的原则及国际化、本地化和Unicode等基本内容,本文是软件接口设计。 AD:51CTO 网+ 第十二期沙龙:大话数据之...
  • 接口设计文档模板

    千次阅读 2020-05-18 12:57:44
    接口设计说明-xx系统 修改记录 本次修改记录,每次更新后删除,只显示当次内容 日期:2020-05-01~2020-05-06 1. 新增权限模块第3章节内容 接口清单 序号 模块 说明 1 权限模块 主要包含用户的权限功能接口...
  • 分布式系统接口幂等性设计

    万次阅读 2017-09-25 15:35:50
    接口幂等分布式系统中,接口幂等性是系统可行性论证的第一个步骤。 一个软件系统中,所有的接口都可以归结为增删改查四大类;下面我们对这四大类接口进行分析;查询和删除 查询操作 查询一次和查询多次,在数据...
  • 接口设计

    千次阅读 多人点赞 2011-11-21 14:25:42
    接口设计 什么是接口? 接口是CPU和外设之间的连接设备,用于缓存和转发数据。 为什么需要接口? (1)解决主机CPU和外围设备之间的时序配合和通信联络问题  主机的CPU是高速处理器件,比如8086-1...
  • 分布式系统接口幂等性设计

    万次阅读 2020-08-16 02:26:47
    分布式系统接口幂等性设计 在微服务架构下,我们在完成一个订单流程时经常遇到下面的场景: 一个订单创建接口,第一次调用超时了,然后调用方重试了一次 在订单创建时,我们需要去扣减库存,这时接口发生了...
  • SpringBoot进行接口设计

    千次阅读 2018-03-26 16:38:08
    所以项目进行接口设计是有必要的。这里使用SpringBoot基于REST风格快速进行接口设计。有关源码和资料可在:https://download.csdn.net/download/qq_36135928/10309244点击打开链接可以进行下载。下面贴出有关核心...
  • 接口设计规范

    千次阅读 2018-10-19 00:46:14
    文章目录接口设计规范1 接口示例2 基本规范2.1 公共参数2.2 响应数据2.3 字段类型规范2.4 上传/下载2.5 避免精度丢失3 瘦客户端4 拓展性5 安全性6 兼容性7 性能优化 接口设计规范 接口规范化以后,会少很多坑,避免...
  • api接口设计

    万次阅读 2016-11-12 16:20:54
    写过不少接口,不过一直没有去总结,网上搜了一下,大同小异,此文根据以下几个链接整理修改: https://segmentfault.com/a/1190000004051246 http://blog.sqrtthree.com/2015/09/08/api/ ...
  • RESTful API接口设计

    千次阅读 2016-12-29 15:10:56
    RESTful API接口设计URL设计URL(Uniform / Universal Resource Locator)既统一资源定位符。数据交换格式可选:XML、JSON,Protobuf XML、JSON大家应该都很熟悉了,这里介绍一下Protobuf。 Protocol buffers are ...
  • 裸机界面开发一般指在不借助于现成的GUI库的情况下,构建整个应用系统的图形(文本)用户接口。通常一个完整的GUI库都会提供诸如窗口(界面)管理,事件生成,派发等等。除此之外,其还有其固定的一个编程框架,通常这种...
  • http://blog.csdn.net/xjdalan/article/details/48063233 APP后端数据接口注意事项 ... https://www.zhihu.com/question/27691454 怎样设计网站的前后端结构、编写网站的前后端接口
  • 接口设计原则

    千次阅读 2016-04-20 16:51:32
    系统越来越多,越来越复杂,项目开发中不可避免的遇到多个系统间调用,例如A调用B、B调用C 可能遇到以下问题 1、A调用B接口不通、或者B接口响应时间太长、影响体验及吞吐量 2、上游系统压垮下月系统 3、系统越来越...
  • APP接口设计规范

    千次阅读 2016-08-22 16:10:23
    APP接口设计规范 效率 安全 版本兼容性 面向对象设计 数据格式Json 服务端的异常处理 1.效率APP对服务器端要求是比较严格的,在移动端有限的带宽条件下,要求接口响应速度要快,所有在开发过程中尽量选择效率高的...
  • 接口设计之幂等性设计

    万次阅读 多人点赞 2020-02-06 18:33:01
    今天我们来聊聊接口的幂等性设计,所谓幂等,就是任意多次执行所产生的影响均与一次执行的影响相同。 幂等性接口是指可以使用相同参数重复执行,并能获得相同结果的接口。这里就不展开数学中的定义了,有兴趣的可以...
  • 前言 兵马未动,粮草先行。在一款APP产品的各个版本迭代中,兵马的启动指的是真正开始敲代码的时候,粮草先行则是指前期的需求,交互,UI等评审准备阶段,还有本文要说的接口的...所以建议在前期接口设计和评审时,客
  • framebuffer = (uint8_t *)FRAMEBUF;
  • API接口设计该如何设计?如何保证安全? 在实际的业务中,难免会跟第三方系统进行数据的交互与传递,那么如何保证数据在传输过程中的安全呢(防窃取)?除了https的协议之外,能不能加上通用的一套算法以及规范来...
  • 接口设计定理

    万次阅读 2007-04-28 20:46:00
    接口设计定理 相关文章链接: 模块分解原理探索 模块分解原理与三权分立 接口关系稳定原理探索 前面几篇文章中讲过模块分解原理和接口关系稳定原理,这篇文章中将使用模块分解原理和接口关系稳定原理来推导一个...
  • 同时,针对小程序提交的数据需要登录后台管理系统审核。 实现方式很纠结,希望大神解惑: 1.最简单的办法是把管理后台与小程序api接口放到一个web工程。这样的坏处是/admin和/api在一个工程下,无法控制/admin只...
  • app接口设计之signature签名的php实现

    千次阅读 2016-11-25 17:15:56
    app接口设计之signature签名的php实现为了保证移动端和服务端数据传输相对安全,建议对接口进行加密传输。 平台参数 平台参数是客户端调用所有接口时都需要传递的参数。用于接口版本管理、安全校验等目的。 os ...
  • RESTful API接口设计标准及规范;

    万次阅读 多人点赞 2019-01-12 11:42:10
    RESTful发展背景及简介 网络应用程序,分为前端和后端两个部分。当前的发展趋势,就是前端设备层出不穷(手机、平板...RESTful API是目前比较成熟的一套互联网应用程序的API设计理论。 REST(Representational Stat...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,056,467
精华内容 422,586
关键字:

系统接口设计