Truy cập các dịch vụ HTTP và RESTful từ DB2: Giới thiệu các hàm REST được định nghĩa cho người dùng DB2

Đưa web vào thế giới các hệ thống cơ sở dữ liệu quan hệ

Càng ngày, Representational State Transfer (REST) càng trở thành một cách truyền thông ưa thích trong các môi trường kiến trúc hướng dịch vụ hiện nay. Có nhiều dịch vụ và các nguồn thông tin có thể được xử lý thông qua một URL và được truy cập bằng cách sử dụng HTTP. Mặt khác, vẫn còn có một lượng thông tin đáng kể đã lưu trong các hệ thống quản trị cơ sở dữ liệu quan hệ (RDBMS) -- như DB2®. Các RDBMS hiện đại cung cấp các tính năng xử lý mạnh mẽ cho dữ liệu quan hệ (thông qua SQL) và cho dữ liệu XML (thông qua SQL/XML hay XQuery). [23.08.2011: Các tác giả đã cập nhật bài viết này bao gồm thông tin về hỗ trợ proxy HTTP. - Người biên tập]

Michael Schenker, Kỹ sư cố vấn phần mềm, IBM

Ảnh của Michael SchenkerMichael Schenker có hơn bảy năm kinh nghiệm làm việc với IBM và đã gia nhập chính thức vào công ty từ cuối năm 2003. Trong sự nghiệp của mình, Michael đã làm về một số sản phẩm liên quan đến cơ sở dữ liệu, bắt đầu là một thực tập sinh làm về DB2 Information Integration (Tích hợp thông tin DB2) với việc tập trung vào các nguồn dữ liệu không quan hệ. Năm 2006, Michael đã tham gia tổ chức các công cụ cơ sở dữ liệu và làm về chức năng của nhà cung cấp dịch vụ web DB2 trong IBM Data Studio Developer (Nhà phát triển Data Studio của IBM). Anh đã tích lũy được rất nhiều kinh nghiệm chuyên môn về các công nghệ SOA và web trong thời gian đó. Kể từ năm 2008, Michael đã làm việc trong nhóm DB2 cho trình tối ưu hóa z/OS, làm về các công cụ lựa chọn kế hoạch truy cập và tối ưu hóa thử nghiệm.



Susan Malaika, Nhân viên kỹ thuật cao cấp, IBM

Ảnh của Susan MalaikaSusan Malaika là một nhân viên kỹ thuật cao cấp trong IBM Information Management Group (một bộ phận của Tập đoàn phần mềm IBM). Bà chuyên về XML, Web và cơ sở dữ liệu. Bà đã phát triển các tiêu chuẩn để hỗ trợ dữ liệu cho các môi trường grid tại Global Grid Forum. Ngoài việc là một nhà phát triển sản phẩm phần mềm của IBM, bà cũng đã là một chuyên gia Internet, một nhà phân tích dữ liệu và một nhà thiết kế và nhà phát triển ứng dụng. Bà cũng là đồng tác giả một cuốn sách về Web và đã xuất bản các bài báo về xử lý giao dịch và XML. Bà là thành viên của Học viện công nghệ của IBM.



20 03 2013

Tổng quan

Bài này giới thiệu một tập hợp các hàm do người dùng định nghĩa (các UDF - user-defined functions) cho DB2 để cho phép các ứng dụng sử dụng các dịch vụ dựa trên REST từ SQL. Bài này sẽ trình bày các chủ đề sau đây:

  • Giới thiệu
  • Các hàm REST vô hướng cơ bản do người dùng định nghĩa
    • Gửi các giá trị đầu trang HTTP tùy chỉnh
    • Kết hợp các hàm XML với các hàm REST UDF bằng cách lấy ra một nguồn cấp tin từ BBC
    • Nối các kết quả của các hàm REST UDF với một bảng quan hệ
    • Bảo mật — xác thực và mã hóa
  • Các hàm của trình trợ giúp
    • Mã hóa/giải mã URL
    • Mã hóa/giải mã Base64

Giới thiệu

Phù hợp với phiên bản DB2 nào?

Thông tin trong bài này phù hợp cho cả DB2 cho Linux®, UNIX® và Windows® và DB2 cho z/OS®.

HTTP đã được định nghĩa hơn 20 năm trước đây khi người ta thực hiện sự thay đổi lớn cuối cùng (HTTP 1.1) vào năm 1999 (xem RFC2616). Tuổi thọ của HTTP là một dấu hiệu cho thấy nó đang ở trong một trạng thái ổn định. HTTP là giao thức phổ biến nhất trên web. Theo thời gian, có thêm các giao thức và các mẫu sử dụng như REST hay WebDAV được xây dựng dựa trên HTTP. Nhiều trang web và ứng dụng cung cấp các giao diện dựa trên HTTP để truy cập thông tin.

Các định dạng khác được sử dụng trên web: JSON

Có rất nhiều định dạng dựa trên văn bản khác được sử dụng trên web hiện nay. JSON đã trở nên rất phổ biến trong những năm gần đây. Bài "Xây dựng một ứng dụng pureXML và JSON, Phần 1: Lưu trữ và truy vấn JSON với DB2 pureXML" giới thiệu một cách có thể xử lý JSON trong DB2 bằng cách sử dụng JSONx để chuyển đổi JSON thành XML và ngược lại.

Một số định dạng thông báo (chủ yếu là dựa trên XML) đã tiến hóa theo thời gian và được sử dụng để trao đổi dữ liệu chung với HTTP như là tầng vận chuyển — SOAP, RSS hoặc Atom, chẳng hạn.

Các hệ thống quản trị cơ sở dữ liệu quan hệ (các RDBMS) đã phát triển, cũng đưa vào chức năng xử lý và lưu trữ cho nhiều loại dữ liệu hơn là dữ liệu quan hệ và SQL, ví dụ như để hỗ trợ XML nguyên gốc.

Hình 1. Truy cập web từ DB2 thông qua các hàm REST
Sơ đồ cho thấy nội dung web đang kết nối thông qua các hàm của người tiêu dùng HTTP cho DB2, lên đến nội dung quan hệ và XML trong DB2

Trong bài này, chúng tôi giới thiệu các phần mở rộng cho SQL dưới dạng các hàm do người dùng định nghĩa (UDF) để truy cập tài nguyên có thể lập địa chỉ URL qua HTTP trực tiếp từ các câu lệnh SQL. Các hàm do người dùng định nghĩa được gọi là REST UDF hoặc REST functions. Với các hàm mới này, có thể sử dụng các khả năng bổ sung, đã có sẵn trong các RDBMS — chẳng hạn như việc tổng hợp SQL hoặc truy cập XPath — để thao tác và lưu trữ dữ liệu đã lấy ra từ web. Với các hàm REST, có thể ban hành các yêu cầu HTTP đơn giản là GET hoặc POST.

Các chữ ký (dài dòng) phức tạp hơn cho các hàm REST cũng có sẵn, cho phép kiểm tra các mã đáp ứng và các giá trị đầu trang HTTP, rất ích cho việc gỡ lỗi. Các hàm REST dài dòng không được tiếp tục thảo luận trong bài này, nhưng bạn có thể xem xét các ví dụ mẫu trong tệp sample_tableUDF_Queries.txt để có được một khái niệm về cách có thể sử dụng các hàm này.

Các hàm REST có thể xử lý thông tin được gửi qua HTTP như là dữ liệu nhị phân hoặc dữ liệu văn bản. Các phiên bản nhị phân sử dụng thông tin như các hình ảnh, âm thanh và các định dạng dữ liệu nhị phân khác, trong khi các phiên bản văn bản xử lý các trang HTML và các thông tin dựa trên văn bản khác bằng cách tự động chuyển đổi dữ liệu từ hay tới trang mã cơ sở dữ liệu được sử dụng. Dữ liệu văn bản trên Internet thường ở dạng mã Unicode, trong khi dữ liệu trong các cơ sở dữ liệu quan hệ thường ở dạng mã khác.

Bằng cách làm theo các bước trong bài này và cùng với bản tải về, bạn có thể lấy ra dữ liệu từ web và nối nó với dữ liệu quan hệ được lưu trữ cục bộ. Hơn nữa, bạn có thể áp dụng các khả năng lưu trữ XML nguyên gốc của DB2 để xử lý, lưu trữ và chuyển đổi dữ liệu dựa trên XML (ví dụ, bằng cách sử dụng hàm XMLTABLE để tạo ra một tập hợp dữ liệu quan hệ từ một tài liệu XML).

Bài này bắt đầu bằng việc giới thiệu các hàm REST UDF. Sau đó nó sẽ tiếp tục đưa ra các ví dụ để thao tác thông tin văn bản và thông tin nhị phân trên web. Rồi nó mô tả việc tùy chỉnh các yêu cầu REST bằng cách thiết lập các tùy chọn đầu trang HTTP. Một ví dụ dựa trên việc truy cập các nguồn cấp dữ liệu RSS minh họa sự tích hợp dữ liệu web và dữ liệu cơ sở dữ liệu. Bài này cũng trình bày việc xử lý xác thực và mã hóa HTTP. Nó kết thúc bằng các ví dụ về các hàm của trình trợ giúp để thực hiện mã hóa URL và mã hóa Base64. Bài này có một phụ lục với một tập hợp đầy đủ các tham số của hàm REST.

Bài này có kèm theo một bản tải về bao gồm các hàm REST do người dùng định nghĩa dành cho DB2 cho LUW và DB2 cho z/OS và các ví dụ mẫu khác. Gói phần mềm tải về cung cấp một tập hợp các hàm vô hướng cơ bản cũng như một số hàm của trình trợ giúp.


Các hàm REST vô hướng cơ bản

Các hàm vô hướng cơ bản cung cấp quyền truy cập vào nội dung trên web. Hàm REST có sẵn bốn lệnh phổ biến nhất của HTTP: GET, POST, PUT và DELETE. Có hai phương thức: một phương thức để xử lý nội dung nhị phân và một phương thức dùng cho nội dung dựa trên văn bản. Lược đồ DB2 cho các hàm là DB2XML.

Tất cả các hàm REST cơ bản đều là các hàm vô hướng để trả về nội dung của thông báo đáp ứng HTTP như BLOB (nhị phân) hoặc CLOB (văn bản). Các chữ ký hàm theo mẫu sau:

DB2XML.HTTP<method><type>(url, httpHeader <,
                    input>)
Bảng 1. Tên phương thức
phương thứcGET, POST, PUT, DELETE
kiểuBLOB (nội dung nhị phân) hoặc CLOB (nội dung văn bản) định nghĩa kiểu trả về và kiểu tài liệu <input>
Bảng 2. Tham số input (đầu vào)
url(Bắt buộc) URL của tài nguyên đang được truy cập
httpHeader(tùy chọn) các giá trị đầu trang bổ sung được sử dụng với yêu cầu này
input(chỉ với POST, PUT) dữ liệu được gửi cùng với yêu cầu, như là một BLOB hoặc CLOB

Có một phương thức bổ sung có sẵn để thực hiện một yêu cầu HEAD HTTP. Phương thức này không gửi hoặc lấy ra dữ liệu. Hãy lấy ra trang web của IBM thông qua GET HTTP:

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

Kết quả là văn bản HTML của trang web của IBM là dữ liệu văn bản CLOB.

Gửi các giá trị đầu trang HTTP đã tùy chỉnh

Ở trên, chúng tôi đã đưa ra một chuỗi rỗng cho các giá trị đầu trang HTTP, có nghĩa là chúng tôi đang sử dụng các giá trị mặc định khi ban hành thông báo yêu cầu. Có thể cần cung cấp thông tin đầu trang tùy chỉnh với một yêu cầu, (ví dụ, để thay đổi kiểu nội dung hoặc thiết lập một trường đầu trang "SOAPAction" khi gọi một dịch vụ web SOAP).

Với mỗi phương thức, có thể chỉ rõ một tài liệu XML của đầu trang HTTP tùy chọn để cho phép thiết lập các giá trị đầu trang HTTP bổ sung. Tài liệu đầu trang XML phải phù hợp với định dạng sau:

Liệt kê 1. Định dạng đầu trang HTTP XML
<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>

Mỗi trường đầu trang tùy chỉnh được đại diện bởi một phần tử <header> có một thuộc tính name (tên) và value (giá trị). Phần tử gốc <httpHeader> cho phép chỉ rõ một số tùy chọn yêu cầu bổ sung qua các thuộc tính.

Bảng 3. Các tùy chọn có thể được chỉ rõ với <httpHeader>
Tên thuộc tínhKiểuMặc địnhMô tả
connectionTimeoutInteger (Số nguyên)Mặc định hệ thốngThời gian chờ tính bằng miligiây
readTimeoutInteger (Số nguyên)Mặc định hệ thốngThời gian chờ tính bằng miligiây
followRedirectsBoolean (Luận lý)True (Đúng)Định nghĩa, nếu cần tiếp sau các chuyển hướng
useCachesBoolean (Luận lý)True (Đúng)Định nghĩa, nếu cần sử dụng các bộ nhớ đệm

Có thể cung cấp tài liệu đầu trang XML là giá trị CLOB hay giá trị XML (chỉ với DB2 LUW).

Liệt kê 2. Gọi một dịch vụ web SOAP 1.1 qua POST HTTP
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;

Kết quả là thông báo phản hồi SOAP của dịch vụ web là dữ liệu văn bản CLOB.

Kết hợp các hàm XML với các hàm REST do người dùng định nghĩa bằng cách lấy ra một nguồn cấp tin BBC

Ví dụ này trình bày cách bạn có thể dễ dàng lấy ra một nguồn cấp tin BBC và chuyển đổi nó thành một tập hợp dữ liệu quan hệ khi sử dụng hàm XMLTABLE của DB2.

Hình 2. Sử dụng các hàm REST UDF và DB2 pureXML để xử lý một nguồn cấp tin
Sơ đồ cho thấy nguồn cấp tin BBC truyền thông qua các hàm của người tiêu dùng HTTP cho DB2, thông qua hàm XMLTABLE để chia nhỏ định dạng RSS thành một tập hợp kết quả và thành DB2

Đầu tiên, chúng ta hãy xem xét nguồn cấp dữ liệu RSS của BBC bằng cách sử dụng câu lệnh sau:

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

Bây giờ chúng ta có thể bọc quanh một cuộc gọi hàm XMLTABLE để chuyển đổi định dạng RSS XML được trả về thành một tập hợp kết quả quan hệ.

Liệt kê 3. Chia nhỏ nguồn tin BBC vào một tập hợp dữ liệu quan hệ
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;

Tập hợp kết quả có bốn cột: TITLE chứa tiêu đề của mục nguồn cấp tin, DESCRIPTION với mô tả nguồn cấp tin, LINK (Liên kết) với một URL đến tài liệu tin tức thực tế và PUBDATE (ngày xuất bản).

Có thể tìm thấy nhiều ví dụ hơn trong gói phần mềm tải về từ bài này.

Nối các kết quả của hàm REST UDF với một bảng quan hệ

Trong phần trước, hàm XMLTABLE được sử dụng để chia nhỏ dữ liệu XML được hàm REST UDF trả về . Trong phần này, ví dụ này tiến thêm một bước. Tập hợp kết quả đã chia nhỏ được nối với một bảng tin tức hiện có với bốn cột phù hợp với tiêu đề tin tức.

Hình 3. Nối các kết quả của hàm REST UDF với một bảng quan hệ
Giống như Hình 2, trừ hàm XMLTABLE nối với một bảng cục bộ để tạo ra một tập hợp kết quả
Liệt kê 4. Nối các kết quả của hàm REST UDF với một bảng quan hệ
   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;

Bảo mật — Xác thực và mã hóa

Sử dụng các chứng chỉ với các hàm REST UDF

Các hàm REST UDF tận dụng lợi thế của Java Secure Socket Extension (JSSE) để truyền thông trên tầng socket bảo mật (SSL). Truyền thông SSL cần có một kho lưu trữ chứng chỉ trên máy khách để lưu các chứng chỉ máy chủ. Việc quản lý kho lưu trữ có thể phụ thuộc vào việc thực hiện JSSE. IBM JDK có cách thực hiện riêng của mình với các phần mở rộng đặc biệt cho z/OS (xem Việc thực hiện JSSE của IBM trên z/OS).

Các hàm REST hỗ trợ xác thực cơ bản HTTP cũng như mã hóa SSL bằng cách sử dụng HTTPS.

Ví dụ sau đây cho thấy cách có thể lấy ra các thông báo chưa đọc từ tài khoản Google Mail của bạn và phân tích cú pháp các thông báo đó thành một tập hợp kết quả quan hệ khi sử dụng hàm XMLTABLE.

Sử dụng các chứng chỉ với các hàm REST UDF
Hiển thị Gmail đi qua một nguồn cấp tin Atom thông qua việc truy cập an toàn qua https tới các hàm của người tiêu dùng HTTP cho DB2 và từ đó đến hàm XMLTABLE để chia nhỏ định dạng Atom thành một tập kết quả và các nguồn cấp tin thành DB2

Việc truy cập vào Gmail được mã hóa bằng SSL và được bảo vệ bằng cách sử dụng xác thực HTTP cơ bản (sử dụng $quot;https" trong URL). Gmail trả về các đầu đề cho các thông báo chưa đọc như là nguồn cấp dữ liệu Atom và chúng tôi sử dụng hàm XMLTABLE trong ví dụ này để trả về kết quả là một tập hợp dữ liệu quan hệ.

Liệt kê 5. Lấy ra các thông báo chưa đọc từ Gmail bằng cách sử dụng SSL và xác thực HTTP
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;

Tập hợp kết quả bao gồm bốn cột: TITLE, SUMMARY, AUTHOR_NAME và AUTHOR_EMAIL.


Các hàm của trình trợ giúp

Ngoài các hàm REST, bạn có thể tìm thấy các hàm của trình trợ giúp để thực hiện mã hóa/giải mã URL, cũng như mã hóa và giải mã Base64.

Mã hóa/giải mã URL

Đặc tả URL (RFC1738) định nghĩa một tập hợp các ký tự đặc biệt cần được thay thế bằng các chuỗi ký tự thoát (ví dụ, nếu được sử dụng trong chuỗi truy vấn của một URL). Các gói phần mềm tải về đi kèm với hai hàm để thực hiện mã hóa và giải mã URL. Tham số đầu tiên của hàm urlEncode là chuỗi đơn giản; tham số đầu tiên của hàm urlDecode là chuỗi mã hóa-URL. Tham số tùy chọn thứ hai của cả hai hàm là bảng mã hóa của tập hợp-ký tự được sử dụng. Nếu chọn NULL, thì bảng mã hóa UTF-8 được sử dụng, như đề xuất trong RFC3986.

Liệt kê 6. Ví dụ về mã hóa-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
Liệt kê 7. Ví dụ về giải mã-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

Mã hóa/giải mã Base64

Mã hóa Base64 được sử dụng rộng rãi trên web để biểu diễn dữ liệu nhị phân là một chuỗi (ví dụ, khi gửi các khóa băm). Gói phần mềm tải về đi kèm với hai hàm để thực hiện mã hóa và giải mã Base64.

Liệt kê 8. Ví dụ về mã hóa-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
Liệt kê 9. Ví dụ về giải mã 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

Sự hỗ trợ proxy HTTP

Cần thiết lập một tập hợp các thuộc tính của hệ thống Java để cho phép hỗ trợ proxy HTTP vì các hàm REST UDF được thực hiện trong Java. Có thể sử dụng các thuộc tính sau đây:

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

DB2 cho Linux, UNIX, Windows không cung cấp quyền truy cập vào các thuộc tính của hệ thống JVM. Các hàm REST UDF sẽ kiểm tra một tệp restudf.properties trong thư mục $ DB2INSTPATH/function để thay thế, trong tệp đó người dùng có thể chỉ rõ các thiết lập proxy HTTP như sau:

Liệt kê 10. Các thiết lập proxy HTTP trong tệp restudf.properties
http.proxyHost=myProxyHost.com
http.proxyPort=8090
http.proxyUser=user
http.proxyPassword=secret
http.nonProxyHosts=*.ibm.com|wikipedia.org|...

Trên DB2 cho z/OS, bạn có thể chỉ rõ các thuộc tính đó trong tệp JVMPROPS như sau (cũng xem tệp installationNotesUDFzOS.txt trong bản tải về):

Liệt kê 11. Các thiết lập proxy HTTP trong tệp JVMPROPS
-Dhttp.proxyHost=myProxyHost.com
-Dhttp.proxyPort=8090
-Dhttp.proxyUser=user
-Dhttp.proxyPassword=secret
-Dhttp.nonProxyHosts=*.ibm.com|wikipedia.org|...

Kết luận

Các hàm REST của DB2 cung cấp một cách đơn giản và dễ dàng để truy cập tài nguyên trên web từ trong một câu lệnh SQL. Mặc dù các hàm đó rất đơn giản, nhưng chúng cũng đủ linh hoạt để truy cập và sử dụng dữ liệu từ nhiều nguồn. Các hàm REST đã trình bày thích nghi hoàn toàn với các khả năng của DB2 pureXML do việc sử dụng rộng rãi XML như là định dạng thông báo trên web. Bài này giải thích cách sử dụng cơ bản các hàm REST, cách tích hợp dữ liệu web với dữ liệu cơ sở dữ liệu. Bài này cũng giải thích việc sử dụng xác thực và mã hóa và mô tả các hàm của trình trợ giúp để giúp mã hóa URL và mã hóa Base64.


Lời cảm ơn

Các tác giả cảm ơn Ling Ling về việc xem xét bài này và thử nghiệm các hướng dẫn của nó.

Phụ lục

Bảng 4. Các chữ ký của hàm REST do người dùng định nghĩa
TênKiểu trả vềChữ kýĐộng từ HTTPMô tả
httpGetBlobBLOBhttpGetBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOB(5M)GETLấy ra một nguồn tài nguyên qua một URL đã cho thông qua GET HTTP. Tài nguyên được trả về là LOB nhị phân (BLOB).
httpGetClobCLOBhttpGetClob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB(5M)GETLấy một nguồn tài nguyên dựa trên văn bản qua một URL đã cho thông qua GET HTTP. Tài nguyên được trả về là LOB ký tự (CLOB). Thực hiện chuyển đổi bộ ký tự thành trang mã cơ sở dữ liệu nếu cần .
httpPutBlobBLOBhttpPutBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBPUTTạo (tải lên) một nguồn tài nguyên nhị phân trong một URL đã cho bằng cách sử dụng PUT HTTP. Một thông báo đáp ứng được trả về là LOB nhị phân (BLOB) nếu máy chủ ban hành thông báo đáp ứng đó.
httpPutClobCLOBhttpPutClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBPUTTạo (tải lên) một nguồn tài nguyên văn bản trong một URL đã cho bằng cách sử dụng PUT HTTP. Một thông báo đáp ứng được trả về là LOB ký tự (CLOB) nếu máy chủ ban hành thông báo đáp ứng đó. Thực hiện chuyển đổi bộ ký tự nếu cần.
httpPostBlobBLOBhttpPostBlob(url VARCHAR(2048), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOB(5M)POSTCập nhật một nguồn tài nguyên nhị phân trong một URL đã cho bằng cách sử dụng POST HTTP. Một thông báo đáp ứng được trả về là LOB nhị phân (BLOB).
httpPostClobCLOBhttpPostClob(url VARCHAR(2048), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOB(5M)POSTCập nhật một nguồn tài nguyên văn bản trong một URL đã cho bằng cách sử dụng POST HTTP. Một thông báo đáp ứng được trả về là LOB ký tự (CLOB). Thực hiện chuyển đổi bộ ký tự nếu cần.
httpDeleteBlobBLOBhttpDeleteBlob(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS BLOBDELETEXóa một nguồn tài nguyên nhị phân trong URL đã cho bằng cách sử dụng DELETE HTTP. Thông báo đáp ứng được trả về là LOB nhị phân (BLOB) nếu có bất kỳ vấn đề nào.
httpDeleteClobCLOBhttpDelete(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOBDELETEXóa một nguồn tài nguyên văn bản trong URL đã cho bằng cách sử dụng DELETE HTTP. Thông báo đáp ứng được trả về là LOB (CLOB) ký tự nếu có bất kỳ vấn đề nào. Thực hiện chuyển đổi bộ ký tự nếu cần.
httpBlobBLOBhttpBlob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOBBất kỳ động từ HTTP nàoThực hiện một yêu cầu HTTP với động từ được cung cấp. Một thông báo đáp ứng có thể được cung cấp là LOB nhị phân (BLOB). Một thông báo đáp ứng được trả về là LOB nhị phân (BLOB) nếu máy chủ ban hành thông báo đáp ứng.
httpClobCLOBhttpClob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOBBất kỳ động từ HTTP nàoThực hiện một yêu cầu HTTP với động từ được cung cấp. Một thông báo đáp ứng có thể được cung cấp là LOB ký tự (CLOB). Một thông báo đáp ứng được trả về là LOB ký tự (CLOB) nếu máy chủ ban hành thông báo đáp ứng. Thực hiện chuyển đổi bộ ký tự nếu cần.
httpHeadCLOB/XMLhttpHead(url VARCHAR(2048), httpHeader CLOB (10K)) RETURNS CLOB (10K)HEADKiểm tra đầu trang HTTP đối với tài nguyên cần thiết bằng cách sử dụng HEAD HTTP. Chỉ có đầu trang HTTP được trả về là CLOB/XML.

Chỉ với DB2 cho LUW: Tài liệu XML httpHeader cũng được cung cấp như là giá trị XML nguyên gốc để thay cho việc sử dụng CLOB.

Bảng 5. Các chữ ký của các hàm của trình trợ giúp
TênKiểu trả vềChữ kýMô tả
urlEncodeVARCHARurlEncode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)Hàm của trình trợ giúp để thực hiện mã hóa-URL của văn bản được cung cấp. Giá trị mã hóa định nghĩa bộ ký tự được sử dụng. Có thể đặt giá trị này là NULL thì bộ ký tự UTF-8 được sử dụng theo mặc định.
urlDecodeVARCHARurlDecode(text VARCHAR(2048), encoding VARCHAR(20)) RETURNS VARCHAR(4096)Hàm của trình trợ giúp để thực hiện giải mã-URL của văn bản được cung cấp. Giá trị mã hóa định nghĩa bộ ký tự được sử dụng. Có thể đặt giá trị này là NULL thì bộ ký tự UTF-8 được sử dụng theo mặc định.
base64EncodeVARCHARbase64Encode(text VARCHAR(2732) FOR BIT DATA) RETURNS VARCHAR(4096)Hàm của trình trợ giúp để thực hiện mã hóa Base64 dữ liệu nhị phân được cung cấp để trả về dữ liệu là chuỗi mã hóa Base64.
base64DecodeVARCHAR FOR BIT DATAbase64Decode(text VARCHAR(4096)) RETURNS VARCHAR(2732) FOR BIT DATAHàm của trình trợ giúp để thực hiện giải mã Base64 dữ liệu mã hóa Base64 được cung cấp để trả về dữ liệu là chuỗi nhị phân.

Tải về

Mô tảTênKích thước
REST UDF download package1download.zip---

Ghi chú

  1. Tệp download.zip đã được cập nhật để sửa chữa một vấn đề không tương thích với Phiên bản 8 của DB2 cho z/OS. Trước khi sửa chữa, người dùng có thể gặp phải lỗi sau đây trên DB2 cho z/OS: java.lang.NoClassDefFoundError: com.ibm.db2.jcc.DB2Xml

Tài nguyên

Học tập

Lấy sản phẩm và công nghệ

  • Tải về một phiên bản dùng thử miễn phí của DB2 cho Linux, UNIX và Windows.
  • Bây giờ bạn có thể sử dụng DB2 miễn phí. Hãy tải về DB2 Express-C, một phiên bản miễn phí của DB2 Express Edition cho cộng đồng để cung cấp các tính năng dữ liệu cốt lõi tương tự như DB2 Express Edition và cung cấp một cơ sở vững chắc để xây dựng và triển khai các ứng dụng.
  • Xây dựng dự án phát triển tiếp theo của bạn với phần mềm dùng thử của IBM, có sẵn để tải về trực tiếp từ developerWorks.

Thảo luận

Bình luận

developerWorks: Đăng nhập

Các trường được đánh dấu hoa thị là bắt buộc (*).


Bạn cần một ID của IBM?
Bạn quên định danh?


Bạn quên mật khẩu?
Đổi mật khẩu

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Ở lần bạn đăng nhập đầu tiên vào trang developerWorks, một hồ sơ cá nhân của bạn được tạo ra. Thông tin trong bản hồ sơ này (tên bạn, nước/vùng lãnh thổ, và tên cơ quan) sẽ được trưng ra cho mọi người và sẽ đi cùng các nội dung mà bạn đăng, trừ khi bạn chọn việc ẩn tên cơ quan của bạn. Bạn có thể cập nhật tài khoản trên trang IBM bất cứ khi nào.

Thông tin gửi đi được đảm bảo an toàn.

Chọn tên hiển thị của bạn



Lần đầu tiên bạn đăng nhập vào trang developerWorks, một bản trích ngang được tạo ra cho bạn, bạn cần phải chọn một tên để hiển thị. Tên hiển thị của bạn sẽ đi kèm theo các nội dung mà bạn đăng tải trên developerWorks.

Tên hiển thị cần có từ 3 đến 30 ký tự. Tên xuất hiện của bạn phải là duy nhất trên trang Cộng đồng developerWorks và vì lí do an ninh nó không phải là địa chỉ email của bạn.

Các trường được đánh dấu hoa thị là bắt buộc (*).

(Tên hiển thị cần có từ 3 đến 30 ký tự)

Bằng việc nhấn Gửi, bạn đã đồng ý với các điều khoản sử dụng developerWorks Điều khoản sử dụng.

 


Thông tin gửi đi được đảm bảo an toàn.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=70
Zone=Information Management, SOA và dịch vụ Web
ArticleID=861963
ArticleTitle=Truy cập các dịch vụ HTTP và RESTful từ DB2: Giới thiệu các hàm REST được định nghĩa cho người dùng DB2
publish-date=03202013