近期不是加班就是在家玩,自学进度又缓下来了,实在是难坚持啊,倒是减肥略有成效,现在最佳纪录是77.9 KG
项目里经常要在某系统里提供一个接口给其它系统,做些数据交互,一般有这几种方式,都有用到,总结一下吧:
1、数据库直接存取:
如果各系统的数据库都在一台服务器上,或能通过链接服务器访问,那直接通过数据库存取数据也是可以的。
系统里一般都有维护一张配置表,增加一个配置项,XX系统的链接服务器名和数据库名,如XXLinkServer.XXDb.dbo.
要存取数据时,存储过程里先取出SELECT @LinkDb = XX FROM XXConfig(取出【XXLinkServer.XXDb.dbo.】),再拼接字符串,比如
SET @SqlText = 'SELECT * FROM ''' + @LinkDb + '''XXTable;'
EXEC (@SqlText)
如在同一台服务器上,则不用链接服务器,直接配置项为XXDb.dbo.,或配一台指向本机的链接服务器也可以(性能也能会受影响)
直接存取数据库,速度快,效率高,要什么数据直接就有,各种表自已去关联
但由于直接开放数据库,安全不好保证,取数据还好,乱写数据会影响其它系统。链接服务器为了方便都是用sa连,要配置相应用户权限的链接服务器很麻烦。而且要对表结构比较了解
2、数据库存储过程接口
提供一个XXInterface的存储过程,传一些ID、TYPE之类的参数进去,获取/提交数据。
内部系统不对外开放,有点接口的意思了,但需要通过数据库后台调用。
3、控制器方法
增加一个开放的控制器,里面提供一些方法,传参数进来获取数据,返回字符串或Json
和WebApi比较类似,但不如WebApi好
4、WebApi
其它同事推荐用这种方法,和普通控制器差不多,但一般控制器继承自Controller,WebApi继承自ApiController
WebApi专门用来对接数据,更好控制HTTP返回码之类,对XML、JSON也支持的更好
[FromUri]可以把URL中的参数解析成数据实体,强制不读Post的数据
默认是[FromBody],从Post的Data中读数据
使用过程中,如果只是基本的获取数据,感觉WebApi和普通的控制器方法区别不大,但WebApi更加通用和规范,还有很多特性可扩展(比如绑定IP、验证用户、异常获取等)
WebApi有个巨坑的地方,如果你方法名是GetXX,那它默认就是只能用GET,哪怕加上[HTTPPOST]头也不行。。。
方法名以Get开头,WebApi会自动默认这个请求就是get请求,而如果你以其他名称开头而又不标注方法的请求方式,那么这个时候服务器虽然找到了这个方法,但是由于请求方式不确定,所以直接返回给你405——方法不被允许的错误。
所有的WebApi方法最好是加上请求的方式([HttpGet]/[HttpPost]/[HttpPut]/[HttpDelete]),不要偷懒,这样既能防止类似的错误,也有利于方法的维护,别人一看就知道这个方法是什么请求。
5、WebService
和其它公司的数据交换几乎都是通过WebService,但自已没搭建过,只用过别人的