SOAP (Simple Object Access Protocol) は、分散環境におけるアプリケーション間の通信に使用される XML ベースのプロトコルです。 SOAP を実装する場合、多くの場合、プロトコル自体とそれに関連する操作を実装するためのプログラミング言語を選択する必要があります。この点において、Go 言語は静的に型付けされたプログラミング言語として、SOAP プロトコルの実装に非常に適しています。
1. SOAP の基本概念
SOAP は 1998 年に初めて登場しました。これは、XML に基づいたオープンな情報交換プロトコルであり、Web に基づいた分散アプリケーション間の通信を導入します。 。より大きく複雑なデータ型は、SOAP プロトコルを通じて送信できます。 SOAP プロトコルの主なアプリケーション シナリオには、リモート プロシージャ コール (RPC)、サービス指向アーキテクチャ (SOA) などが含まれます。
SOAP プロトコルは 3 つの部分で構成されます:
1. ヘッダー: ヘッダーは SOAP メッセージのオプションであり、SOAP プロトコル関連の操作の前にコンテキスト、認証などを設定するために使用されます。
2. テキスト: テキストは SOAP メッセージ内で必須であり、SOAP メッセージに関連するデータを送信するために使用されます。
3. 失敗: 失敗メッセージはオプションであり、SOAP 操作が失敗した場合、または例外が発生した場合に失敗レポート情報を提供するために使用されます。
2. golang SOAP ライブラリの選択
Golang は静的型付けプログラミング言語であり、効率が高く、依存関係が少ないという特徴があり、Web サービスの実装と開発に非常に適しています。 Golang には、Go-SOAP と呼ばれる独自の SOAP ライブラリがあり、軽量で使いやすい SOAP ライブラリです。
Go-SOAP ライブラリを使用する場合、次のさまざまなライブラリを選択できます:
- github.com/tiaguinho/gosoap
- github.com/hooklift/ gowsdl
- github.com/shutej/go2xmlrpc
3. golang で SOAP を実装する手順
- 対応するライブラリをインストールします
Go-SOAP ライブラリを使用する前に、Golang をインストールし、環境変数に対応するパスを設定する必要があります。次に、Go-SOAP ライブラリをダウンロードする必要があります。その中で、github.com/tiaguinho/gosoap は Go-SOAP ライブラリで最もよく使用されるもので、 go get コマンドを直接使用してローカルにダウンロードできます:
go get github.com/tiaguinho/ gosoap
SOAP リクエストの定義-
SOAP リクエストを定義するときは、Go 構造タイプを使用して XML メッセージ本文を定義する必要があります。 SOAP リクエストには、メソッドとパラメータという 2 つの属性があります。メソッドは呼び出されるサービス メソッドの名前を定義し、パラメータは呼び出されるサービス メソッドのパラメータ値を定義します。
これは、国家 GDP データを取得するために国家統計局への SOAP リクエストを作成する例です:
type GetGDPRequest struct {
Year int `xml:"Year"`
ログイン後にコピー
}
type GetGDPResponse struct {
XMLName xml.Name `xml:"GetGDPResponse"`
GetGDPResult float64 `xml:"GetGDPResult"`
ログイン後にコピー
}
type GDPService struct {
Client *soap.Client
ログイン後にコピー
}
func NewGDPService() *GDPService {
return &GDPService{
Client: soap.NewClient("http://www.stats.gov.cn/nbsuisswsxxcx/xxcx/ydgdp_lrsj/"),
}
ログイン後にコピー
}
func (service *GDPService) GetGDP(year int) (float64, error) {
res := &GetGDPResponse{}
if err := service.Client.Call("GetGDP", GetGDPRequest{Year: year}, res); err != nil {
return 0, err
}
return res.GetGDPResult, nil
ログイン後にコピー
}
SOAP リクエストの送信-
SOAP リクエストを送信する場合、構築したリクエストの内容をサーバーに送信し、サーバーの応答を取得した後、それを対応する XML データに解析します。最後に、それを Go 言語の具体的なデータ型に変換できます。
次は、国家統計局に 2019 年の国内 GDP データの取得をリクエストするコード例です:
func main() {
gdpService := NewGDPService()
gdp, err := gdpService.GetGDP(2019)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("2019年全国GDP数据是:", gdp)
ログイン後にコピー
}
4. SOAP と RESTful の比較
SOAP と RESTful はどちらも Web サービス用のプロトコルですが、両者の間には多くの違いがあります。 SOAP と RESTful の主な違いは次のとおりです。
異なる送信方法: SOAP は XML を使用してサーバーとクライアントの間でデータを送信しますが、RESTful はデータ送信に JSON などの形式を使用します。 - さまざまなオーバーヘッド: データ送信プロセス中に、SOAP はヘッダー、本文、フォールトなどを含む一連のリクエストを送信する必要があります。 RESTful プロトコルのデータ送信プロセス中のリクエストとレスポンスの形式は非常に簡潔です。
- パフォーマンスの違い: SOAP には、ヘッダー、本文、障害などを含む大量の要求および応答情報が含まれるため、大規模なデータを送信する場合、SOAP のパフォーマンスは RESTful よりも大幅に遅くなります。
-
要約すると、Web サービス プロトコルを選択するときは、オーバーヘッドやパフォーマンスなどの要素を考慮して、特定の状況に応じて選択する必要があります。
5. 概要
分散システムでは、さまざまなサービスが複雑であるため、多くの場合、SOAP プロトコルを使用する必要があります。 Golang は静的型付けプログラミング言語であり、そのライブラリ Go-SOAP も SOAP プロトコルを簡単に実装できます。送信されるデータ量でもパフォーマンスでも、Golang を使用して SOAP プロトコルを実装すると、優れたパフォーマンスを実現できます。
以上がgolangでsoapを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。