中国石油化工股份有限公司胜利油田分公司物探研究院 山东 东营 257000
摘要:随着数据治理概念的普及,各应用对跨专业、跨部门的数据需求日益增加,如何实现应用与数据库的松耦合、简化应用在不同环境下的移植性操作步骤、缩短应用开发周期、实现数据安全快速的传输,解决这些问题,越来越紧迫。论文通过研究REST架构风格,按照前后端分离的微服务方式,发布restful的API接口,应用系统通过调用API接口的方式实现对数据资源的读取、更新、删除、写入等操作。
关键词:REST;数据共享;接口
一、前言
百度百科对REST的定义为:一种软件架构风格,即表述性状态传递(英文:Representational State Transfer,简称REST)是Roy Fielding博士在2000年他的博士论文中提出来的一种软件架构风格。它是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。
近年来,在国家和集团层面,对数据资源的安全管理要求越来越高,在数据防泄露、防篡改、防入侵、可追溯等方面都提出了具体的要求,数据资源的泄漏、损坏和丢失都将面临经济、行政和法律方面的追责,需要在数据采集、传输、存储、应用等各个环节强化安全管控。
1.1国外研究现状
十多前年,国外很多网站就开始使用基于REST的API接口访问的技术,如Google、Amazon、PayPal、FaceBook、Twitter等商业巨头都拥有自己的RESTful的API 接口,通过访问接口来获取、写入、更新数据等。在Java语言中重要的两个以SOAP技术开始的网络服务框架XFire和Axis也把REST作为自己的另一种选择。它们的新的项目分别是Apache CXF和Axis2。Java语言也制定关于REST网络服务规范:JAX-RS: Java API for RESTful Web Services (JSR 311)。
1.2国内研究现状
目前常用的WebService的两种方式为SOAP和REST,其中SOAP最早是针对RPC的一种解决方案,简单对象访问协议,轻量,作为应用协议可以基于多种传输协议来传递消息,使用门槛较高。REST的核心思想是通过向资源的URL发送请求并获得响应来检索资源,由于对客户端和服务器进行了前后端分离,后期在扩展应用程序方面就比较轻松和灵活。
目前国内的一些大型互联网公司,如淘宝、阿里巴巴、京东、BAT、新浪微博等都在使用基于REST的web服务方式。随着REST技术的推广,越来越多的web服务开始采用RSET风格设计和实现。
1.3油田企业现状
胜利油田“数据+平台+应用”模式概念的提出,将结构化数据、实时数据、地理信息数据、音视频数据、成果图形文档、体数据等类型数据,勘探开发、经营管理、业财融合等专业数据,生产系统、财务系统、作业系统等应用系统直接串联了起来,使之成为一个整体。
二、REST服务设计与研究
2
2.1REST接口设计准则
REST架构是针对web应用而设计的,目的是为了降低软件研发的复杂性,提高可伸缩性。因此设计时需要遵循几个方面的准则:
(1)网络上的所有事物都被抽象为资源(resource);
(2)每个资源对应一个唯一的资源标识符(resource identifier);
(3)通过通用的连接器接口(generic connector interface)对资源进行操作;
(4)对资源的各种操作不会改变资源标识符;
(5)所有的操作都是无状态的(stateless)
因此我们在试验过程中将数据来源数据中的各个数据表都作为一个个独立的资源,数据表存储的内容全部通过URI对资源进行唯一标识,如“发明人信息表”、“专利代理机构表”等的url都是唯一的一个数据资源标识。
ERST对数据资源的操作分为get、post、put和delete等,为了加强数据访问安全性,避免进行数据的误操作,如删除、更新、插入等,我们按照上述四中操作方法,根据用户业务需求,分别对资源的查询、写入、删除、更新等造作定制不同的数据服务接口,规范接口操作。
2.2REST接口规范
REST服务作为服务层的基础服务,承担了应用层与资源层的桥梁作用。同时,通过REST风格的接口实现开放式的数据访问,不需要对资源的数据结构进行了解,仅需通过访问标准接口,可实现不同风格、不同类型的前端显示。
表1 接口设计
API | HTTP方式 | API功能说明 |
/v1/document/serviceCode | POST | 获取文档数据 |
/v1/structureData/serviceData/serviceCode?appkey=** | POST | 查询结构化数据 |
/v1/timeData/serviceCode | POST | 查询实时数据 |
/v1/structureData/transql/serviceCode?appkey=** | POST | 增删改事务数据 |
按照中国石化企业《Q_SH 0435—2021 石油天然气勘探开发信息交换标准》,针对结构化、音视频、实时数据、体数据、文档图形等六大类数据的特点设计了服务规范。包含定义接口名称、资源URL地址规范、操作方式、相应格式、请求参数等。
调用结构化接口
接口名称:服务数据信息
资源URI: http://api.xxxx.com/v1/structuredData/serviceData/{serviceCode}
操作方式:GET
响应格式:JSON
请求示例:
/v1/structuredData/serviceData/OIL_WELL_PROD_DAILY?page=1&pageSize=10
表2结构化接口参数表
序号 | 参数名称 | 是否必填 | 说明 |
1 | instanceIds | 否 | 要查询的对象实例ID集合,多个使用英文逗号分割 |
2 | page | 否 | 分页查询时,需要查询第几页 |
3 | pageSize | 否 | 分页查询时,每页条数 |
4 | condition | 否 | 自定义的查询条件,即sql语句中where后面的部分,如果参数中有中文,需要进行编码 |
5 | orderBy | 否 | 自定义的排序规则,即sql语句中order by后面的部分 |
6 | serviceCode | 是 | 要查询的服务唯一编码 |
7 | app_key | 是 | 应用唯一的key |
文档/体数据下载接口
接口名称:下载文件数据
资源URI:http://api.sinopec.com/v1/docment/{serviceCode}
操作方式:GET
响应格式:text/xml
请求示例:/v1/docment/{serviceCode}?blobItemCode=’’&fileId=’’&app_key
请求参数:见下表
表3 文档/体数据参数表
序号 | 参数名称 | 是否必填 | 说明 |
1 | fileId | 是 | 文件唯一ID |
2 | serviceCode | 是 | 服务编码 |
3 | app_key | 是 | 应用唯一的key |
4 | blobItemCode | 是 | 该文件在服务数据中表示的blob数据项代码 |
音视频数据访问接口
接口名称:播放指定对象的视频
资源URI:http://api.sinopec.com/v1/videodata/{serviceCode}
操作方式:GET
响应格式:text/xml
请求示例: /v1/videodata/DXSPFW?instanceName=大湾D401-火炬&app_key
请求参数:见下表
表4 音视频参数表
序号 | 参数名称 | 是否必填 | 说明 |
1 | serviceCode | 是 | 服务编码 |
2 | app_key | 是 | 应用唯一的key |
3 | instanceName | 否 | 示例名称 |
实时数据访问接口
接口名称:获取指定对象的实时数据
资源URI:http://api.sinopec.com/v1/timedata/{serviceCode}
操作方式:GET
响应格式:JSON
请求示例: /v1/timedata/{serviceCode}?instanceName=’’&objCode=’’& app_key=
请求参数:见下表
表5 实时数据参数表
序号 | 参数名称 | 是否必填 | 说明 |
1 | instanceName | 是 | 业务对象实例名称,如果有中文需要进行编码 |
2 | objCode | 否 | 指定的对象编码 |
3 | serviceCode | 是 | 要查询的服务唯一编码 |
4 | app_key | 是 | 应用唯一的key |
5)服务BLOB数据项
接口名称:获取服务blob数据项
资源URI: http://api.sinopec.com/v1/structuredData/serviceBlob/{serviceCode}
操作方式:GET
响应格式:JSON
请求示例: /v1/structuredData/serviceBlob /ZHCX_CESHI?app_key=
请求参数:
表6 BLOB参数表
序号 | 参数名称 | 是否必填 | 说明 |
1 | serviceCode | 是 | 要查询的服务唯一编码 |
2 | app_key | 是 | 应用唯一的key |
2.3基于REST的数据服务平台应用
数据服务在业务应用与数据库之间搭建了数据交互的桥梁,通过Restful风格的接口,为应用提供面向不同类型数据库、数据源的跨库、跨表的数据访问能力,并为其他微服务提供基于RPC方式的数据交互能力。
图2-1数据服务平台架构
采用spring boot + mybatis + spring cloud 微服务的架构的开发模式,通过keepalived + Nginx的方式解决访问层的高可用。通过Consul进行服务的发现与注册,consul template 动态的修改Nginx的配置。
研究了基于REST服务的监控技术,实时统计各服务的访问情况,其中服务调用方面主要开展从服务数据异常统计、服务流量告警统计、服务调用统计、服务汇总统计等多种维度的统计等方面的研究;数据写入监控从数据更新及时性、完整性和一致性等方面进行对数据读取和写入操作进行监控。
图2-2REST接口数据访问监控
三、
应用效果
通过研发建立基于REST的专利数据服务平台,发布数据服务接口的方式,研究应用Redis数据缓存技术,实现胜利油田专利数据的服务式获取,完成数据在胜利项目管理与成果评价系统中的本地化,并为其他应用提供更高效的数据服务支持。
同时通过分析数据服务接口日志进行监控,做到事前预警、事中告警、事后统计等手段,及时获取服务接口运行情况,在一定程度上提高了数据服务的高效性和稳定性。
四、结语
“数据+平台+应用”模式通过REST接口数据实现了上层应用与底层数据库的松耦合,使得应用只专注于开发,而无需关心数据存储、数据来源,缩短了应用开发周期。数据治理数据服务为上层应用提供了高效、稳定的数据资源访问接口,还将多个资源组成系统,以 URI 间的关系体现复杂的数据结构,实现企业跨专业、跨部门的数据在线共享。
参考文献
[1]基于REST的地震数据管理及服务技术研究.《信息系统工程》;2019-07-08
[2]Java环境下REST风格Web服务的开发方法. 黄华东;《科技信息(科学·教研)》;2008-05-25
[3]《Q_SH 0435—2021 石油天然气勘探开发信息交换标准》