Rumah >pembangunan bahagian belakang >Golang >Bagaimana Golang melaksanakan proses SOAP

Bagaimana Golang melaksanakan proses SOAP

PHPz
PHPzasal
2023-04-05 10:29:521621semak imbas

Golang ialah bahasa pengaturcaraan yang sangat popular yang dibangunkan oleh Google dan disukai oleh pembangun kerana kecekapan tinggi dan prestasi cemerlangnya. Walaupun Golang digemari oleh ramai pembangun, terdapat sedikit panduan dan sumber untuk pembangun yang menggunakan Golang untuk melaksanakan SOAP. Dalam artikel ini, kami akan memperkenalkan proses bagaimana Golang melaksanakan SOAP.

Pertama, mari kita lihat SOAP secara ringkas. SOAP (Simple Object Access Protocol) ialah protokol berasaskan XML untuk bertukar-tukar maklumat antara aplikasi web. SOAP biasanya digunakan dengan WSDL (Web Services Description Language) dan UDDI (Universal Description, Discovery, and Integration). Perkhidmatan web biasanya terdiri daripada mesej permintaan dan respons menggunakan SOAP sebagai protokol untuk menghantar dan menerima data, dan fail WSDL yang mengandungi maklumat tentang perkhidmatan web yang tersedia.

Untuk melaksanakan SOAP di Golang, kita perlu menggunakan perpustakaan Go yang sepadan. Dua yang berikut popular pada masa ini:

  1. Go-SOAP: Pustaka yang agak baharu untuk menghuraikan dan membina protokol SOAP. Ia menyokong SOAP 1.1 dan SOAP 1.2 dan melaksanakan sebahagian daripada kontrak WSDL 1.1. Ia juga menyokong pengangkutan HTTP dan HTTPS, menggunakan klien HTTP lalai bahasa Go untuk permintaan API.
  2. Gosoap: Pustaka lama yang menyokong SOAP 1.1 dan SOAP 1.2 (piawaian tambahan), tetapi tidak menyokong WSDL. Ia juga menyokong pengangkutan HTTP dan HTTPS, menggunakan klien HTTP lalai bahasa Go untuk permintaan API.

Dalam artikel ini, kami akan memperkenalkan cara menggunakan perpustakaan Go-SOAP untuk melaksanakan protokol SOAP. Pertama, kami perlu menambah pakej sabun go pada projek Go kami. Ia boleh dipasang menggunakan arahan berikut:

go get -u github.com/tiaguinho/go-soap

Kemudian, kita perlu menentukan permintaan untuk perkhidmatan web SOAP. Permintaan akan dibina berdasarkan XML, berikut ialah contoh permintaan:

<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:yt="urn:youtube">
   <soapenv:Header/>
   <soapenv:Body>
      <yt:GetVideoInformation>
         <yt:VideoID>xxxxxxxxxxx</yt:VideoID>
      </yt:GetVideoInformation>
   </soapenv:Body>
</soapenv:Envelope>

Dalam contoh di atas, nama permintaan ialah GetVideoInformation dan nilai parameter ialah VideoID = xxxxxxxxxxxx.

Seterusnya, kita perlu mentakrifkan respons perkhidmatan Web SOAP, yang juga dalam format XML Berikut adalah contoh respons:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:yt="urn:youtube">
   <soapenv:Header/>
   <soapenv:Body>
      <yt:GetVideoInformationResponse>
         <yt:Title>Title of the Video</yt:Title>
         <yt:Description>Multiline Description</yt:Description>
      </yt:GetVideoInformationResponse>
   </soapenv:Body>
</soapenv:Envelope>

Dalam struktur, anda perlu. sertakan alamat perkhidmatan Web SOAP, Nama Fungsi, permintaan dan format respons. Berikut ialah contoh kod:

import (
  "net/url"
  "github.com/tiaguinho/go-soap"
)

// SOAP 请求体
type GetVideoInformationRequestEnvelope struct {
  SOAPEnv string `xml:"xmlns:soapenv,attr"`
  XSI    string `xml:"xmlns:xsi,attr"`
  Yt     string `xml:"xmlns:yt,attr"`
  Body   GetVideoInformationRequestBody
}

// SOAP 请求部分
type GetVideoInformationRequestBody struct {
  GetVideoInformation YoutubeRequest
}

// Youtube Request
type YoutubeRequest struct {
  VideoID string
}

// SOAP 响应体
type GetVideoInformationResponseEnvelope struct {
  SOAPEnv string `xml:"xmlns:soapenv,attr"`
  Yt     string `xml:"xmlns:yt,attr"`
  Body   GetVideoInformationResponseBody
}

// SOAP 响应部分
type GetVideoInformationResponseBody struct {
  GetVideoInformationResponse YoutubeResponse
}

// Youtube Response
type YoutubeResponse struct {
  Title       string `xml:"Title"`
  Description string `xml:"Description"`
}

func main() {
  // 服务地址
  soapURL, _ := url.Parse("http://example.com/soap")
  soapClient := soap.NewClient(soapURL)

  // 函数名称
  soapRequest, err := soapClient.NewRequest("http://www.youtube.com", "GetVideoInformation")
  if err != nil {
    log.Fatalln(err)
  }

  // 填写请求信息
  soapRequest.Body = &GetVideoInformationRequestEnvelope{
    XSI:    "http://www.w3.org/2001/XMLSchema-instance",
    SOAPEnv: "http://schemas.xmlsoap.org/soap/envelope/",
    Yt:     "urn:youtube",
    Body:   GetVideoInformationRequestBody{
      GetVideoInformation: YoutubeRequest{
        VideoID: "xxxxxxxxxxx",
      },
    },
  }

  // 发送请求
  soapResponse, err := soapClient.Do(soapRequest)
  if err != nil {
    log.Fatalln(err)
  }

  // 解析响应数据
  var result GetVideoInformationResponseEnvelope
  if err := soapResponse.Unmarshal(&result); err != nil {
    log.Fatalln(err)
  }

  // 打印结果
  fmt.Println("Title:", result.Body.GetVideoInformationResponse.Title)
  fmt.Println("Description:", result.Body.GetVideoInformationResponse.Description)
}

Dalam pembangunan web moden, SOAP telah digantikan oleh REST dan JSON, tetapi dalam beberapa senario tertentu, protokol SOAP masih digunakan. Jika anda sedang mencari cara untuk melaksanakan SOAP menggunakan Golang, contoh di atas akan membantu anda bermula. Kecekapan dan model keselarasan Golang menjadikannya alat yang berkuasa untuk perkhidmatan web, menjadikannya lebih mudah dan lebih cekap bagi pembangun untuk menyelesaikan kerja mereka. Berseronoklah bersama Golang!

Atas ialah kandungan terperinci Bagaimana Golang melaksanakan proses SOAP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn