ホームページ >バックエンド開発 >Golang >Golang が SOAP のプロセスを実装する方法

Golang が SOAP のプロセスを実装する方法

PHPz
PHPzオリジナル
2023-04-05 10:29:521624ブラウズ

Golang は、Google によって開発された非常に人気のあるプログラミング言語であり、その高効率と優れたパフォーマンスにより開発者に愛されています。 Golang は多くの開発者に好まれていますが、Golang を使用して SOAP を実装する開発者向けのガイダンスやリソースは比較的少ないです。この記事では、Golang が SOAP を実装するプロセスを紹介します。

まず、SOAP について簡単に見てみましょう。 SOAP (Simple Object Access Protocol) は、Web アプリケーション間で情報を交換するための XML ベースのプロトコルです。 SOAP は通常、WSDL (Web サービス記述言語) および UDDI (ユニバーサル記述、検出、および統合) とともに使用されます。 Web サービスは通常、データを送受信するためのプロトコルとして SOAP を使用する要求および応答メッセージと、使用可能な Web サービスに関する情報を含む WSDL ファイルで構成されます。

Golang で SOAP を実装するには、対応する Go ライブラリを使用する必要があります。現在、次の 2 つが一般的です。

  1. Go-SOAP: SOAP プロトコルを解析および構築するための比較的新しいライブラリです。 SOAP 1.1 および SOAP 1.2 をサポートし、WSDL 1.1 コントラクトの一部を実装します。また、API リクエストに Go 言語のデフォルトの HTTP クライアントを使用して、HTTP および HTTPS トランスポートもサポートします。
  2. Gosoap: SOAP 1.1 および SOAP 1.2 (追加標準) をサポートする古いライブラリですが、WSDL はサポートしません。また、API リクエストに Go 言語のデフォルトの HTTP クライアントを使用して、HTTP および HTTPS トランスポートもサポートします。

この記事では、Go-SOAP ライブラリを使用して SOAP プロトコルを実装する方法を紹介します。まず、go-soap パッケージを Go プロジェクトに追加する必要があります。次の手順を使用してインストールできます:

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

次に、 SOAP Web サービス。リクエストは XML に基づいて作成されます。リクエストのサンプルを次に示します。

<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>

上記の例では、リクエストの名前は GetVideoInformation で、パラメータ値は VideoID = xxxxxxxxxxx です。

次に、SOAP Web サービスの応答を定義する必要があります (これも XML 形式です。以下は応答のサンプルです:

<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>

構造体には、アドレスと関数名が含まれています) SOAP Web サービスのリクエストおよびレスポンスの形式を含める必要があります。以下はコード サンプルです。

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)
}

現在の Web 開発では、SOAP は REST と JSON に置き換えられていますが、特定のシナリオでは依然として SOAP プロトコルが使用されています。 Golang を使用して SOAP を実装する方法を探している場合は、上記の例から始めることができます。 Golang の効率性と同時実行性モデルにより、Golang は Web サービスの強力なツールとなり、開発者が作業をより簡単かつ効率的に実行できるようになります。 Golang を楽しんでください!

以上がGolang が SOAP のプロセスを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。