Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 18 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
18
Dung lượng
693,48 KB
Nội dung
Truy cậpcácdịchvụHTTP và RESTfultừDB2:
Giới thiệucáchàmRESTđượcđịnhnghĩacho
người dùngDB2
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ả DB2cho Linux®, UNIX® và Windows®
và DB2cho z/OS®.
HTTP đã đượcđịnhnghĩ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ấpcác giao diện dựa trên HTTP để truycậ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. Truycập web từDB2 thông qua cáchàmREST
Trong bài này, chúng tôi giớithiệucác phần mở rộng cho SQL dưới dạng cáchàm
do ngườidùngđịnhnghĩa (UDF) để truycậ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áchàm do ngườidùngđịnhnghĩađược gọi
là REST UDF hoặc REST functions. Với cáchàm mới này, có thể sử dụngcá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 truycậ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 chocáchàmREST 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ụngcáchàm này.
Các hàmREST 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ụngcá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ụnghà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ớithiệucáchàmREST 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 truycậpcá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áchà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áchàmREST do ngườidùngđịnh
nghĩa dành choDB2cho LUW vàDB2cho 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áchàm vô hướng cơ bản cũng như một số hàm
của trình trợ giúp.
Về đầu trang
Các hàmREST vô hướng cơ bản
Các hàm vô hướng cơ bản cung cấp quyền truycậ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ùngcho nội dung dựa trên văn bản. Lược đồ DB2chocáchàm là DB2XML.
Tất cả cáchàmREST cơ bản đều là cáchà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ức
GET, POST, PUT, DELETE
kiểu
BLOB (nội dung nhị phân) hoặc CLOB (nội dung văn bản) địnhnghĩ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 đượctruycậ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 chocác giá trị đầu trang HTTP, có
nghĩa là chúng tôi đang sử dụngcá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ịchvụ 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ính Kiểu Mặc định Mô tả
connectionTimeout
Integer (Số
nguyên)
Mặc định hệ
thống
Thời gian chờ tính bằng miligiây
readTimeout
Integer (Số
nguyên)
Mặc định hệ
thống
Thời gian chờ tính bằng miligiây
followRedirects
Boolean (Luận
lý)
True (Đúng)
Định nghĩa, nếu cần tiếp sau các
chuyển hướng
useCaches
Boolean (Luận
lý)
True (Đúng)
Định nghĩa, nếu cần sử dụngcá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ịchvụ 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=""http://www.webserviceX.NET/GetQuote""/>
</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ịchvụ web là dữ liệu văn bản CLOB.
Kết hợp cáchàm XML với cáchàmREST do ngườidùngđịnhnghĩ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ụnghàm XMLTABLE
của DB2.
Hình 2. Sử dụngcáchàmREST UDF vàDB2 pureXML để xử lý một nguồn cấp
tin
Đầ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=u
k','')
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=u
k','')
) 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àmREST 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àmREST UDF với một bảng quan hệ
Liệt kê 4. Nối các kết quả của hàmREST 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=u
k','')
) 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ụngcác chứng chỉ với cáchàmREST UDF
Các hàmREST 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àmREST 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ụnghàm XMLTABLE.
Sử dụngcác chứng chỉ với cáchàmREST UDF
Việc truycậ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 đề chocá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
[...]... thống Java để cho phép hỗ trợ proxy HTTP vì cáchàmREST UDF được thực hiện trong Java Có thể sử dụngcác thuộc tính sau đây: http. proxyHost http. proxyPort http. proxyUser http. proxyPassword http. nonProxyHosts DB2cho Linux, UNIX, Windows không cung cấp quyền truycập vào các thuộc tính của hệ thống JVM CáchàmREST UDF sẽ kiểm tra một tệp restudf.properties trong thư mục $ DB2INSTPATH/function... 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| Về đầu trang Kết luận CáchàmREST 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áchàm đó rất đơn giản, nhưng chúng cũng đủ linh hoạt để truy. .. truy cập và sử dụng dữ liệu từ nhiều nguồn CáchàmREST đã 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áchà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áchàm của trình trợ giúp để giúp mã hóa URL và. .. Về đầu trang 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àmREST do ngườidùngđịnhnghĩa Động từ Tên Kiểu trả về Chữ ký Mô tả HTTP Lấy ra một nguồn tài httpGetBlob(url nguyên qua một URL VARCHAR(2048), đã cho thông qua httpGetBlob BLOB httpHeader CLOB GET GET HTTP Tài (10K)) RETURNS nguyên được trả về là BLOB(5M)... AUTHOR_NAME và AUTHOR_EMAIL Về đầu trang Cáchàm của trình trợ giúp Ngoài cáchàm REST, bạn có thể tìm thấy cáchà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) địnhnghĩ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... $ DB2INSTPATH/function để thay thế, trong tệp đó ngườidù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 DB2cho z/OS, bạn có thể chỉ rõ các thuộc tính đó trong tệp JVMPROPS như sau (cũng... trong URL đã cho bằng DELETE cách sử dụng DELETE HTTP Thông báo đáp ứng BLOB httpBlob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data BLOB(5M)) RETURNS BLOB httpClob CLOB httpClob(url VARCHAR(2048), httpMethod VARCHAR(128), httpHeader CLOB (10K), data CLOB(5M)) RETURNS CLOB httpHead httpHead(url VARCHAR(2048), CLOB/XMLhttpHeader CLOB (10K)) RETURNS CLOB (10K) httpBlob được trả về... hiện một yêu cầu HTTP với động từđược cung cấp Một thông báo đáp Bất kỳ ứng có thể được cung động từcấp là LOB nhị phân HTTP (BLOB) Một thông nào 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 Thự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 Bất kỳ cấp là LOB ký tự động từ (CLOB) Một thông HTTP báo đáp ứng được trả nào... một URL đã cho bằng cách sử POST dụng POST HTTP Một thông báo đáp ứng được trả về là LOB nhị phân (BLOB) Cậ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 POST 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 Xóa một nguồn tài nguyên nhị phân trong URL đã cho bằng cách sử dụng DELETE DELETE HTTP Thông báo đáp ứng được trả... báo đáp ứng Thực hiện chuyển đổi bộ ký tự nếu cần Kiểm tra đầu trang HTTP đối với tài nguyên cần thiết bằng HEAD cách sử dụng HEAD HTTP Chỉ có đầu trang HTTPđược trả về là CLOB/XML Chỉ với DB2cho 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áchàm của trình trợ giúp Tên Kiểu trả về Chữ ký urlEncode VARCHAR urlDecode . 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 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. 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. 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