Giao thức truy cập đối tượng đơn giản SOAP

Một phần của tài liệu ỨNG DỤNG KIẾN TRÚC HƯỚNG DỊCH VỤ VÀ CÔNG NGHỆ DỊCH VỤ MẠNG TRONG XÂY DỰNG PHẦN MỀM (Trang 49 - 54)

2. Các chuẩn cho dịch vụ mạng

2.2. Giao thức truy cập đối tượng đơn giản SOAP

Giao thức truy cập đối tượng đơn giản SOAP là giao thức dựa trên chuẩn XML để truyền tải thông tin trong một môi trường phân tán. Khi SOAP được mô tả như một chuẩn truyền thông, hầu hết mọi người nghĩ đến DCOM hay CORBA và bắt đầu đặt các câu hỏi như: “SOAP thực hiện việc kích hoạt đối tượng như thế nào?” hay “SOAP sử dụng dịch vụ đặt tên nào?”. Trong khi một cài đặt SOAP cụ thể sẽ có thể bao gồm những điều này, bản thân chuẩn SOAP không xác định chúng. SOAP là một đặc tả nhằm xác định một vỏ bao (envelope) dựa trên chuẩn XML cho thông tin cần truyền tải, và một tập các quy tắc cho việc dịch ứng dụng và các kiểu dữ liệu của một nền tảng cụ thể thành dạng XML. Các thiết kế SOAP làm cho nó thích hợp với rất nhiều các ứng dụng thông điệp và tích hợp các mẫu (pattern).

Cách SOAP được sử dụng trong dịch vụ mạng là:

• Thành phần sử dụng dịch vụ sử dụng tài liệu XML phù hợp với đặc tả SOAP và chứa yêu cầu dịch vụ.

• Dịch vụ mạng nhận thông điệp SOAP và gửi thông điệp như một lời gọi dịch vụ tới ứng dụng cung cấp dịch vụ được yêu cầu.

• Đáp ứng từ dịch vụ được trả về cho SOAP server và thông điệp này sẽ được gửi trả thành phần yêu cầu dịch vụ nhờ giao thức SOAP.

SOAP và XML

SOAP là một ứng dụng của đặc tả XML. Các định nghĩa và hàm của SOAP chủ yếu dựa trên các chuẩn XML như lược đồ XML và không gian tên XML.

Tất cả các thông điệp SOAP đều được mã hoá bằng XML. Một ứng dụng SOAP cần bao gồm không gian tên SOAP phù hợp trên tất cả các phần tử và thuộc tính được định nghĩa bởi SOAP trong các thông điệp mà nó sinh ra. Một ứng dụng SOAP phải có khả năng xử lý các không gian tên SOAP trong các thông điệp nhận được. Nó phải huỷ bỏ các thông điệp chứa các không gian tên không đúng và nó có thể xử lý các thông điệp SOAP không cần các không gian tên SOAP mặc dù chúng có các không gian tên đúng.

Thông điệp SOAP

Một thông điệp SOAP bao gồm một vỏ bao chứa một phần đầu (header) tuỳ chọn và một phần thân (body) bắt buộc. Phần đầu chứa các khối thông tin chỉ ra cách thức thông điệp được xử lý, bao gồm các thiết lập chọn đường và phân phối, các khẳng định sự xác thực hoặc bản quyền, và các ngữ cảnh giao dịch. Phần thân chứa thông điệp thực sự được gửi đi và được xử lý. Bất cứ cái gì có thể biểu diễn bằng cú pháp XML đều có thể chứa trong phần thân của thông điệp.

Hình 2.2: Cấu trúc thông điệp SOAP

Cú pháp XML để biểu diễn thông điệp SOAP dựa trên không gian tên

http://www.w3.org/2001/06/soap-envelope. Không gian tên này chỉ ra một lược đồ XML định nghĩa cấu trúc của một thông điệp SOAP.

<s:Envelope xmlns:s=''http://www.w3.org/200l/06/soap-envelope''> <s:Header> <m:transaction xmlns:m=''soap-transaction'' s:mustunderstand="true"> <transactionlD>1234</transactionID> </m:transaction> </s:Heater> <s:Body> <n:purchaseOrder xmlns:n=''urn:OrderService''> <from><person>Christogher Robin</person> <dept>Accounting</dept></from> <to><person>Pooh Bear</person> <dept>Honey</dept></to> <order><quantity>1<quantity> <item>Pooh Stick</item></order> </n:purchaseOrder> </s:Body> </s:Envelope>

Ví dụ này minh hoạ tất cả các thành phần cơ bản của đặc tả vỏ bao SOAP, trong đó:

<s:Envelope>: thành phần chứa ở mức cao nhất của thông điệp SOAP. <s:Header>: chứa các khối bổ sung thông tin về cách thức xử lý thông điệp. <s:Body>: phần tử chính chứa thông điệp thật sự cần được xử lý.

SOAP Fault (lỗi SOAP)

Lỗi SOAP là một loại thông điệp đặc biệt nhằm truyền tải thông tin về lỗi có thể xảy ra trong quá trình xử lý thông điệp SOAP.

Phần tử SOAP Fault được sử dụng để truyền thông tin trạng thái hoặc lỗi trong một thông điệp SOAP. Nếu có trong thông điệp, phần tử này phải xuất hiện như một điểm vào phần thân và không được xuất hiện quá một lần trong phần tử body.

Faultcode:

Phần tử faultcode được sử dụng bởi phần mềm để cung cấp một cơ chế toán học cho phép xác định lỗi. Faultcode phải có mặt trong một phần tử SOAP Fault. SOAP định nghĩa một tập nhỏ các mã lỗi SOAP cho các lỗi SOAP cơ bản.

Faultstring:

Phần tử faultstring cung cấp một giải thích lỗi mà người dùng có thể đọc được, không dùng để xử lý toán học.

Faultactor:

Phần tử faultactor cung cấp thông tin về người gây ra lỗi trong đường dẫn thông điệp. Nó tương tự như thuộc tính SOAP actor nhưng thay vì chỉ ra đích của điểm vào phần đầu, nó chỉ ra nguồn của lỗi. Giá trị của thuộc tính faultactor là một URI xác định nguồn gây ra lỗi. Các ứng dụng không phải là đích cuối cùng phải chứa phần tử faultactor trong phần tử SOAP Fault. Đích cuối cùng của thông điệp có thể sử dụng phần tử faultactor để chỉ ra nguồn gây lỗi một cách tường minh.

Detail:

Phần tử detail được dùng để truyền thông tin lỗi của ứng dụng cụ thể có liên quan đến phần thân. Nó phải có mặt nếu nội dung của phần thân có thể không được xử lý thành công. Nó không được sử dụng để mang thông tin về lỗi của phần đầu. Thông tin chi tiết về lỗi của điểm vào phần đầu phải được truyền trong các điểm vào của phần đầu.

Sự vắng mặt của phần tử detail trong phần tử Fault chỉ ra rằng lỗi không liên quan tới xử lý phần thân, do vậy, nó được dùng để xác định xem phần thân có được xử lý hay không trong trường hợp có lỗi xảy ra.

Tất cả các phần tử con trực tiếp của phần tử detail được gọi là các điểm vào cụ thể và mỗi điểm vào cụ thể được mã hoá như một phần tử độc lập trong phần tử detail.

Các quy tắc mã hoá cho các điểm vào cụ thể như sau:

Một điểm vào cụ thể được xác định bằng tên đầy đủ của phần tử, bao gồm không gian tên URI và tên địa phương. Thuộc tính encodingStyle có thể được sử dụng để chỉ ra cách mã hoá cho các điểm vào cụ thể.

Mô hình truyền thông điệp SOAP

SOAP hỗ trợ hai kiểu truyền thông điệp:

Lời gọi thủ tục từ xa (Remote Procedure Call - RPC): cho phép xử lý thông điệp dạng yêu cầu-đáp ứng, trong đó, đích nhận một thông điệp hướng thủ tục và trả lại một thông điệp đáp ứng.

Truyền tải thông tin hướng thông điệp: hỗ trợ các tổ chức và ứng dụng cần truyền tải nghiệp vụ hoặc các tài liệu khác, trong đó, một thông điệp được gửi nhưng người gửi không yêu cầu phải trả lời ngay.

Các thông điệp SOAP phần lớn được truyền theo kiểu một chiều từ người nhận đến người gửi. Các thông điệp SOAP thường được kết hợp để cài đặt các mẫu như request/response.

Các cài đặt SOAP có thể được tối ưu hoá để khai thác các đặc trưng của các hệ thống mạng cụ thể. Ví dụ, kết nối HTTP cho phép các thông điệp SOAP đáp ứng được truyền như các đáp ứng HTTP, sử dụng cùng một kết nối giống như thông điệp yêu cầu.

Không phụ thuộc vào giao thức mà SOAP bị ràng buộc, các thông điệp được định hướng dọc theo một “đường dẫn thông điệp” (message path), cho phép xử lý tại một hoặc nhiều nút trung gian ngoài đích cuối cùng.

Ứng dụng SOAP nhận thông điệp SOAP phải xử lý thông điệp đó bằng cách thực hiện các hành động sau theo thứ tự được liệt kê dưới đây:

1. Xác định tất cả các thành phần của thông điệp SOAP được chuyển tới cho ứng dụng dó.

2. Xác nhận rằng tất cả các thành phần cơ bản được xác định ở bước 1 được hỗ trợ bởi ứng dụng cho thông điệp này và xử lý chúng một cách thích hợp. Nếu không thì huỷ bỏ thông điệp. Bộ xử lý có thể bỏ qua các phần tuỳ chọn được xác định ở bước 1 mà không ảnh hưởng tới kết quả của quá trình xử lý.

3. Nếu ứng dụng SOAP không phải là đích cuối cùng của thông điệp thì xoá bỏ tất cả các phần được xác định trong bước một trước khi chuyển tiếp thông điệp.

Việc xử lý một thông điệp hoặc một phần của thông điệp yêu cầu bộ xả lý SOAP hiểu mẫu truyền tải được sử dụng (một chiều, yêu cầu/ đáp ứng, gửi đồng thời…), vai trò của người nhận trong mẫu đó, việc sử dụng các cơ chế RPC, biểu diễn hoặc mã hoã dữ liệu, cũng như các ngữ nghĩa cần thiết để xử lý đúng.

Mã hóa dữ liệu SOAP

SOAP định nghĩa các kiểu phù hợp với các mẫu cấu trúc sau thường được tìm thấy trong các ngôn ngữ lập trình:

Struct (cấu trúc):

Một cấu trúc là một giá trị phức hợp trong đó, tên các điểm truy cập là điểm khác biệt duy nhất giữa các giá trị thành viên, và không có điểm truy cập nào có cùng tên.

Một mảng là một giá trị phức hợp trong đó số thứ tự vị trí đóng vai trò phân biệt các giá trị thành viên.

SOAP cũng cho phép sự truyền theo thứ tự (serialization) của dữ liệu không phải là một cấu trúc hay một mảng, ví dụ, các dữ liệu trong mô hình “đồ thị được gán nhãn trực tiếp” trong đó mỗi đỉnh đơn có nhiều các điểm truy cập phân biệt, một vài trong số chúng lại có thể xuất hiện nhiều hơn một lần. Việc truyền theo thứ tự không cho phép các mô hình dữ liệu cơ sở tạo một sự phân biệt về thứ tự giữa các điểm truy cập, nhưng nếu một thứ tự như thế tồn tài, các điểm truy cập phải được mã hoá theo đúng trình tự đó.

Truyền tải SOAP

SOAP là một giao thức đóng gói chuẩn hoá được đặt trên cùng của các lớp mạng và vận tải. Giống như một giao thức đóng gói, SOAP không quan tâm các giao thức vận tải nào được sử dụng để trao đổi thông điệp, do đó, làm cho SOAP rất linh hoạt trong việc sử dụng.

Vì sự phát triển của HTTP trên Internet, giao thức này trở thành giao thức truyền thông chung để trao đổi các thông điệp SOAP.

Một phần của tài liệu ỨNG DỤNG KIẾN TRÚC HƯỚNG DỊCH VỤ VÀ CÔNG NGHỆ DỊCH VỤ MẠNG TRONG XÂY DỰNG PHẦN MỀM (Trang 49 - 54)

Tải bản đầy đủ (DOC)

(90 trang)
w