使用 InfoSphere Business Glossary REST API 开发 Android 应用程序

IBM® InfoSphere® Business Glossary 使用户能够创建、管理和共享企业词汇表与分类系统。InfoSphere Business Glossary 包含一个 REST API,通过支持基于特定需求而开发自定义应用程序,使术语表内容更容易使用。该 API 会随后续的每个 InfoSphere Business Glossary 版本而更新。本文提供了使用 IBM InfoSphere Business Glossary REST API 开发一个动态 Android 应用程序的分步说明。该应用程序使用户能够查找术语,检查术语的详细信息,并使用 Android 设备上的原生电话和电子邮件应用程序联系管理员。本文的目的是让 InfoSphere Business Glossary 客户能够利用通过构建这个样例应用程序所获得的知识,为使用该 REST API 创建自己的自定义应用程序提供启发。

Benny Halberstadt, 高级架构师, IBM

作者的照片Benny Halberstadt 是一名 IBM InfoSphere Governance Tools 高级架构师。他过去 7 年一直在研究 InfoSphere Information Server 和 InfoSphere Business Glossary 产品。他拥有 IBM 和其他公司的丰富的开发经验。



Nancy L. Navarro, 咨询信息开发人员, IBM

Nancy Navarro 是一名 IBM 咨询信息开发人员,过去的 4 年以来一直致力于 InfoSphere Information Server 和 InfoSphere Business Glossary 产品开发。Navarro 有着丰富的 IBM 以及其他企业的信息开发经验。



2014 年 1 月 13 日

概述

IBM InfoSphere Business Glossary 使您能够创建、管理和共享企业词汇表与分类系统。InfoSphere Business Glossary 通过一个 API 公开了许多丰富的功能,该 API 使用了一个基于 REST(Representational State Transfer,具象状态传输)的服务。REST 是一种设计 Web 服务的开放架构样式,它使得对 Web 2.0 技术拥有基本了解的开发人员能够快速构建应用程序。

本文提供了如何构建 Android 应用程序的分步说明,该应用程序使用 Business Glossary REST API 向 Android 环境提供企业词汇表。样例应用程序是一个轻量级应用程序,支持快速发现和修改公司的业务词汇表。该词汇表未存储在 Android 设备上;REST API 被动态地用来按需访问业务词汇表内容。

Business Glossary REST API 是 IBM InfoSphere Information Server 的一个受支持的部分。按照本文中的步骤开发的 Android 应用程序基于 REST API 和 Android 操作系统,但官方并不支持将它作为 IBM 产品的一部分。样例应用程序是为 InfoSphere Business Glossary 9.1 版和 Android 2.3 版而编写的。

也可从本文中下载样例程序的源代码和可执行文件。


先决条件

本文适用于对 XML、REST 和 Android 操作系统有基本理解的软件开发人员。要部署样例应用程序,则需要访问一个运行 Android 操作系统的设备。为了开发样例应用程序,我们使用了用于 Eclipse IDE 的 Android Development Tools (ADT) 插件。处理样例代码必须使用 ADT 和 Eclipse IDE。请参见 参考资料,了解 ADT 的更多信息。


场景

以下两个样例场景演示了如何使用一个移动 InfoSphere Business Glossary 应用程序:

  • Lorraine 是一位销售主管,她在去客户现场的路上收到了一封包含短语 Account Accruement 的业务电子邮件。她不是很熟悉这个术语,需要了解她的公司对这个术语的明确定义。她使用 InfoSphere Business Glossary Android 应用程序查找该术语并学习它的上下文和定义。
  • Tom 是一位主题专家,他正在机场等待自己的航班起飞,并借此间隙在自己的 Android 设备上审核公司的业务术语表。他惊奇地发现,术语 Accounting Period 的定义不准确。他实时地编辑该术语以更正它的定义。

本文中使用的样例应用程序支持第一种场景。

图 1 显示了样例 Android 应用程序,以及用户如何打开术语 Account Accruement 的详细视图。

该图显示了术语 Account Accruement 在样例 InfoSphere Business Glossary Android 应用程序上的视图。

该视图显示了该术语的定义、它的状态(Accepted,表示它不仅仅是一个可使用或弃用的候选术语)、术语管理员或负责管理它的人的名称,以及它的缩写。管理员名称是一个超链接;用户可单击它来显示详细的联系人信息。


InfoSphere Business Glossary REST API

Business Glossary REST API 允许客户端应用程序读取和写入业务术语表内容。REST 是该 API 首选的技术,因为它提供了其他分布式技术所没有的多项优势。最重要的是,它是轻量型的并且可以互操作。该 API 以资源形式公开术语表内容。这些资源使用 URI 来寻址。URI 由位于服务器上的 XML 模式所定义的 XML 文档来表示。

API 资源

Business Glossary REST API 可以接收的资源可划分为两大资源集:

  • 实体资源集:这个资源集包含 Business Glossary 实体的详细信息,比如类别、术语、管理员、自定义属性和其他资产。所有这些实体都受 Read API 支持。类别、术语和自定义属性也受 Write API 及其创建、更新和删除功能支持。
  • 操作资源集:这个资源集提供了开发客户端应用程序的易于使用的、一般性的操作,比如:
    • 自动完成。给定一个前缀,基于术语表中的术语来提供完成建议。
    • 随处搜索。在 IBM InfoSphere Business Glossary 中的任何地方搜索与所使用的算法类似的算法。
    • 搜索。此操作支持在术语表中搜索某种特定模式。用户可控制搜索的特性和类,以及结果等级。

InfoSphere Business Glossary REST API 文档包含资源集的完整描述。请参见 参考资料,了解获取文档的信息。

API 事务

API 事务由一个 HTTP 请求和响应组成。不同的选项在请求中需要不同类型的 HTTP 方法。URI 与 HTTP 方法相结合,定义了将要发生的操作。REST 接口提供了以下 HTTP 方法:

  • POST:创建一个资源
  • GET:读取一个资源
  • PUT:更新一个资源
  • DELETE:删除一个资源

从 Android 调用 REST

可通过多种方式从 Android 应用程序调用 REST 服务。清单 1 给出的样例代码提供了调用一个 REST GET 操作的一般方法。调用方提供一个 URL,然后返回一个 DOM(Document Object Model,文档对象模型)文档对象。与 InfoSphere Business Glossary 主机服务器的连接细节可从 Android 应用程序的共享首选项中获得。以下代码样例调用了一个 REST GET 操作:

清单 1. 调用一个 REST GET 操作
public ArrayList<Item> invokeRestAPI(String relativeUrl, XMLParser xmlParser) {
    Document document = invokeRestAPI(relativeUrl);
    return xmlParser.parse(document);
}
                
private Document invokeRestAPI(String relativeUrl) {
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(fContext);
              
    String server = prefs.getString("server", "Server");
    String port = prefs.getString("port", "Port");
                
    HttpGet httpGet = new HttpGet("http://" + server + ":" + port + "/" + relativeUrl);
                
    try {
                
       HttpResponse response = getHttpClient().execute(httpGet, new BasicHttpContext());
       HttpEntity entity = response.getEntity();
       DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
       builderFactory.setNamespaceAware(true);
       DocumentBuilder builder = builderFactory.newDocumentBuilder();
       return builder.parse(entity.getContent());
                
     } catch (Exception e) {
       Log.e("error", e.getLocalizedMessage(), e);
       return null;
     }
                
}
                
private DefaultHttpClient getHttpClient() {
    if (fHttpClient == null) {
       SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(fContext);
       String username = prefs.getString("username", "");
       String passw = prefs.getString("password", "");
       String server = prefs.getString("server", "");
       String port = prefs.getString("port", "");
                
       fHttpClient = new DefaultHttpClient();
       fHttpClient.getCredentialsProvider().setCredentials(
       new AuthScope(server, Integer.parseInt(port)),
       new UsernamePasswordCredentials(username, passw));
     }
     return fHttpClient;
}

Android 操作系统使应用程序能够生成一个后台线程。这个线程可用于异步调用 REST 调用。然后用户将能够在处理 REST 调用期间使用该应用程序。


应用程序设计

样例 Android 应用程序由 5 个 Android 活动组成。Android 活动是用户可执行的一个操作,通过 Android 的公共类活动来实例化。

这 5 个活动如下所示:

  1. Home
  2. Preferences
  3. Progress
  4. List Results
  5. Item

图 2 到图 6 给出了 Android 设备上显示的每个活动的屏幕截图:

  1. Home 活动使用户能够对 REST API 发起搜索。该图显示了使用户能够启动对 RESP API 的搜索的 Home 活动。
  2. Preferences 活动让用户提供 InfoSphere Business Glossary 服务器的连接细节。该图显示了 Preferences 活动,它让用户提供 InfoSphere Business Glossary 服务器的连接细节
  3. Progress 活动在调用一个 REST 调用时显示。该图显示了在调用 REST 调用时显示的 Progress 活动
  4. List Results 活动让用户滚动搜索结果。该图显示了 List results 活动,它让用户滚动搜索结果。
  5. Item 活动显示一个特定搜索结果的所有详细信息。该图显示了 Item 活动,它显示一个搜索结果的所有详细信息。

活动流

图 7 显示了用户导航不同活动的顺序。

该图显示了用户导航活动的顺序或序列。

在应用程序启动时,将显示 Home 活动。然后,将会出现以下事件序列:

  1. 用户导航到 Preferences 活动。此活动使用户能够设置 InfoSphere Business Glossary 主机服务器的连接细节。首选项持久保存在 Android 设备上,将在未来调用应用程序时使用。
  2. 用户导航回 Home 活动。
  3. 用户在编辑框中输入一个搜索短语,然后单击 Search 按钮。这会启动 Progress 活动来处理搜索请求。
  4. Progress 活动调用 REST URL 并解析了结果 XML 文档后,将会显示 List Results 活动。
  5. 用户可滚动列表并选择特定的术语表项。这会将用户导航到 Progress 活动来处理这个术语表项请求。
  6. 在 Progress 活动调用 REST URL 并解析结果 XML 文档后,将会显示 Item 活动。
  7. Item 活动显示了所选项的详细信息。用户可检查这些详细信息。用户还可以有选择地单击某个显示的链接。这会将用户导航到 Progress 活动,以处理该项请求。在本例中,该链接是管理员的姓名。
  8. Progress 活动调用 REST URL 并解析结果 XML 文档后,将再次显示 Item 活动。
  9. 在本例中,Item 活动显示了管理员的联系信息。用户可检查该详细信息并单击管理员的电话号码。这会将用户导航到设备的原生电话应用程序。

活动详细信息

本文的以下各节将介绍应用程序中的每个 Android 活动。

Home 活动

这是应用程序的主要活动。REST API 提供了术语库的数据,包括术语库标题、欢迎文本和不同资产类型的计数器。此信息可向用户显示,以提供一定的上下文和熟悉性。

REST API 提供了 3 种不同类型的搜索。在这个样例应用程序中,用户可选择是调用一个自动完成搜索还是调用常规搜索。移动替代方法是提供单一的搜索按钮,搜索行为取决于应用程序首选项。

在用户按下 Search 按钮时,将会激活 Progress 活动。

Home 活动包含 Preference 按钮,该按钮将用户导航到 Preferences 活动。

Preferences 活动

此活动让用户能够设置服务器的连接细节。这包括主机名称、端口、用户名和密码。此信息会持久保存,以便仅在首次使用应用程序时设置连接细节。

Progress 活动

此活动用于显示一个自旋滚轮,并在一个独立的线程中调用 REST API 和解析结果。Progress 活动需要以下两个对象:

  1. 要调用的 URL。
  2. 解析完成后好调用的下一个活动。

清单 2 中所示的样例代码调用了 Progress 活动。

清单 2. 调用 Progress 活动
package com.bg.android.activity;

import java.util.ArrayList;

import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;

import com.bg.android.R;
import com.bg.android.model.Item;
import com.bg.android.parser.XMLParser;

public class ProgressActivity extends Activity {

	private String fUrl;
	private Class<?> fNextActivity;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_item_progress);
		Intent intent = getIntent();
		fUrl = intent.getStringExtra("url");
		String nextActivity = intent.getStringExtra("nextActivity");

		try {
			fNextActivity = Class.forName(nextActivity);
		} catch (Exception e) {
			Log.e("error", e.getLocalizedMessage(), e);
		}

		new LongRunningInvoke().execute();

	}

	private class LongRunningInvoke extends AsyncTask<Void, Void, String> {

		ArrayList<Item> fResult;

		@Override
		protected String doInBackground(Void... params) {

			BgApp app = (BgApp) getApplicationContext();
			try {
				fResult = app.getHttpUtil().invokeRestAPI(
   fUrl,XMLParser.getParser(fUrl));
				return "SUCCESS";
			} catch (Exception e) {
				Log.e("error", e.getLocalizedMessage(), e);
				return e.getLocalizedMessage();
			}
		}

		protected void onPostExecute(String results) {
			if (fResult != null) {
				Intent intent = new Intent(getApplicationContext(), 
                     fNextActivity);
				intent.putExtra("list", fResult);
				startActivity(intent);
			} else {
				Intent intent = new Intent(getApplicationContext(), 
                MainActivity.class);
				intent.putExtra("toast", results);
				startActivity(intent);
			}
		}
	}

}

该活动调用了给定的 URL。当 REST 调用返回一个 XML 文档时,解析器会将文档转换为 Java 对象。然后调用下一个活动,将解析器返回的对象传输给该活动。此机制是通用机制,可用于该应用程序调用的所有 REST 调用。

List Results 活动

此活动用于向用户显示一个搜索结果列表。当用户选择列表中的一项时,它会激活 Progress 活动来使用 REST API 抓取该项的详细信息。收到详细信息后,将会调用 Item 活动。

清单 3 中所示的样例代码调用了 List Results 活动。

清单 3. 调用 List Results 活动
package com.bg.android.activity;

import java.util.ArrayList;

import android.app.ListActivity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.view.View;
import android.widget.ListView;

import com.bg.android.model.Item;

public class ListResultsActivity extends ListActivity {

	@Override
	public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            ArrayList<Parcelable> list = getIntent().getParcelableArrayListExtra("list");

            setListAdapter(new ResultsArrayAdapter(this, list));
	}

	@Override
	protected void onListItemClick(ListView l, View v, int position, long id) {
            Item selectedValue = (Item) getListAdapter().getItem(position);		
            String url = selectedValue.getUri();

            Intent intent = new Intent(getApplicationContext(), ProgressActivity.class);
            intent.putExtra("url", url);
            intent.putExtra("nextActivity", ItemActivity.class.getName());
            startActivity(intent);
	}

}

Item 活动

此活动显示业务术语库中的某一项 (item) 的属性。这个项可以是术语、类别、信息治理策略、信息治理规则或管理员。该活动获取一个键-值对映射,在一个类似表的结构中显示它们。项名称和描述需要特别关注,显示在页面顶部更醒目的位置。

该活动将引用显示为活动的超文本链接。例如:

  • 作为另一个术语的同义词的术语是一个链接,选择它时,将会显示这个同义词的详细信息。
  • 对管理员的引用是一个链接,选择该链接时,将会显示管理员的详细信息。
  • 管理员的电话号码会返回到一个调用设备的原生拨号应用程序的链接。

通过使用链接,用户可导航术语库,从一个术语移动到相关术语、同义词、父类别、管理员等。

尽管我们的样例应用程序未包含该功能,但应用程序也可让用户编辑页面的内容。更改将通过一个 PUT 请求,发送到 InfoSphere Business Glossary 服务器作为对该项的更新。


结束语

IBM InfoSphere Business Glossary REST API 为您提供了通过自定义程序(包括移动应用程序)公开术语库内容的能力。本文中提供的 Android 示例提供了一个概念证明,向您展示了如何将 InfoSphere Business Glossary 的强大功能引入到移动设备中。


致谢

感谢 Michael Fankhauser、Gabi Nativ、Marc Haber 和 Erel Sharf 审阅本文和对本文的重大贡献。


下载

描述名字大小
样例应用程序的源代码BGAndroidEclipseProject.zip544KB
Android 应用程序可执行文件Main.zip372KB

参考资料

学习

获得产品和技术

  • 使用 IBM 试用软件 构建您的下一个开发项目,这些软件可直接从 developerWorks 下载获得。
  • 以最适合您的方式 评估 IBM 产品:下载产品试用版,在线试用hanpin,在云环境中使用产品,或者在 SOA 沙盒 中花几小时学习如何高效地实现面向服务的架构。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management, 移动开发
ArticleID=960042
ArticleTitle=使用 InfoSphere Business Glossary REST API 开发 Android 应用程序
publish-date=01132014