24/05/2018, 20:41

Lập trình phân tán với WEB SERVICE

Vai trò của web service Web service ra đời đã mở ra một hướng mới cho việc phát triển các ứng dụng trên Internet. Web services tạm dịch là các dịch vụ web. Web services kết hợp sử dụng nhiều công nghệ khác nhau cho phép ...

Vai trò của web service

Web service ra đời đã mở ra một hướng mới cho việc phát triển các ứng dụng trên Internet. Web services tạm dịch là các dịch vụ web. Web services kết hợp sử dụng nhiều công nghệ khác nhau cho phép các ứng dụng được viết bằng các ngôn ngữ khác nhau, chạy trên các hệ nền khác nhau có thể trao đổi được với nhau thông qua môi trường mạng Internet. Tuy nhiên những công nghệ sử dụng ở đây không nhất thiết phải là những công nghệ mới. Đây là điểm khác biệt của web services so với các công nghệ khác, đó chính là khả năng kết hợp các công nghệ đã có như là XML, SOAP, WSDL, UDDI để tạo ra các service, đặc điểm này làm nổi bật vai trò của web services.Đặc điểm web service

- Web service cho phép client và server tương tác được với nhau mặc dù trong những môi tr­ường khác nhau (ngôn ngữ lập trình khác nhau, hệ nền khác nhau).

- Web service được thiết kế mở và dựa vào các chuẩn: XML và HTTP là nền tảng kỹ thuật cho web service. Bởi vậy, chúng độc lập với ngôn ngữ lập trình và hệ nền .

- Web service rất linh động: Vì với UDDI và WSDL, thì việc mô tả và phát triển web service có thể đư­ợc tự động hóa.

-Web service được xây dựng trên nền tảng những công nghệ đã đư­ợc chấp nhận

-Web service có dạng module

- Web service có thể công bố (publish) và gọi thực hiện qua mạng.-…Ngày nay web services được sử dụng rất nhiều trong những lĩnh vực khác nhau của cuộc sống , như :

  1. Dịch vụ chọn lọc và phân loại tin tức : là những hệ thống thư viện kết nối đến các web portal để tìm kiếm các thông tin từ các nhà xuất bản có chứa những từ khóa muốn tìm. Dịch vụ hiển thị danh sách đĩa nhạc dành cho các công ty thu thanh.Ứng dụng đại lý du lịch có nhiều giá vé đi du lịch khác nhau do có chọn lựa phục vụ của nhiều hãng hàng không. Bảng tính toán chính sách bảo hiểm dùng công nghệ Excel/COM với giao diện web
  2. Thông tin thương mại bao gồm nhiều nội dung, nhiều mục tin như: dự báo thời tiết, thông tin sức khoẻ, lịch bay, tỷ giá cổ phiếu,…
  3. Những giao dịch trực tuyến cho cả B2B và B2C như: đặt vé máy bay, làm giao kèo thuê xe.
  4. Hệ thống thông tin dùng Java để tính toán tỷ giá chuyển đổi giữa các loại tiền tệ. Hệ thống này sẽ được các ứng dụng khác dùng như một web service
  5. …..

Kiến trúc web service

Kiến trúc của web service bao gồm các tầng như sau :

Kiến trúc web service

Trong đó bao gồm các tầng :

- Tầng vận chuyển với những công nghệ chuẩn là HTTP , SMTP và JMS- Tầng giao thức tương tác dịch vụ ( Service Communication Protocol) với công nghệ chuẩn là SOAP . SOAP là giao thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, SOAP cho phép người dùng triệu gọi một service từ xa thông qua một message XML.

- Tầng mô tả dịch vụ (Service Description) với công nghệ chuẩn là WSDL và XML . WSDL là một ngôn ngữ mô tả giao tiếp và thực thi dựa trên XML. Web service sử dụng ngôn ngữ WSDL để truyền các tham số và các loại dữ liệu cho các thao tác , các chức năng mà web service cung cấp.

- Tầng dịch vụ ( Service) :cung cấp các chức năng của service.- Tầng đăng ký dịch vụ (Service Registry) với công nghệ chuẩn là UDDI .UDDI dùng cho cả người dùng và ̣ SOAP server, nó cho phép đăng ký dịch vụ để người dùng có thể gọi thực hiện service từ xa qua mạng , hay nói cách khác một service cần phải được đăng ký để cho phép các client có thể gọi thực hiện

- Bên cạnh đó để cho các service có tính an toàn , toàn vẹn và bảo mật thông tin trong kiến trúc web service chúng ta có thêm các tầng Policy , Security , Transaction , Management giúp tăng cường tính bảo mật , an toàn và toàn vẹn thông tin khi sử dụng service.

XML – Extensible Markup Language

XML do W3C đề ra và được phát triển từ SGML .XML là một ngôn ngữ mô tả văn bản với cấu trúc do người sử dụng định nghĩa .Về hình thức XML có ký pháp tựa như HTML nhưng không tuân theo một đặc tả quy ước như HTML.Người sử dụng hay các chương trình có thể quy ước định dạng các tag XML để giao tiếp với nhau.Thông tin cần truyền tải được chứa trong các tag XML,ngoài ra không chứa bất cứ thông tin nào khác về cách sử dụng hay hiển thị những thông tin ấy.

Do web service là sự kết hợp của nhiều thành phần khác nhau , do đó web services sử dụng các tính năng và đặc trưng của các thành phần này để giao tiếp với nhau.Vì vậy XML là một công cụ chính yếu để giải quyết vấn đề này .Từ kết qủa này , các ứng dụng tích hợp vĩ mô tăng cường sử dụng XML.Nhờ có khả năng tổng hợp này mà XML đã trở thành kiến trúc nền tảng cho việc xạy dựng web service.

Web services tận dụng khả năng giải quyết vấn đề của các ứng dụng lớn trên các hệ điều hành khác nhau cho chúng giao tiếp với nhau .Yêu cầu này được đáp ứng với lập trình với Java , một ngôn ngữ viết một lần sử dụng mọi nơi là một chọn lựa thích hợp cho phát triển web services

WSDL -Web Services Description Language

WSDL định nghĩa cách mô tả web service theo cú pháp tổng quát XML, bao gồm các thông tin

- Tên ̣service

- Giao thức và kiểu mã hóa sẽ đư­ợc sử dụng khi gọi các hàm của web service.- Loại thông tin: những thao tác, những tham số, và những kiểu dữ liệu gồm có giao diện của web service, cộng với tên cho giao diện này.

Một WSDL hợp lệ gồm có hai phần :

1. Phần giao diện mô tả giao diện và giao thức kết nối.

2. Phần thi hành mô tả thông tin để truy xuất service

Cả 2 phần trên sẽ được lưu trong 2 tập tin XML , bao gồm:

- Tập tin giao diện service (cho phần 1).

- Tập tin thi hành service (cho phần 2).

Cấu trúc WSDL

Tập tin giao diện - Service Interface

WSDL mô tả 5 loại thông tin chính bao gồm : import , types , message , portType , binding.

Types :WSDL định nghĩa các kiểu dữ liệu của thông điệp gửi.

<definitions .... >

<types><xsd:schema .... />*

</types></definitions>

Thông điệp (message) : mô tả thông điệp được gửi giữa client và server.

<definitions .... >

<message name="nmtoken"> *

<part name="nmtoken" element="qname"? type="qname"?/> *

</message></definitions>Những định nghĩa message đư­ợc sử dụng bởi phần tử thi hành service . Nhiều thao tác có thể tham chiếu tới cùng định nghĩa message.

Thao tác và những message đ­ược mô hình riêng rẽ để hỗ trợ tính linh hoạt và đơn giản hóa việc tái sử dụng lại. Chẳng hạn, hai thao tác với cùng tham số có thể chia sẻ một định nghĩa message.

c.Kiểu cổng (port type):WSDL mô tả cách gửi và nhận thông điệp.<wsdl:definitions .... >

<wsdl: portType name="nmtoken">

<wsdl: operation name="nmtoken" .... /> *

</wsdl: portType>

</wsdl: definitions>

WSDL định nghĩa bốn kiểu thao tác mà một cổng có thể hỗ trợ:

- One-way : cổng nhận một message, message đó là message nhập.

- Request-response : cổng nhận một message và gửi một message phản hồi

- Solicit-response: cổng gửi một message và nhận về một message

- Notification: cổng gửi một message, message đó là message xuất.

Mỗi kiểu thao tác có cú pháp biến đổi tùy theo: thứ tự của các message nhập, xuất và lỗi.Ví dụ :

<wsdl:definitions .... >

<wsdl: portType .... > *

<wsdl: operation name="nmtoken" parameterOrder="nmtokens">

<wsdl: input name="nmtoken"? message="qname"/>

<wsdl: output name="nmtoken"? message="qname"/>

<wsdl:fault name="nmtoken" message="qname"/>*

</wsdl: operation>

</wsdl: portType >

</wsdl: definitions>

Kết hợp (Binding) :định nghĩa cách các web services kết hợp với nhau.

Một kết hợp bao gồm :

- Những giao thức mở rộng cho những giao tác và những message bao gồm thông tin URN­ và mã hóa cho SOAP.

- Mỗi một kết hợp tham chiếu đến một loại cổng; một kiểu cổng (portType) có thể đ­ược sử dụng trong nhiều mối kết hợp. Tất cả các thao tác định nghĩa bên trong kiểu cổng phải nằm trong phạm vi mối kết hợp.

Tập tin thi hành - Service Implementation

WSDL mô tả 2 loại thông tin chính bao gồm : service và port .

Dịch vụ (Service) : Nó sẽ thực hiện những gì đã được định nghĩa trong tập tin giao diện và cách gọi web services theo thủ tục và phương thức nào :

<wsdl:definitions .... >

<wsdl:service name="nmtoken">

<wsdl: port .... />

</wsdl: service>

</wsdl: definitions>

Port là một cổng đầu cuối, nó định nghĩa như­ một tập hợp của binding và một địa chỉ mạng.

<wsdl:definitions .... >

<wsdl: service .... >

<wsdl: port name="nmtoken" binding="qname">

</wsdl: port>

</wsdl: service>

</wsdl:definitions>Ở đây chúng ta thấy rằng thuộc tính kết hợp tên là qname. Nó tham chiếu tới một mối kết hợp. Một cổng chứa đựng chính xác một địa chỉ mạng; Bất kỳ cổng nào trong phần thi hành phải tương ứng chính xác với một tham chiếu trong phần giao diện.

WSDL API

WSDL4J là một dự án nguồn mở , hiện tại có một WSDL Java API được gọi là WSDL4J. Bộ WSDL4J cung cấp cho chúng ta các hàm API để thực hiện việc tạo WSDL dễ dàng hơn so với cách sử dụng trực tiếp cú pháp theo dạng tag như trên.Tên gói chứa các API này là javax.wsdl.

UDDI - Universal Description , Discovery and Intergration

Để có thể sữ dụng các dịch vụ , trước tiên client phải tìm dịch vụ , ghi nhận thông tin về cách sử dụng dịch vụ và biết được đối tượng cung cấp dịch vụ .UDDI định nghĩa một số thành phần cho biết trước các thông tin này để cho phép các client truy tìm và nhận lại những thông tin yêu cầu sử dụng web services.

Cấu trúc UDDI :

Cấu trúc UDDI gồm các thành phần :

- Trang trắng -White pages : chứa thông tin liên hệ và các định dạng chính yếu của web services , chẳng hạn tên giao dịch , địa chỉ ,… Những thông tin này cho phép các đối tượng khác xác định được service.

- Trang vàng -Yellow pages : chứa thông tin mô tả web services theo những chủng loại khác nhau .Những thông tin này cho phép các đối tượng thấy web services theo từng chủng loại của nó.

- Trang xanh -Green pages: chứa thông tin kỹ thuật mô tả các hành vi và các chức năng của web services .Các đối tượng dựa vào đặc điểm của web services để tìm kiếm.- Loại dịch vụ - tModel : chứa các thông tin về loại dịch vụ sử dụng.Những UDDI registry hiện có :

- UDDI Business Registry: bộ đăng ký được bảo trì bởi Microsoft, IBM đặc điểm của bộ đăng ký này là nó phân tán về mặt vật lý.

- IBM Test Registry: bộ đăng ký cho những ngư­ời phát triển để thử nghiệm công nghệ và kiểm tra những service của họ.

- Private registries IBM ships: bộ đăng ký UDDI cá nhân.

SOAP - Simple Object Accesss Protocol

Đến đây chúng ta đã hiểu được web services là như thế nào , nó được công bố và truy xuất ở đâu.Nhưng chúng ta vẫn còn một vấn đề khá quan trọng đó là : làm thế nào chúng ta truy xuất dịch vụ khi tìm thấy ? Câu trả lời là web servicves có thể truy xuất bằng một giao thức là Simple Object Access Protocol – SOAP . Nói cách khác chúng ta có thể truy xuất đến UDDI registry bằng các lệnh gọi hoàn toàn theo kiểu SOAP.SOAP là một giao thức giao tiếp có cấu trúc như XML và mã hóa thành định dạng chung cho các ứng dụng trao đổi với nhau .Ý tưởng bắt đầu từ Microsoft và phần mềm Userland , trải qua nhiều lần thay đổi , hiện tại là phiên bản SOAP 1.2 với nhiều ưu điểm vuợt trội hơn bản SOAP 1.1. SOAP được xem như là cấu trúc xương sống của các ứng dụng phân tán xây dựng từ nhiều ngôn ngữ , hệ điều hành khác nhau.Đặc trưng SOAP

SOAP có những đặc trư­ng sau :

- SOAP đư­ợc thiết kế đơn giản và dễ mở rộng.

- Tất cả các message SOAP đều đư­ợc mã hóa sử dụng XML.

- SOAP sử dùng giao thức truyền dữ liệu riêng.

- Không có garbage collection phân tán , và cũng không có cơ chế tham chiếu.Vì thế SOAP client không giữ bất kỳ một tham chiếu đầy đủ nào về các đối tượng ở xa.- SOAP không bị ràng buộc bởi bất kỳ ngôn ngữ lập trình nào hoặc công nghệ nào.Vì những đặc trư­ng này, nó không quan tâm đến công nghệ gì đư­ợc sử dụng để thực hiện miễn là người dùng sử dụng các message theo định dạng XML. T­ương tự, service có thể đư­ợc thực hiện trong bất kỳ ngôn ngữ nào, miễn là nó có thể xử lý được những message theo định dạng XML.

Cấu trúc một message theo dạng SOAP

Cấu trúc một message theo dạng SOAP được mô tả như hình dưới đây:

Cấu trúc message SOAP

Message theo dạng SOAP là một văn bản XML bình thường bao gồm các phần tử sau:- Phần tử gốc - envelop : phần từ bao trùm nội dung message , khai báo văn bản XML như là một thông điệp SOAP.

- Phần tử đầu trang – header : chứa các thông tin tiêu đề cho trang , phần tử này không bắt buộc khai báo trong văn bản .Những đầu mục còn có thể mang những dữ liệu chứng thực, những chữ ký số hóa, và thông tin mã hóa, hoặc những cài đặt cho giao tác.

- Phần tử khai báo nội dung chính trong thông điệp - body , chứa các thông tin yêu cầu và phản hồi.

- Phần tử phát sinh lỗi (Fault) cung cấp thông tin lỗi xảy ra trong qúa trình xử lý thông điệp.

Trong trường hợp đơn giản nhất, phần thân của SOAP message gồm có:

- Tên của message

- Một tham khảo tới một thể hiện service.

- Một hoặc nhiều tham số mang các giá trị và mang các tham chiếu. Có 3 kiểu thông báo:

+ Request messages : với các tham số gọi thực thi một service

+ Response messages với các tham số trả về, đư­ợc sử dụng khi đáp ứng yêu cầu.+ Fault messages báo tình trạng lỗi.

Những kiểu truyền thông

SOAP hỗ trợ hai kiểu truyền thông khác nhau :

- Remote procedure call (RPC): cho phép gọi hàm hoặc thủ tục qua mạng. Kiểu này đư­ợc khai thác bởi nhiều web service và có nhiều trợ giúp.

- Document: đư­ợc biết nh­ư kiểu hư­ớng message : kiểu này cung cấp một lớp thấp của sự trừu tư­ợng hóa, và yêu cầu người lập trình nhiều hơn khi làm việc.

Các định dạng message, tham số, và lời gọi đến các API thì tương ứng trong RPC và document là khác nhau. Nên việc quyết định chọn cái nào tùy thuộc vào thời gian xây dựng và sự phù hợp của service cần xây dựng.

Mô hình dữ liệu

Mục đích của mô hình dữ liệu SOAP là cung cấp những một sự trừu tư­ợng hóa độc lập ngôn ngữ cho kiểu ngôn ngữ lập trình chung. Nó gồm có :

- Những kiểu XSD đơn giản như những kiểu dữ liệu cơ bản trong đa số các ngôn ngữ lập trình như­ int, string, date, …

- Những kiểu phức tạp, có hai loại là struct và array.

Tất cả các phần tử và những định danh có trong mô hình dữ liệu SOAP thì được định nghĩa bằng namespace SOAP-ENC

Mã hóa

Trong những môi trư­ờng tính toán phân tán, mã hóa định nghĩa làm sao giá trị của dữ liệu trong ứng dụng có thể đư­ợc dịch từ khuôn dạng nghi thức. Khuôn dạng nghi thức cho những web service là XML, giả sử ở đây chúng ta giả thiết rằng service requestor và service provider phát triển trong Java. Vì vậy, mã hóa SOAP là trong môi trường thực thi để làm thế nào chuyển đổi từ cấu trúc dữ liệu Java sang SOAP XML và ngược lại. Một ánh xạ định nghĩa là mối quan hệ giữa một phần tử XML, một lớp Java, và một trong những loại mã hóa giới thiệu ở trên.

Một ánh xạ chỉ rõ làm cách nào, để khi đã mã hóa mà một phần tử XML đầu vào vẫn chuyển đổi được tới một lớp Java và ngư­ợc lại.Chúng ta quan tâm tới hai phư­ơng h­ướng ánh xạ là XML tới Java và Java tới XML. Bất kỳ môi trư­ờng thực thi SOAP nào cũng phải có một bảng chứa những mục ánh xạ, gọi là SOAPMappingRegistry.Nếu một kiểu dữ liệu đư­ợc giả thiết sẽ đư­ợc sử dụng dư­ới một loại mã hóa nhất định, thì một ánh xạ tương ứng phải tồn tại trong bộ đăng ký (registry) của môi trường thực thi SOAP đó. Đa số các kiểu Java chuẩn cũng như­ JavaBeans đều mặc định là được hỗ trợ.

Những kiểu dữ liệu không chuẩn (do tự định nghĩa) thì cần ánh xạ trên cả server và client.

Để tạo một web service chúng ta cần xây dựng các tầng cần thiết trong kiến trúc web service hay nói cách khác là xây dựng và thiết lập các thành phần trong các tầng đó , cụ thể là các thành phần SOAP , WSDL , UDDI , XML, trong đó:

- SOAP là giao thức nằm giữa tầng vận chuyển và tầng mô tả thông tin về dịch vụ, SOAP cho phép người dùng triệu gọi một service từ xa thông qua một message XML.

- WSDL là một ngôn ngữ mô tả giao tiếp và thực thi dựa trên XML. Web service sử dụng ngôn ngữ WSDL để truyền các tham số và các loại dữ liệu cho các thao tác , các chức năng mà web service cung cấp.

- UDDI dùng cho cả người dùng và ̣ SOAP server, nó cho phép đăng ký dịch vụ để người dùng có thể gọi thực thi các hàm , các chức năng của web service hay nói cách khác một service cần phải được đăng ký để cho phép các client có thể gọi thực hiện

- Bên cạnh đó chúng ta cũng phải quan tâm đến việc làm sao để cho các service có tính an toàn , toàn vẹn và bảo mật thông tin trong web services nhất là các service liên quan đến giao dịch thương mại và tài chính.Chúng ta sẽ tìm hiểu nội dung này trong các phần tiếp theo.

Sơ đồ dưới đây cho chúng ta thấy rõ hơn về các thành phần cần thiết trong một web service và mối quan hệ giữa các thành phần

Các thành phần cần thiết trong một web service và mối quan hệ giữa các thành phần

0