通过 DB2 访问 HTTP 和 RESTful 服务:针对 DB2 的 REST 用户定义函数的简介

将 Web 应用引入关系数据库系统中

具象状态传输 (Representational State Transfer, REST) 日益成为如今面向服务架构环境中的首选通信方式。有很多服务和信息源可通过 URL 获得,并且可以使用 HTTP 进行访问。另一方面,仍然有相当数量的信息存储在 DB2® 等关系数据库管理系统 (RDBMS) 中。现代的 RDBMS 提供了强大的关系数据(通过 SQL)和 XML 数据(通过 SQL/XML 或 XQuery)处理功能。[2011 年 8 月 23 日:作者更新了本文,以包括有关 HTTP 代理支持的信息。-Ed.]

Michael Schenker, 软件工程师, IBM  

Michael SchenkerMichael Schenker 是加州 San Jose 的 IBM Silicon Valley Laboratory 的软件工程师。他于 2002 年加入 IBM,从事 IBM Data Server Tooling 领域。他专长的领域是在 IBM 数据服务器上启用 Web 服务。他从德国 Leipzig 的 University of Applied Sciences 获得了计算机科学硕士学位。



Susan Malaika, 资深技术人员, IBM  

Susan MalaikaSusan Malaika 在 IBM Information Management Group 工作。她的专长包括 XML、Web 技术和网格计算。她与人合作出版了关于 Web 的专著,发表了关于 Web 的文章。她是 IBM Academy of Technology 的成员。



2011 年 10 月 17 日 (最初于 2011 年 5 月 26 日)

免费下载:IBM® DB2® Express-C 9.7.2 免费版 或者 DB2® 9.7 for Linux®, UNIX®, and Windows® 试用版
下载更多的 IBM 软件试用版,并加入 IBM 软件下载与技术交流群组,参与在线交流。

概述

本文介绍了一组针对 DB2 的用户定义的函数 (UDF),它允许应用程序通过 SQL 使用基于 REST 的服务。本文将涵盖以下主题:

  • 简介
  • 基本的标量 REST UDF
    • 发送定制的 HTTP 头值
    • 通过获取 BBC newsfeed 将 XML 函数与 REST UDF 结合起来
    • 将 REST UDF 结果与关系表联接起来
    • 安全性 — 身份验证和加密
  • Helper 函数
    • URL 编码/解码
    • Base64 编码/解码

简介

哪些 DB2?

本文中的信息不仅适用于 DB2 for Linux®, UNIX® and Windows® ,也适用于 DB2 for z/OS®。

HTTP 是在 20 多年前定义的,而最后一次重大变革 (HTTP 1.1) 发生在 1999 年(参见 RFC2616)。HTTP 经历如此长的时间表明它处于一个稳定的状态。HTTP 是 Web 上最流行的协议。随着时间的推移,已经在 HTTP 之上构建了 REST 或 WebDAV 等其他协议和使用模式。许多网站和应用程序均提供了基于 HTTP 的信息访问接口。

Web 上使用的其他格式:JSON

目前在 Web 上使用了很多其他基于文本的格式。JSON 近年来变得非常流行。此文章 “构建 pureXML 和 JSON 应用程序,第 1 部分:使用 DB2 pureXML 储存和查询JSON” 展示了可以在 DB2 中使用 JSONx 处理 JSON 以将 JSON 转化为 XML 或将 XML 转化为 JSON 的一种方式。

几个(主要是基于 XML)消息格式随着时间的推移经过演化,均可用于以 HTTP 中作为传输层来交换数据,例如 SOAP、RSS 或 Atom。

关系数据库管理系统 (RDBMS) 也经过演化,引入了除关系数据和 SQL 以外的处理和存储功能,以在本地支持 XML。

图 1. 通过 REST 函数从 DB2 访问 Web
图中显示通过针对 DB2 的 HTTP consumer 函数连接的 Web 内容,直至 DB2 中的关系和 XML 内容

在本文中,我们以用户定义函数 (UDF) 的形式介绍了 SQL 扩展,该函数经由 HTTP 直接通过 SQL 语句访问 URL 可寻址资源。UDF 被称为 REST UDFREST 函数。使用该新函数,SQL 聚合或 XPath 访问等 RDBM 中可用的其他功能均可用于操作和存储从 Web 上获取的数据。使用 REST 函数,可以发布简单的 HTTP GETPOST 请求。

此外,还有 REST 函数中更复杂(详细)的签名,它可支持检查 HTTP 响应代码和头值,这对于调试非常有用。本文没有进一步详细讨论 REST 函数,不过您可以看一下 sample_tableUDF_Queries.txt 中的样例,了解如何使用该函数。

REST 函数可以将通过 HTTP 提交的信息看作是二进制或文本数据。二进制版本访问图像、声音和其他二进制格式的信息,而文本版本则通过自动在数据与使用过的数据库代码页之间进行转换数据来处理 HTML 页面和其他基于文本的信息。Internet 上的文本数据通常采用 Unicode,而关系数据库中的数据则通常采用其他编码形式。

通过遵循本文的步骤并下载随附文件,您可以从 Web 上获取数据,并将其与本地存储的关系数据联接起来。此外,您还可以应用 DB2 的本地 XML 存储功能来处理、存储和转换基于 XML 的数据(例如,通过使用 XMLTABLE 函数从 XML 文档中生成一个关系数据集)。

本文首先介绍 REST UDF。接着提供在 Web 上操作文本和二进制信息的示例。此外,还描述了如何通过设置 HTTP 头信息来定制 REST 请求。一个基于访问 RSS 提要的示例说明了 Web 与数据库数据的集成。另外还涉及到了 HTTP 身份验证和加密。文章最后展示了使用 helper 函数执行 URL 编码和 Base64 编码的示例。本文包含一个附录,该附录带有整套的 REST 函数参数。

本文还提供 下载 部分,其中包含了 REST UDFs for DB2 for LUW 和 DB2 for z/OS 以及各种示例。该下载包提供了一组基本标量以及一些 helper 函数。


基本的 REST 标量函数

基本的标量函数提供对 Web 上内容的访问。REST 函数有 4 种最常见的 HTTP 谓词:GET、POST、PUT 和 DELETE。有两个方法可用:一个用于处理二进制内容,另一个用于处理基于文本的内容。该函数的 DB2 模式是 DB2XML。

所有的基本 REST 函数都是标量函数,它以 BLOB(二进制)或 CLOB(文本)格式返回 HTTP 响应消息的内容。函数签名遵循以下模式:

DB2XML.HTTP<method><type>(url, httpHeader <,
input>)
表 1. 方法名
方法 GET、POST、PUT 和 DELETE
类型BLOB(二进制内容)或 CLOB(文本内容)定义返回类型和 <input> 文档的类型
表 2. 输入参数
url(必填)正访问资源的 URL
httpHeader(可选)与请求一起使用的其他头值
input(仅限 POST 和 PUT)随请求作为 BLOB 或 CLOB 发送的数据

还有一个方法可用于执行 HTTP HEAD 请求。它不用发送或获取数据。而是通过 HTTP GET 获取 IBM 网站:

SELECT 
   DB2XML.HTTPGETCLOB('http://www.ibm.com','') 
FROM SYSIBM.SYSDUMMY1

结果是以 CLOB 文本数据作为 IBM 网页 HTML 文本。

发送定制的 HTTP 头值

在上文,我们已为 HTTP 头值提供了一个空字符串,即发出请求消息时所使用的默认值。可能还需要通过一个请求提供定制的头信息(以在调用 SOAP Web 服务时更改内容类型或另外设置一个 "SOAPAction" 头字段)。

使用每一种方法,可以指定一个可选的 HTTP 头 XML 文档来允许设置其他 HTTP 头值。XML 头文档必须符合下列格式:

清单 1. XML HTTP 头格式
<httpHeader connectionTimeout="10" follwRedirects="true">
	<header name="Accept" value="text/plain,application/xml,*/*;q=0.8" />
	<header name="Accept-Language" value="en-us,en;q=0.5" />
</httpHeader>

每个定制的头字段都由一个 <header> 元素表示,该元素包含一个 namevalue 属性。<httpHeader> root 元素允许通过属性指定一些其他请求选项。

表 3. 可以使用 <httpHeader> 指定的选项
属性名类型默认值说明
connectionTimeout整数系统默认值超时(以毫秒为单位)
readTimeout整数系统默认值超时(以毫秒为单位)
followRedirects布尔值定义是否应当进行重定向
useCaches布尔值定义是否应当使用缓存

可以将 XML 头文档提供为 CLOB 或本地 XML(仅限 DB2 LUW)值。

清单 2. 通过 HTTP POST 调用 SOAP 1.1 Web 服务
SELECT DB2XML.HTTPPOSTCLOB('http://www.webservicex.net//stockquote.asmx',
CAST ('<httpHeader>
       <header name="Content-Type" value="text/xml;charset=utf-8"/>
       <header name="SOAPAction" value="&quot;http://www.webserviceX.NET/GetQuote&quot;"/>
       </httpHeader>' AS CLOB(1K)),
 CAST('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
          <soap:Body>
             <GetQuote xmlns="http://www.webserviceX.NET/">
                <symbol>IBM</symbol>
             </GetQuote>
          </soap:Body>
       </soap:Envelope>' AS CLOB(10K))
) FROM SYSIBM.SYSDUMMY1;

结果是以 CLOB 文本数据作为 Web 服务 SOAP 响应消息。

通过获取 BBC 新闻提要将 XML 函数与 REST UDF 结合起来

本例展示如何使用 DB2 的 XMLTABLE 函数轻松获取 BBC 新闻提要并将其转换为关系数据集。

图 2. 通过 REST UDF 和 DB2 pureXML 使用新闻提要
图中显示通过 DB2 的 HTTP consumer 函数和 XMLTABLE 函数通信的 BBC 新闻提要。对于 XMLTABLE 函数,RSS 格式被分解成一个结果集,送入 DB2

首先,我们使用以下语句看一下 BBC RSS 提要:

SELECT DB2XML.HTTPGETCLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','') 
       FROM SYSIBM.SYSDUMMY1;

现在我们可以包装一个 XMLTABLE 函数调用来将返回的 XML RSS 格式转换成一个关系结果集。

清单 3. 将 BBC 新闻提要分解成一个关系数据集
SELECT *
   FROM XMLTABLE('$result/rss/channel/item' 
      PASSING XMLPARSE(
         DOCUMENT 
           DB2XML.HTTPGETBLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','')
      ) as "result"
         COLUMNS 
            title VARCHAR(128) PATH 'title',
            description VARCHAR(1024) PATH 'description',
            link VARCHAR(255) PATH 'link',
			pubDate VARCHAR(20) PATH 'substring(pubDate, 1, 16)'
   ) AS RESULT;

结果集包含 4 列:含有提要项目标题的 TITLE 列,含有提要说明的 DESCRIPTION 列,含有实际新闻文档 URL 的 LINK 列,还有一个 PUBDATE 列。

在本文的下载包中可以找到更多示例。

将 REST UDF 结果与关系表联接起来

在上一节中,我们使用了 XMLTABLE 函数来分解 REST UDF 所返回的 XML 数据。在本节中,我们将进一步推进该示例。将分解的结果集与现有的新闻表(含有与新闻标题相匹配的 4 个列)联接起来。

图 3. 将 REST UDF 结果与关系表联接起来
如图 2,XMLTABLE 函数与本地表相联接,以生成一个结果集
清单 4. 将 REST UDF 结果与关系表联接起来
   SELECT DB2XML.NEWS.*
   FROM XMLTABLE('$result/rss/channel/item' 
      PASSING XMLPARSE(
         DOCUMENT 
           DB2XML.HTTPGETBLOB('http://feeds.bbci.co.uk/news/world/rss.xml?edition=uk','')
      ) as "result"
         COLUMNS 
            title VARCHAR(128) PATH 'title'
   ) AS RESULT, DB2XML.NEWS
   WHERE RESULT.TITLE = DB2XML.NEWS.TITLE;

安全性 — 身份验证和加密

使用具有 REST UDF 的证书

REST UDF 利用 Java Secure Socket Extension (JSSE) 进行安全套接字层 (SSL) 通信。SSL 通信在客户端需要一个证书存储以便存储服务器证书。对该存储的管理可能依赖于 JSSE 实现。IBM JDK 有其自己的实现,其中有对 z/OS 的特殊扩展(参见 IBM JSSE implementation on z/OS)。

REST 函数支持 HTTP 基本身份验证以及使用 HTTPS 的 SSL 加密。

以下示例展示了如何获取 Google Mail 帐户上的未读邮件并使用 XMLTABLE 将其解析为一个关系结果集。

图 4. 使用 REST UDF 从 DB2 访问 Gmail
显示 Gmail 返回的 Atom 提要,经由 DB2 的 HTTP consumer 函数的 http 进行安全访问,然后经过 XMLTABLE 函数,该函数将 Atom 格式分解成结果集然后送入 DB2

对 Gmail 的访问由 SSL 加密,并由 HTTP 基本身份验证确保安全(在 URL 中使用 $quot;https")。Gmail 将未读邮件的标题作为 Atom 提要返回,我们使用本例中的 XMLTABLE 函数将结果作为一个关系数据集返回。

清单 5. 使用 SSL 和 HTTP 身份验证获取 Gmail 上的未读邮件
SELECT *
  FROM XMLTABLE('$result/*[local-name()=''feed'']/*[local-name()=''entry'']' 
    PASSING  
       XMLPARSE(DOCUMENT 
 DB2XML.HTTPGETBLOB('https://<username>:<password>@mail.google.com/mail/feed/atom/','')) 
AS "result"
  COLUMNS 
    title VARCHAR(128) PATH '*[local-name()=''title'']',
    summary VARCHAR(1024) PATH '*[local-name()=''summary'']',
    author_name VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''name'']',
    author_email VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''email'']'
) AS RESULT;

结果集包含 4 列:TITLE、SUMMARY、AUTHOR_NAME 和 AUTHOR_EMAIL。


Helper 函数

除了 REST 函数,您可以找到用于执行 URL 编码/解码以及 Base64 编码和解码的 helper 函数。

URL 编码/解码

URL 规范 (RFC1738) 定义一组需要替换为转义序列的特殊字符(例如,如果在 URL 的查询字符串中使用)。下载包带有两个函数,用于执行 URL 编码和解码。urlEncode 函数的第一个参数是纯字符串;urlDecode 函数的第一个参数是 URL 编码的字符串。两个函数的第二个可选参数是要使用的字符集编码。如果提供 NULL,则如同 RFC3986 中推荐的那样使用 UTF-8。

清单 6. URL 编码示例
SELECT DB2XML.URLENCODE(
     'Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com'
	 , NULL) 
       FROM SYSIBM.SYSDUMMY1

Result:	   
--------------------------------------------------------------------
Please+send+and+email+to+report+our+%25+earnings+to+Mark+%26+Lisa+at+marklisa%40xyz.com
清单 7. URL 编码示例
SELECT DB2XML.URLDECODE(
'Please+send+and+email+to+report+our+%25+earnings+to+Mark+%26+Lisa+at+marklisa%40xyz.com'
, NULL) 
FROM SYSIBM.SYSDUMMY1

Result:	   
----------------------------------------------------------------------
Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com

Base64 编码/解码

Base64 编码广泛地用在 Web 上以将二进制数据表示为字符串(例如,在发送哈希键时)。下载包带有两个函数,用于执行 Base64 编码和解码。

清单 8. Base64 编码示例
SELECT DB2XML.BASE64ENCODE(
 CAST(
 'Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com' 
 AS VARCHAR(100) FOR BIT DATA)) 
 FROM SYSIBM.SYSDUMMY1

Result:
-----------------------------------------------------------------------
UGxlYXNlIHNlbmQgYW5kIGVtYWlsIHRvIHJlcG9ydCBvdXIgJSBlYXJuaW5ncyB0byBNYXJrICYgTGlzYSBhdCBtY
XJrbGlzYUB4eXouY29t
清单 9. Base64 编码的示例
SELECT 
CAST(
   DB2XML.BASE64DECODE(
'UGxlYXNlIHNlbmQgYW5kIGVtYWlsIHRvIHJlcG9ydCBvdXIgJSBlYXJuaW5ncyB0byBNYXJrICYgTGlzYSBhdCBtY
XJrbGlzYUB4eXouY29t') AS VARCHAR(100) FOR MIXED DATA) 
FROM SYSIBM.SYSDUMMY1

Result:
-----------------------------------------------------------------------
Please send and email to report our % earnings to Mark & Lisa at marklisa@xyz.com

HTTP 代理支持

因为 REST 用户定义的函数是用 Java 实现的,所以需要设置一组 Java 系统属性来启用 HTTP 代理支持。可以使用以下属性:

  • http.proxyHost
  • http.proxyPort
  • http.proxyUser
  • http.proxyPassword
  • http.nonProxyHosts

DB2 for Linux, UNIX, Windows 不提供对 Java 系统属性的访问。相反,REST UDF 会检查 $DB2INSTPATH/函数目录下的 restudf.properties 文件,其中用户可以像这样指定 HTTP 代理设置:

清单 10. restudf.properties 文件中的 HTTP 代理设置
http.proxyHost=myProxyHost.com
http.proxyPort=8090
http.proxyUser=user
http.proxyPassword=secret
http.nonProxyHosts=*.ibm.com|wikipedia.org|...

在 DB2 for z/OS 上您可以像这样指定 JVMPROPS 文件中的这些属性(另参见下载包中的 installationNotesUDFzOS.txt):

清单 11. JVMPROPS 文件中的 HTTP 代理设置
-Dhttp.proxyHost=myProxyHost.com
-Dhttp.proxyPort=8090
-Dhttp.proxyUser=user
-Dhttp.proxyPassword=secret
-Dhttp.nonProxyHosts=*.ibm.com|wikipedia.org|...

结束语

DB2 REST 函数提供一种简单的方法来通过 SQL 语句访问 Web 上的资源。这些函数尽管很简单,但具有足够的灵活性,可访问和使用多个来源的数据。因为在 Web 上广泛使用 XML 作为消息格式,因此所提的 REST 函数与 DB2 pureXML 功能可无缝整合。本文解释 REST 函数的基本用法,以及如何集成 Web 数据与数据库数据。另外还解释了身份验证和加密的用法,以及描述了辅助 URL 编码和 Base64 编码的 helper 函数。


致谢

作者感谢 Ling Ling 审阅本文并测试其说明。

附录

表 4. REST UDF 签名
名称返回类型签名HTTP 谓词说明
httpGetBlobBLOBhttpGetBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOB(5M)GET通过 HTTP GET 根据给定 URL 获取资源。资源作为二进制 LOB (BLOB) 返回。
httpGetClobCLOBhttpGetClob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB(5M)GET通过 HTTP GET 根据给定 URL 获取基于文本的资源。资源作为字符 LOB (CLOB) 返回。如有必要,执行字符集到数据库代码页的转换。
httpPutBlobBLOBhttpPutBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBPUT使用 HTTP PUT 创建(上传)给定 URL 下的二进制资源。如果由服务器发出,则响应消息作为二进制 LOB (BLOB) 返回。
httpPutClobCLOBhttpPutClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBPUT使用 HTTP PUT 创建(上传)给定 URL 下的文本资源。如果由服务器发出,则响应消息作为字符 LOB (CLOB) 返回。如有必要,执行字符集转换。
httpPostBlobBLOBhttpPostBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOB(5M)POST使用 HTTP POST 更新给定 URL 下的二进制资源。响应消息作为二进制 LOB (BLOB) 返回。
httpPostClobCLOBhttpPostClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOB(5M)POST使用 HTTP POST 更新给定 URL 下的文本资源。响应消息作为字符 LOB (CLOB) 返回。如有必要,执行字符集转换。
httpDeleteBlobBLOBhttpDeleteBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOBDELETE使用 HTTP DELETE 删除给定 URL 下的二进制资源。如果有的话,响应消息作为二进制 LOB (BLOB) 返回。
httpDeleteClobCLOBhttpDelete(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOBDELETE使用 HTTP DELETE 删除给定 URL 下的文本资源。如果有的话,响应消息作为字符 LOB (BLOB) 返回。如有必要,执行字符集转换。
httpBlobBLOBhttpBlob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBany HTTP verb使用提供的谓词执行 HTTP 请求。可将请求消息作为二进制 LOB (BLOB) 提供。如果由服务器发出,则响应消息作为二进制 LOB (CLOB) 返回。
httpClobCLOBhttpClob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBany HTTP verb使用提供的谓词执行 HTTP 请求。可将请求消息作为字符 LOB (BLOB) 提供。如果由服务器发出,则响应消息作为字符 LOB (CLOB) 返回。如有必要,执行字符集转换。
httpHeadCLOB/XMLhttpHead(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB (10K)HEAD使用 HTTP HEAD 验证所请求资源的 HTTP 头。只有 HTTP 头作为 CLOB/XML 返回。

仅限 DB2 for LUW:httpHeader XML 文档也可作为原生 XML 值(而非使用 CLOB)予以提供。

表 5. helper 函数的签名
名称返回类型签名说明
urlEncodeVARCHARurlEncode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)用于执行所提供文本 的 URL 编码的 helper 函数。编码 值定义要使用的字符集。可以将它设置为 NULL,其中以 UTF-8 作为默认值。
urlDecodeVARCHARurlDecode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)用于执行所提供文本 的 URL 解码的 helper 函数。编码 值定义要使用的字符集。可以将它设置为 NULL,其中以 UTF-8 作为默认值。
base64EncodeVARCHARbase64Encode(text VARCHAR(2732) FOR BIT DATA) RETURNS VARCHAR(4096)用于执行所提供二进制数据(作为 Base64 编码字符串返回)的 Base64 编码的 helper 函数。
base64DecodeVARCHAR FOR BIT DATAbase64Decode(text VARCHAR(4096)) RETURNS VARCHAR(2732) FOR BIT DATA用于在所提供 Base64 编码数据(将数据作为二进制返回)上执行 Base64 解码的 helper 函数。

下载

描述名字大小
REST UDF 下载包1download.zip---

注意:

  1. download.zip 文件经过更新,以修复 DB2 for z/OS V8 的一个不兼容性问题。在进行修复之前,用户可能会遇到有关 DB2 for z/OS 的以下问题:java.lang.NoClassDefFoundError:com.ibm.db2.jcc.DB2Xml。

参考资料

学习

获得产品和技术

讨论

条评论

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, Web development, SOA and web services, XML
ArticleID=765756
ArticleTitle=通过 DB2 访问 HTTP 和 RESTful 服务:针对 DB2 的 REST 用户定义函数的简介
publish-date=10172011