写点什么

使用政府开放数据和低代码方案构建应用

2018 年 5 月 14 日

译者注:低代码(Low Code)开发指无需编码或很少编码就可以快速生成应用,通常是通过 GUI 和配置开发应用

本文要点

  • 市政府每天生成并发布大量的数据和信息。对公众开放这些数据集,会使政府机构更为透明和负责。对于纽约市而言,开放数据本身就是法律规定的。
  • SODA(Socrata Open Data API)是最广为使用的政府开放数据解决方案。其中,数据以 REST 风格的 API 形式呈现。
  • 基于云的低代码开发平台为外部 REST API 提供了一种简单的、声明式的访问方式,支持前所未有范围的用户去使用可用的信息,无需用户娴熟掌握开发技术。
  • 本文最后,演示了如何使用 Oracle Application Express(APEX),一种基于云计算的低代码开发工具,构建一个提供纽约市 311 服务请求公开数据报告和图表的应用。

市政府每天生成并发布大量的数据和信息。对公众开放这些数据集,会使政府机构更为透明,让政府对公民更为负责。政府通过鼓励对数据集的使用和免费分发,邀请公民更加积极地参与公共机构事务,推动创建以公民为中心的创新服务和解决方案。

对纽约市而言,开放数据本身就是法律规定的。2012 年颁布的《开放数据法》中规定,所有的公开数据应在 2018 年底之前在单一门户网站上提供。目前,纽约市已在 opendata.cityofnewyork.us 上提供了数百个数据集。网站支持公民按机构或类别查找数据集,并通过所提供的实用程序搜索和过滤数据。全美国已有数百个城市类似地提供了数据集,通常遵循相同的发布标准。

这些数据集的真正价值在于,它们是以基于标准 REST API 方式提供的,支持使用第三方工具和框架的开发人员利用这些丰富的信息,构建新的创新应用和解决方案。基于低代码(Low Code)和云的开发平台,提供了一种对外部 REST API 的简单的、声明式的访问方式,这使得前所未有地广泛规模的受众可以利用更多的可用信息,尽管这些用户可能并非非常精通具体的开发技术。

本文给出了对政府开放数据(Municipal Open Data)、REST API 和 Socrata Open Data API 等概念的一个高层概览。其中,Socrata Open Data API 正被纽约及其它许多城市所使用。通过本文,读者将学会如何使用基本的过滤器、SoQL 查询和 SoQL 函数,查看和分析可用的数据。本文还会介绍各种用于查看并理解所提供 API 的工具。在具备了上述知识之后,读者将学会如何在一些广为使用的数据集(例如,311 服务电话,纽约市招聘信息)上构建应用。

政府开放数据

自本世纪初以来,开放政府数据的想法发展势头强劲。互联网通常被看成是现代世界的一个公共空间,政府可从中更好地了解公民及他们的需求,让公民充分地参与到政府事务中。因此,向公众开放政府数据,有利于开展民间讨论、改善公共福利,并可更有效地利用公共资源。

开放政府(Open Government)公约于 2007 年在加利福尼亚州的 Sebastopol 提出。公约中给出了开放政府数据(Open Government Data)的八项原则

  • 完整性:排除具有隐私和安全上限制的数据,所有公众数据都应提供。
  • 原始性:数据应按原样提供,具有最高级别的粒度,不得做汇总或修改。
  • 时效性:数据应尽可能第一时间提供,并有必要保留数据的价值。
  • 可访问性:数据应该提供给最广泛的用户和目的。
  • 机器可处理:数据的结构应该支持机器自动处理。
  • 非歧视性:数据应该可以提供给任何人,访问不应该要求注册。
  • 非专有:数据应以开放格式提供,不得存在拥有专有控制权的实体。
  • 免许可:数据不应受任何版权、专利商标或商业秘密法规管制。

作为提高市政府的可访问性,透明度和问责制的举措的一部分,纽约市将各该市各机构和组织生成的所有公共数据通过 opendata.cityofnewyork.us 提供给公众使用。该网站是一个政府生成的机器可读数据集的存储库,向公众提供了开放数据目录。

通过研究分析或创建应用,任何人都可以使用这些数据集,参与并改进政府事务,从而更好地了解市政府机构是如何提供的服务、如何改善公民的生活,以及政府为公民提供服务的方式。


图 1:纽约市开放数据的主页

Socrata Open Data API(SODA)

REST(表现层状态转换,Representational State Transfer)是一种分布式超媒体系统的架构风格,是由 Roy Fielding 在他的博士论文中定义并给出的。REST 风格描述了系统间如何使用HTTP 获取数据并生成XML、JSON 等格式的数据。大多数开放数据API 都基于REST,其中包括 Socrata Open Data API(SODA)

Socrata 是一家为公共部门组织提供服务的软件公司,它为政府工作人员和公众发现、使用并操作已有的政府数据提供帮助。Socrata 的解决方案支持将公共部门机构主业务系统的数据流自动化为可公开访问的服务。Socrata Open Data API(SODA)是一种最广为采用的政府开放数据解决方案。Socrata 已为世界各地的政府、非营利组织和非政府组织提供了数百种不同的数据目录。当前,许多美国城市和一些组织都具有开放数据门户。其中,开放数据网络(Open Data Network) https://www.opendatanetwork.com 提供了一个开放数据集的全局目录。它支持使用 Global Catalog API 以编程方式集成并查询其它的系统。

为了与开放数据资源进行交互并与其它系统集成,我们需要一个“端点”。SODA API 的“端点”就是唯一表示对象或对象集合的 URL。每个 Socrata 数据集,以及每个单独的数据记录,都有其自己的端点。

下面链接所给出的例子,就是纽约市 311 服务请求的端点:

https://data.cityofnewyork.us/resource/fhrw-4uyv.json

在此例中,所有资源的访问都基于一个通用的基础路径“/resource/”,此后是数据集标识符。每个数据集都对应一个唯一的标识符。它由八位的数字字母组成,被短横线分为两个四字符短语。该 URL 可以使用 Web 浏览器打开,也可以使用其它一系列工具访问,例如 Paw Postman 等 REST Client 浏览器插件。

端点 URL 后可以添加一些基本的过滤器和 SoQL 参数,实现对特定数据集的请求,或是实现对结果的查询和操作。

SODA API 是自描述性的,即数据集本身的模式和内容决定了数据集的查询方式。数据中的任何字段都可以作为过滤器,只需将其作为 GET 参数附加到 API 端点即可。例如,要对上述例子做过滤,使得其中仅包括布鲁克林的 311 服务请求,我们可以添加“borough”作为参数,然后给出自治市镇名称:

https://data.cityofnewyork.us/resource/fhrw-4uyv.json?borough=BROOKLYN

SoQL(Socrata 查询语言, Socrata Query Language )是一种类似于 SQL 的简单查询语言,设计用于简化对 Web 上数据的操作。与标准 SQL 基本一样,开发人员可以选择(SELECT)特定的列、使用 WHERE 语句过滤查询结果、对结果做排序(ORDER)和分组(GROUP),并应用一些聚合函数。

鉴于当前不少数据集的规模非常大,从数百万行到数十万行不等,因此在将数据下载到客户端应用前对数据做汇总是至关重要的。仅加载所需的数据和聚合,而不是下载完整的数据集,这将提高查询性能。并且在很多情况下,这种做法将使客户端应用真正可运行。因为在许多情况下,完全下载所有的数据实际上是不可行的。

下表汇总列出了各项可用的 URL 参数,以及它们的功能。

URL 参数 描述 缺省值 对应 $query 中语句查询 $select 类似于 SQL 中的 SELECT,指定需返回的一组列。 所有列 SELECT $where 类似于 SQL 中的 WHERE,指定过滤返回的列。 不定义过滤器 WHERE $order 类似于 SQL 中的 ORDER BY,指定要排序的列。 不指定排序 ORDER BY $group 类似于 SQL 中的 GROUP BY,指定分组结果的列。 不指定分组 GROUP BY $having 对聚合结果行进行过滤。 不指定过滤 HAVING $limit 指定最大返回结果数。 1000 LIMIT $offset 用于分页,指定从偏移量处开始显示结果。 0 OFFSET $q 对设定值做全文检索。 不检索 N/A $query 将整个 SoQL 查询字符串作为一个参数。 N/A N/A 针对上面给出的 311 数据的例子,我们对数据做进一步的过滤和聚合,下面的 URL,选定只显示 Brookly 区域投诉的类型和数量,并按降序排列。

https://data.cityofnewyork.us/resource/fhrw-4uyv.json?$select=complaint_type,%20count(complaint_type)&$group=complaint_type&$order=count(complaint_type)%20desc&borough=BROOKLYN

低代码应用开发

通过纽约市的开放数据门户网站,以及其它一些采用 Socrata Open Data 解决方案的开放数据门户网站,市民可以轻松地访问大量的公共数据集。使用数据集所提供的工具,无疑是一种查找信息和开展研究的好方法。此外,通过基于浏览器的查看器,市民可以搜索、过滤、可视化并导出任何可用的数据。除了借助于基本的查询接口之外,许多数据集还具有很大的潜力,可作为构建新型创新解决方案的基础。如果开发人员想要将这些数据集集成到自己的应用中,可以使用 Socrata Open Data API(SODA)。SODA 适用于绝大多数的数据集,它通过 HTTP 以 JSON 和 CSV 格式提供数据。

所有的 SODA API 都提供了大量的文档。其中包括一些代码示例,演示了如何使用部分最广为使用的编程语言来操作数据。这样,对于具有所需编程技能的人,可以开放地使用数据。为了扩大这些 API 的潜在目标受众,而非仅局限于专业开发人员,“低代码”开发工具扮演着越来越重要的角色。低代码开发允许开发人员只需插入相应的 SODA URL,然后使用声明式向导,就可以构建一些使用数据的强大组件,例如报告、图表、日历等。实现所有这些功能,人们只需要写很少的代码,或者根本不需要写代码。

低代码应用开发的主要目的在于提高生产率,即使用较少的工作实现更多的功能、更高的一致性和更高的保真度。低代码开发框架利用了功能强大的组件实现报告功能、数据的可视化和表单控件。这使得应用开发人员可以专注于解决业务问题,并给出解决方案,从而在一些普遍和重复性的低层代码上花费更少的时间和精力。

低代码工具可显著地提高应用的开发生产力和可维护性。普通公民就可以成为开发人员,自动执行业务流程,并实现某一点上的解决方案。此外,低代码工具对专业开发人员也同样具有吸引力,它们可以显著地降低应用开发和维护的时间和复杂性。正确使用低代码工具,可最广泛地为使用声明性编程的用例提供卓越的生产力。

使用低代码解决方案构建基于政府开放数据的应用

为展示这一解决方案的实现,下面我们将使用上面介绍的纽约市 311 服务电话数据,其调用接口位于:

https://data.cityofnewyork.us/resource/fhrw-4uyv.json

我们将使用 Oracle Application Express (APEX)低代码开发套件,构建基于此数据集的报告和图表应用,效果如图 2 所示。Oracle Application Express 支持开发人员创建以数据库为中心的 Web 应用,并具有可靠、可扩展和安全等特性。开发人员不需要过多的编程经验,只需使用 Web 浏览器,就可以为台式机和移动设备构建和部署基于 Web 的专业应用。


图 2 一个 APEX 图表,其中显示了纽约市 311 服务请求的情况

在开始使用低代码解决方案构建应用时,开发人员必须启动一个本地 APEX 实例,或是登陆基于云的 APREX 服务。使用基于云服务的优点是服务总是在线的,即应用一旦完成开发,就会即刻提供给开发人员所指定的用户。

一旦 APEX 服务可用,这时就需要开发人员创建一个 APEX 工作区,然后使用声明式的“Create Application Wizard”开始构建应用。就本例而言,仅用一个空白页面构建应用就可以了。在创建应用之后,开发人员需要在“Shared Components”中使用“Web Source”组件,创建对 REST API 的引用。创建新的 Web 源时,必须要指定 API 的 URL 端点、Web 源名称、Web 源类型及 HTTP 方法等信息。SODA API 支持通过 HTTP 和 HTTPS 访问。

下一步,APEX 会将端点 URL 拆分为特定于服务器的和特定于服务的两个部分。APEX 将使用特定于服务器的 URL 部分创建一个新的远程服务器(Remote Server)对象。所生成的实体用于对指向同一服务器的 REST 端点进行分组。使用这样的 REST 服务集合,一旦服务器发生更改,开发人员仅需调整远程服务器对象。

然后,开发人员将会得到提示,需要输入验证信息。虽然 SODA API 不需要进行认证,但开发人员可以使用高级属性添加应用令牌。此外,开发人员还可以使用可选的模块参数,定义 SODA 过滤器和 SoQL 查询。要实现在 URL 中包含参数,应该指定参数类型为“Query String”。参数可以是静态的,也可以是动态的。动态参数支持在运行时根据用户的操作进行动态调整。

创建 Web 源的最后一步是“Discovery”。该步骤向 API 端点实际发出 HTTP 请求,并以 JSON 格式返回结果。APEX 对 JSON 结构进行分析,并创建一个数据概要文件,其中包含了所有可用的列,以及所发现的数据类型。此后,Web 源与数据配置文件将被 APEX 中的声明性组件创建向导使用,与 APEX 通常使用数据库数据字典来读取本地表上的表和列信息一样。

在创建 Web 源之后,许多 APEX 标准组件,例如交互式报告、经典报告、图表和日历等,就可以直接连接到 REST API。如果要使用网络资源,开发人员只需简单地浏览相应的创建页面向导,然后选择“Web Source”作为数据源。一旦选定了组件,开发人员就可以选择要添加到报告中的列,或者对于图表或日历页面而言,选择将哪些列作为显示列和值列。

图 3 显示了使用纽约市 311 服务调用 API 所创建的应用。在本例子中,我们使用了一个 APEX 交互网格,其中选择了数据集中最相关的列,并显示在报告中。例子中还使用内置的“Chart”功能添加了一个 Oracle JET 图表,显示了拨打 311 电话最多的区域。


图 3 纽约市 311 服务电话情况

结束语

开放数据为市政府、地方、州和联邦政府机构提供了与选民接触的大量机会,使政府更加透明和负责。Open Data API 不仅支持公众在所提供的开放数据门户网站上查找信息,而且可以作为构建新型创新服务的一个基础。低代码开发平台支持通过简单地指定 API 端点就着手构建应用。对于使开放数据 API 更易于为更广泛的开发人员访问,低代码开发平台发挥了重要的作用。开发人员可以使用简单的声明式向导,构建自己的解决方案,并添加其它一些数据集和服务。当前,云服务提供商使得开发人员可以轻松地使用公共 REST API 构建应用。因为其中所有的常见任务,包括提供服务器、授权并配置软件和网络等,通常都可由服务提供商负责。

关于作者

Marc Sewtz 供职于 Oracle 数据库工具组,任 Oracle Application Express 软件开发经理。Marc 具有 14 年的行业经验,涉及咨询、销售和开发方面的职位。Marc 于 1998 年加入 Oracle,自 2001 年起,他一直致力于 Oracle Application Express。他最初担任顾问,使用 Oracle Application Express 作为开发框架, 编写 Oracle 电子商务套件的扩展模块。后来,他在 Oracle Application Express 开发组中担任软件架构师和开发经理。在此职位上,Marc 管理着一个分布于全球的开发人员和产品经理团队,负责并为大量的产品功能做出了贡献,其中包括报表引擎、表格形式、PDF 打印和 BI Publisher 集成、向导及用户界面,还包括构件等。

查看英文原文: Building Apps Leveraging Municipal Open Data and Low Code Solutions

2018 年 5 月 14 日 17:571313
用户头像

发布了 378 篇内容, 共 96.8 次阅读, 收获喜欢 223 次。

关注

评论 1 条评论

发布
暂无评论
发现更多内容

智能的财务管理系统,来自某科技公司CEO亲手搭建

明道云

架构师技术领导力成长之路

IT民工大叔

领导力 架构师

新技术(区块链)--让游戏行业走的更远

CECBC区块链专委会

区块链技术 防篡改不可逆

(政务上链)新数据孤岛、安全风险等问题待解

CECBC区块链专委会

工作效率 公开透明 新技术

Android Development最佳实践

teoking

实践录丨如何在鲲鹏服务器OpenEuler操作系统中快速部署OpenGauss数据库

华为云开发者社区

数据库 鲲鹏920 操作系统 服务器 opengauss

秒懂云通信:如何用阿里云语音通知服务(小白指南)

阿里云Edge Plus

语音

策略模式解析

南方有乔木兮

Twitter高性能分布式日志系统架构解析

俊俊哥

pulsar bookKeeper 分布式文件存储

Spring系列第2篇:控制反转(IoC)与依赖注入(DI),晦涩难懂么?

老大哥

java高并发系列 - 第11天:线程中断的几种方式

简爱W

Springboot拦截器使用及其底层源码剖析

南方有乔木兮

实现扫码登陆的最简单方案与原理

Java小咖秀

Java 解决方案 经验总结

继oneAPI之后,英特尔为异构计算跨架构编程再添“利器” 发布全新机器编程系统

最新动态

我天!xx.equals(null) 是什么骚操作??

导导

IDEA 插件找不到?看这里!那就自己敲一个!

程序员小航

json IDEA 开发工具 idea插件 IntelliJ IDEA

并发编程基础原理

刚刚🏂

海华大赛第一名团队聊比赛经验和心得:AI在垃圾分类中的应用

华为云开发者社区

AI 算法 数据分析 垃圾回收机制 华为云

骚操作!用 CPU 烤肉,这位程序员做到了!

程序员生活志

程序员 gpu 程序人生

助力银行核心下移,监控分布式数据库,融天鹰眼轻松应对五大挑战

DT极客

LeetCode题解:189. 旋转数组,使用新数组Copy,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

LeetCode题解:189. 旋转数组,pop+unshift一行,JavaScript,详细注释

Lee Chen

LeetCode 前端进阶训练营

面经手册 · 第1篇《认知自己的技术栈盲区》

小傅哥

Java 小傅哥 面试官 技术栈

功能扎实的ERP模版已上架应用库(支持免费安装使用)

明道云

六字说出微服务的本质

看山

架构 微服务

Java异步之《我call(),Future在哪里》

BUZHIDAO

LeetCode002-两数相加-medium

书旅

算法 数据结构与算法

JVM系列之:通过一个例子分析JIT的汇编代码

程序那些事

Java JVM JIT 汇编

创业公司技术体系建设-CI/CD

星际行者

CI/CD

【华为云技术分享】DLI跨源|当DLI遇见MongoDB

华为云开发者社区

数据库 mongodb dlib 数据集 华为云

腾讯安全领御区块链与张裕集团达成战略合作,打造高端葡萄酒区块链溯源平台

CECBC区块链专委会

产品溯源 无法篡改

使用政府开放数据和低代码方案构建应用-InfoQ