Hướng dẫn sử dụng dịch vụ web SOAP: Giao thức SOAP là gì? THÍ DỤ

Mục lục:

Anonim

SOAP là gì?

SOAP là một giao thức dựa trên XML để truy cập các dịch vụ web qua HTTP. Nó có một số đặc điểm kỹ thuật có thể được sử dụng trên tất cả các ứng dụng.

SOAP được gọi là Giao thức truy cập đối tượng đơn giản, nhưng trong thời gian sau đó chỉ được rút ngắn thành SOAP v1.2. SOAP là một giao thức hay nói cách khác là một định nghĩa về cách các dịch vụ web nói chuyện với nhau hoặc nói chuyện với các ứng dụng khách gọi chúng.

SOAP được phát triển như một ngôn ngữ trung gian để các ứng dụng được xây dựng trên các ngôn ngữ lập trình khác nhau có thể giao tiếp dễ dàng với nhau và tránh được các nỗ lực phát triển quá lớn.

Trong hướng dẫn dịch vụ Web SOAP này, bạn sẽ học-

  • Giới thiệu SOAP
  • Ưu điểm của SOAP
  • SOAP khối xây dựng
  • Cấu trúc thông báo SOAP
  • Phần tử phong bì SOAP
  • Mô hình giao tiếp SOAP
  • Ví dụ SOAP thực tế

Giới thiệu SOAP

Trong thế giới ngày nay, có rất nhiều ứng dụng được xây dựng trên các ngôn ngữ lập trình khác nhau. Ví dụ: có thể có một ứng dụng web được thiết kế bằng Java, một ứng dụng khác trong .Net và một ứng dụng khác trong PHP.

Trao đổi dữ liệu giữa các ứng dụng là rất quan trọng trong thế giới mạng ngày nay. Nhưng việc trao đổi dữ liệu giữa các ứng dụng không đồng nhất này sẽ rất phức tạp. Vì vậy, sẽ là sự phức tạp của mã để thực hiện trao đổi dữ liệu này.

Một trong những phương pháp được sử dụng để chống lại sự phức tạp này là sử dụng XML (Ngôn ngữ đánh dấu mở rộng) làm ngôn ngữ trung gian để trao đổi dữ liệu giữa các ứng dụng.

Mọi ngôn ngữ lập trình đều có thể hiểu ngôn ngữ đánh dấu XML. Do đó, XML được sử dụng làm phương tiện cơ bản để trao đổi dữ liệu.

Nhưng không có thông số kỹ thuật tiêu chuẩn nào về việc sử dụng XML trên tất cả các ngôn ngữ lập trình để trao đổi dữ liệu. Đó là lúc phần mềm SOAP xuất hiện.

SOAP được thiết kế để làm việc với XML qua HTTP và có một số loại đặc điểm kỹ thuật có thể được sử dụng trên tất cả các ứng dụng. Chúng ta sẽ xem xét chi tiết hơn về giao thức SOAP trong các chương tiếp theo.

Ưu điểm của SOAP

SOAP là giao thức được sử dụng để trao đổi dữ liệu giữa các ứng dụng. Dưới đây là một số lý do tại sao SOAP được sử dụng.

  • Khi phát triển các dịch vụ Web dựa trên SOAP, bạn cần phải có một số ngôn ngữ có thể được sử dụng cho các dịch vụ web để nói chuyện với các ứng dụng khách. SOAP là phương tiện hoàn hảo được phát triển để đạt được mục đích này. Giao thức này cũng được khuyến nghị bởi tập đoàn W3C, cơ quan quản lý cho tất cả các tiêu chuẩn web.
  • SOAP là một giao thức nhẹ được sử dụng để trao đổi dữ liệu giữa các ứng dụng. Lưu ý từ khóa ' ánh sáng .' Vì lập trình SOAP dựa trên ngôn ngữ XML, bản thân nó là một ngôn ngữ trao đổi dữ liệu trọng lượng nhẹ, do đó SOAP như một giao thức cũng thuộc cùng loại.
  • SOAP được thiết kế để độc lập với nền tảng và cũng được thiết kế để độc lập với hệ điều hành. Vì vậy, giao thức SOAP có thể hoạt động bất kỳ ứng dụng dựa trên ngôn ngữ lập trình nào trên cả nền tảng Windows và Linux.
  • Nó hoạt động trên giao thức HTTP -SOAP hoạt động trên giao thức HTTP, là giao thức mặc định được sử dụng bởi tất cả các ứng dụng web. Do đó, không có loại tùy chỉnh nào được yêu cầu để chạy các dịch vụ web được xây dựng trên giao thức SOAP để hoạt động trên World Wide Web.

Khối xây dựng SOAP

Đặc tả SOAP định nghĩa một thứ được gọi là " thông báo SOAP ", là thứ được gửi đến dịch vụ web và ứng dụng khách.

Sơ đồ kiến ​​trúc SOAP dưới đây cho thấy các khối xây dựng khác nhau của Thông điệp SOAP.

Khối xây dựng tin nhắn SOAP

Thông báo SOAP không là gì ngoài một tài liệu XML đơn thuần có các thành phần bên dưới.

  • Phần tử Envelope xác định tài liệu XML dưới dạng thông báo SOAP - Đây là phần chứa thông báo SOAP và được sử dụng để đóng gói tất cả các chi tiết trong thông báo SOAP. Đây là phần tử gốc trong thông báo SOAP.
  • Phần tử Header chứa thông tin tiêu đề - Phần tử tiêu đề có thể chứa thông tin như thông tin xác thực có thể được sử dụng bởi ứng dụng gọi. Nó cũng có thể chứa định nghĩa của các kiểu phức tạp có thể được sử dụng trong thông báo SOAP. Theo mặc định, thông báo SOAP có thể chứa các tham số có thể là các kiểu đơn giản như chuỗi và số, nhưng cũng có thể là một kiểu đối tượng phức tạp.

Dưới đây là một ví dụ về dịch vụ SOAP đơn giản của một kiểu phức tạp.

Giả sử chúng ta muốn gửi một kiểu dữ liệu có cấu trúc có sự kết hợp của "Tên hướng dẫn" và "Mô tả hướng dẫn", thì chúng ta sẽ xác định kiểu phức tạp như hình dưới đây.

Kiểu phức tạp được xác định bởi thẻ phần tử . Tất cả các phần tử bắt buộc của cấu trúc cùng với các kiểu dữ liệu tương ứng của chúng sau đó được xác định trong bộ sưu tập kiểu phức hợp.

  • Phần tử Body chứa thông tin cuộc gọi và phản hồi - Phần tử này là phần tử chứa dữ liệu thực tế cần được gửi giữa dịch vụ web và ứng dụng gọi điện. Dưới đây là một ví dụ về dịch vụ web SOAP của phần thân SOAP thực sự hoạt động trên kiểu phức tạp được xác định trong phần tiêu đề. Đây là phản hồi của Tên Hướng dẫn và Mô tả Hướng dẫn được gửi đến ứng dụng gọi điện gọi dịch vụ web này.
Web ServicesAll about web services

Cấu trúc thông báo SOAP

Một điều cần lưu ý là thông báo SOAP thường được dịch vụ web tự động tạo khi nó được gọi.

Bất cứ khi nào ứng dụng khách gọi một phương thức trong dịch vụ web, dịch vụ web sẽ tự động tạo một thông báo SOAP có thông tin chi tiết cần thiết về dữ liệu sẽ được gửi từ dịch vụ web đến ứng dụng khách.

Như đã thảo luận trong chủ đề trước của hướng dẫn SOAP này, một Thông báo SOAP đơn giản có các yếu tố sau:

  • Phần tử phong bì
  • Phần tử tiêu đề và
  • Thành phần cơ thể
  • Phần tử lỗi (Tùy chọn)

Hãy xem ví dụ dưới đây về một thông báo SOAP đơn giản và xem phần tử nào thực sự hoạt động.

Cấu trúc thông báo SOAP
  1. Như đã thấy từ bản tin SOAP ở trên, phần đầu tiên của bản tin SOAP là phần tử phong bì được sử dụng để đóng gói toàn bộ bản tin SOAP.
  2. Phần tử tiếp theo là phần nội dung SOAP chứa các chi tiết của thông báo thực tế.
  3. Thông báo của chúng tôi chứa một dịch vụ web có tên là "Guru99WebService".
  4. "Guru99Webservice" chấp nhận một tham số kiểu 'int' và có tên là TutorialID.

Bây giờ, thông báo SOAP ở trên sẽ được chuyển giữa dịch vụ web và ứng dụng khách.

Bạn có thể thấy thông tin trên hữu ích như thế nào đối với ứng dụng khách. Thông báo SOAP cho ứng dụng khách biết tên của dịch vụ Web là gì, cũng như các tham số mà nó mong đợi và cũng là loại của từng tham số được dịch vụ web sử dụng.

Phần tử phong bì SOAP

Bit đầu tiên của khối xây dựng là SOAP Envelope.

SOAP Envelope được sử dụng để đóng gói tất cả các chi tiết cần thiết của thông báo SOAP, được trao đổi giữa dịch vụ web và ứng dụng khách.

Phần tử phong bì SOAP được sử dụng để chỉ ra phần đầu và phần cuối của một bản tin SOAP. Điều này cho phép ứng dụng khách gọi dịch vụ web biết khi nào thông báo SOAP kết thúc.

Các điểm sau có thể được lưu ý trên phần tử bao bì SOAP.

  • Mọi thư SOAP cần phải có phần tử Envelope gốc. Thông điệp SOAP hoàn toàn bắt buộc phải có phần tử phong bì.
  • Mỗi phần tử Envelope cần có ít nhất một phần tử thân xà phòng.
  • Nếu một phần tử Envelope chứa phần tử tiêu đề, thì phần tử đó không được chứa nhiều hơn một phần tử và nó phải xuất hiện dưới dạng phần tử con đầu tiên của Envelope, trước phần tử body.
  • Phong bì thay đổi khi các phiên bản SOAP thay đổi.
  • Bộ xử lý SOAP tuân thủ v1.1 tạo ra lỗi khi nhận được thông báo có chứa vùng tên phong bì v1.2.
  • Bộ xử lý SOAP tuân thủ v1.2 tạo ra lỗi Phiên bản không khớp nếu nó nhận được thông báo không bao gồm không gian tên phong bì v1.2.

Dưới đây là ví dụ về API SOAP của phiên bản 1.2 của phần tử phong bì SOAP.

int

Thông báo lỗi

Khi một yêu cầu được thực hiện tới một dịch vụ web SOAP, phản hồi được trả về có thể có 2 dạng là phản hồi thành công hoặc phản hồi lỗi. Khi tạo thành công, phản hồi từ máy chủ sẽ luôn là thông báo SOAP. Nhưng nếu lỗi SOAP được tạo ra, chúng sẽ được trả về dưới dạng lỗi "HTTP 500".

Thông báo SOAP Fault bao gồm các yếu tố sau.

  1. - Đây là mã chỉ định mã của lỗi. Mã lỗi có thể là một trong các giá trị dưới đây
    1. SOAP-ENV: VersionMismatch - Đây là khi gặp phải không gian tên không hợp lệ cho phần tử SOAP Envelope.
    2. SOAP-ENV: Phải hiểu - Phần tử con ngay lập tức của phần tử Tiêu đề, với thuộc tính mustUnd hieu được đặt thành "1", không được hiểu.
    3. SOAP-ENV: Máy khách - Thông báo được tạo không chính xác hoặc chứa thông tin không chính xác.
    4. SOAP-ENV: Máy chủ - Đã xảy ra sự cố với máy chủ nên không thể tiếp tục thông báo.
  2. - Đây là tin nhắn văn bản mô tả chi tiết về lỗi.
  3. (Tùy chọn) - Đây là một chuỗi văn bản cho biết ai đã gây ra lỗi.
  4. (Tùy chọn) - Đây là phần tử dành cho các thông báo lỗi dành riêng cho ứng dụng. Vì vậy, ứng dụng có thể có một thông báo lỗi cụ thể cho các tình huống logic nghiệp vụ khác nhau.

Ví dụ cho thông báo lỗi

Dưới đây là một ví dụ về thông báo lỗi. Lỗi được tạo ra nếu tình huống trong đó máy khách cố gắng sử dụng một phương pháp có tên là TutorialID trong lớp GetTutorial.

Thông báo lỗi dưới đây được tạo ra trong trường hợp phương thức không tồn tại trong lớp đã xác định.

SOAP-ENV:ClientFailed to locate method (GetTutorialID) in class (GetTutorial)

Đầu ra:

Khi bạn thực thi đoạn mã trên, nó sẽ hiển thị lỗi như "Không xác định được phương thức (GetTutorialID) trong lớp (GetTutorial)"

Mô hình giao tiếp SOAP

Tất cả giao tiếp bằng SOAP được thực hiện thông qua giao thức HTTP. Trước SOAP, rất nhiều dịch vụ web đã sử dụng kiểu RPC (Gọi thủ tục từ xa) tiêu chuẩn để giao tiếp. Đây là kiểu giao tiếp đơn giản nhất, nhưng nó có rất nhiều hạn chế.

Bây giờ trong hướng dẫn về API SOAP này, chúng ta hãy xem xét sơ đồ dưới đây để xem cách giao tiếp này hoạt động như thế nào. Trong ví dụ này, giả sử máy chủ lưu trữ một dịch vụ web cung cấp 2 phương thức như

  • GetE Employee - Điều này sẽ nhận được tất cả thông tin chi tiết về Nhân viên
  • SetE Employee - Điều này sẽ đặt giá trị của các chi tiết như nhân viên nợ, lương, v.v. cho phù hợp.

Trong giao tiếp kiểu RPC thông thường, máy khách sẽ chỉ gọi các phương thức trong yêu cầu của nó và gửi các tham số cần thiết đến máy chủ, sau đó máy chủ sẽ gửi phản hồi mong muốn.

Mô hình giao tiếp trên có những hạn chế nghiêm trọng dưới đây

  1. Không độc lập với ngôn ngữ - Máy chủ lưu trữ các phương thức sẽ bằng một ngôn ngữ lập trình cụ thể và thông thường các lệnh gọi đến máy chủ sẽ chỉ bằng ngôn ngữ lập trình đó.
  2. Không phải là giao thức chuẩn - Khi một cuộc gọi được thực hiện tới thủ tục từ xa, cuộc gọi không được thực hiện qua giao thức chuẩn. Đây là một vấn đề vì hầu hết tất cả giao tiếp trên web phải được thực hiện thông qua giao thức HTTP.
  3. Tường lửa - Vì các cuộc gọi RPC không đi qua giao thức thông thường, các cổng riêng biệt cần được mở trên máy chủ để cho phép máy khách giao tiếp với máy chủ. Thông thường, tất cả các tường lửa sẽ chặn loại lưu lượng này và nói chung cần phải có rất nhiều cấu hình để đảm bảo rằng loại giao tiếp này giữa máy khách và máy chủ sẽ hoạt động.

Để khắc phục tất cả các hạn chế được nêu ở trên, SOAP sau đó sẽ sử dụng mô hình giao tiếp bên dưới

  1. Máy khách sẽ định dạng thông tin liên quan đến lệnh gọi thủ tục và bất kỳ đối số nào thành thông báo SOAP và gửi nó đến máy chủ như một phần của yêu cầu HTTP. Quá trình đóng gói dữ liệu vào một thông điệp SOAP được gọi là Marshalling.
  2. Sau đó, máy chủ sẽ mở gói thông báo do máy khách gửi, xem máy khách yêu cầu gì và sau đó gửi phản hồi thích hợp trở lại máy khách dưới dạng thông báo SOAP. Thực hành mở gói một yêu cầu do khách hàng gửi được gọi là Demarshalling.

Ví dụ SOAP thực tế

Bây giờ trong hướng dẫn SoapUI này, chúng ta hãy xem một ví dụ SOAP thực tế,

Có lẽ một trong những cách tốt nhất để xem cách các thông điệp SOAP được tạo là thực sự thấy một dịch vụ web đang hoạt động.

Chủ đề này sẽ xem xét việc sử dụng khuôn khổ Microsoft.Net để xây dựng một dịch vụ web ASMX. Loại dịch vụ web này hỗ trợ cả phiên bản SOAP 1.1 và phiên bản 1.2.

Các dịch vụ web ASMX tự động tạo tài liệu Ngôn ngữ Định nghĩa Dịch vụ Web (WSDL). Tài liệu WSDL này được yêu cầu bởi ứng dụng khách đang gọi để ứng dụng biết dịch vụ web có khả năng thực hiện những gì.

Trong ví dụ của chúng tôi, chúng tôi sẽ tạo một dịch vụ web đơn giản, dịch vụ này sẽ được sử dụng để trả về một chuỗi cho ứng dụng gọi dịch vụ web.

Dịch vụ web này sẽ được lưu trữ trong một ứng dụng web Asp.Net. Sau đó, chúng tôi sẽ gọi dịch vụ web và xem kết quả được trả về bởi dịch vụ web.

Visual Studio cũng sẽ cho chúng ta thấy thông điệp SOAP đang được chuyển giữa dịch vụ web và ứng dụng gọi điện.

Điều kiện tiên quyết đầu tiên để thiết lập ứng dụng dịch vụ Web của chúng tôi có thể được thực hiện bằng cách làm theo các bước dưới đây.

Hãy đảm bảo rằng bạn đã cài đặt Visual Studio 2013 trên hệ thống của mình cho ví dụ này.

Bước 1) Bước đầu tiên là tạo một ứng dụng Web ASP.Net trống. Từ Visual Studio 2013, bấm vào tùy chọn menu Tệp-> Dự án mới.

Khi bạn nhấp vào tùy chọn Dự án Mới, Visual Studio sau đó sẽ cung cấp cho bạn một hộp thoại khác để chọn loại dự án và cung cấp các chi tiết cần thiết của dự án. Điều này được giải thích trong bước tiếp theo.

Bước 2) Trong bước này,

  1. Đảm bảo trước tiên chọn mẫu web C # của ứng dụng Web ASP.NET. Dự án phải thuộc loại này để tạo ra dự án dịch vụ SOAP. Bằng cách chọn tùy chọn này, Visual Studio sau đó sẽ thực hiện các bước cần thiết để thêm các tệp cần thiết được yêu cầu bởi bất kỳ ứng dụng dựa trên web nào.
  2. Đặt tên cho dự án của bạn mà trong trường hợp của chúng tôi là webservice.asmx. Sau đó, đảm bảo cung cấp một vị trí nơi các tệp dự án sẽ được lưu trữ.

Sau khi hoàn tất, bạn sẽ thấy tệp dự án được tạo trong trình khám phá giải pháp của bạn trong Visual Studio 2013.

Bước 3) Trong bước này,

Chúng tôi sẽ thêm một tệp dịch vụ Web vào dự án của chúng tôi

  1. Đầu tiên, nhấp chuột phải vào tệp dự án như hình dưới đây

  1. Khi bạn nhấp chuột phải vào tệp dự án, bạn có cơ hội chọn tùy chọn "Thêm-> Dịch vụ Web (ASMX) để thêm tệp dịch vụ web. Chỉ cần cung cấp tên Dịch vụ Hướng dẫn cho tệp tên dịch vụ web.

Bước 4) Thêm mã sau vào tệp asmx Dịch vụ Hướng dẫn của bạn.

Giải thích mã:

  1. Dòng mã này cung cấp tên cho tệp dịch vụ web của bạn. Đây là một bước quan trọng vì nó nhường chỗ cho ứng dụng khách gọi dịch vụ web thông qua tên của dịch vụ web.
  2. Thông thường, một tệp lớp được sử dụng để đóng gói chức năng của một dịch vụ web. Vì vậy, tệp lớp sẽ có định nghĩa của tất cả các phương thức web sẽ cung cấp một số chức năng cho ứng dụng khách.
  3. Ở đây [WebMethod] được biết đến như một thuộc tính mô tả một chức năng. Bước tiếp theo tạo ra một hàm có tên là "Guru99WebService", nhưng với bước này là thêm thuộc tính [WebMethod] đảm bảo rằng ứng dụng khách có thể gọi phương thức này. Nếu thuộc tính này không ở đúng vị trí, thì ứng dụng khách không bao giờ có thể gọi phương thức được.
  4. Ở đây chúng tôi đang định nghĩa một hàm có tên là 'Guru99WebService' sẽ được sử dụng để trả về một chuỗi cho ứng dụng khách đang gọi. Chức năng này là một dịch vụ web có thể được gọi bởi bất kỳ ứng dụng khách nào.
  5. Chúng tôi đang sử dụng câu lệnh return để trả về chuỗi "Đây là dịch vụ Web Guru99" cho ứng dụng khách.

Nếu mã được thực thi thành công, Đầu ra sau đây sẽ được hiển thị khi bạn chạy mã của mình trong trình duyệt.

Đầu ra:

  • Kết quả hiển thị rõ ràng rằng tên dịch vụ web của chúng tôi là "Dịch vụ web Guru99", đây là kết quả của việc đặt tên cho dịch vụ web của chúng tôi.
  • Chúng tôi cũng có thể thấy rằng chúng tôi có thể gọi dịch vụ web. Nếu chúng tôi nhấp vào nút Gọi, chúng tôi sẽ nhận được phản hồi bên dưới trong trình duyệt web.

Kết quả trên,

  • Nó cho thấy rõ ràng rằng bằng cách gọi phương thức web, chuỗi "Đây là một dịch vụ Web Guru99" được trả về.
  • Visual Studio cũng cho phép bạn xem yêu cầu và phản hồi thông báo SOAP được tạo ra khi dịch vụ web ở trên được gọi.

Yêu cầu SOAP được tạo khi dịch vụ web được gọi được hiển thị bên dưới.

Giải thích mã:

  1. Phần đầu tiên của thông điệp SOAP là phần tử bao thư, đây là phần đã được thảo luận trong các chương trước. Đây là phần tử đóng gói có trong mọi thông báo SOAP.
  2. Phần thân SOAP là phần tử tiếp theo và chứa các chi tiết thực tế của thông báo SOAP.
  3. Phần thứ ba là phần tử chỉ định rằng chúng tôi muốn gọi dịch vụ được gọi là 'Guru99WebService.'

string

Giải thích mã:

  1. Phần đầu tiên của thông điệp SOAP là phần tử bao thư, đây là phần đã được thảo luận trong các chương trước. Đây là phần tử đóng gói có trong mọi thông báo SOAP.
  2. Phần thân SOAP là phần tử tiếp theo và chứa các chi tiết thực tế của thông báo SOAP.
  3. Phần thú vị mà bạn sẽ thấy bây giờ là thuộc tính 'string'. Điều này cho ứng dụng khách biết rằng dịch vụ web đang được gọi trả về một đối tượng của chuỗi kiểu. Điều này rất hữu ích vì nếu ứng dụng khách không biết dịch vụ web trả về là gì.

Tóm lược

  • SOAP là một giao thức được sử dụng để trao đổi dữ liệu giữa các ứng dụng được xây dựng trên các ngôn ngữ lập trình khác nhau.
  • SOAP được xây dựng dựa trên đặc tả XML và hoạt động với giao thức HTTP. Điều này làm cho nó trở nên hoàn hảo để sử dụng trong các ứng dụng web.
  • Các khối xây dựng SOAP bao gồm một Thông điệp SOAP. Mỗi thông báo SOAP bao gồm một phần tử phong bì, một phần đầu và một phần tử nội dung.
  • Phần tử phong bì là phần tử bắt buộc trong thông báo SOAP và được sử dụng để đóng gói tất cả dữ liệu trong thông báo SOAP.
  • Phần tử tiêu đề có thể được sử dụng để chứa thông tin như thông tin xác thực hoặc định nghĩa của các kiểu dữ liệu phức tạp.
  • Phần tử body là phần tử chính chứa định nghĩa của các phương thức web cùng với bất kỳ thông tin tham số nào nếu được yêu cầu.