インターネット テクノロジーの継続的な発展に伴い、Web サービスはエンタープライズ アプリケーション アーキテクチャの一部となり、SOAP (Simple Object Access Protocol) が最も一般的に使用されています。 SOAP は XML ベースのプロトコルで、HTTP またはその他のトランスポート プロトコルを介した異なるシステム間の通信を可能にし、クライアント アプリケーションがサーバー アプリケーションと対話できるようにします。この記事では、golang を使用して SOAP リクエストを処理する方法を紹介します。
開始する前に、go 言語環境と関連する依存ライブラリをインストールする必要があります。次のコマンドを使用してインストールできます。
go get -u github.com/gin-gonic/gin go get -u github.com/antchfx/xquery/xml
その中で、gin
は人気のある Web フレームワークであり、antchfx/xml
は XML を処理するためのライブラリです。
次に、クライアントから送信された SOAP リクエストを処理し、それに対する応答を返すリクエスト処理関数を作成します。この例では、gin
フレームワークを使用してリクエストと応答を処理します。ファイル soap_handler.go
を作成し、次のコードを追加します。
package main import ( "bytes" "encoding/xml" "net/http" "github.com/antchfx/xquery/xml" "github.com/gin-gonic/gin" ) // 定义请求结构 type soapRequest struct { XMLName xml.Name Body xmlSoapBody `xml:"Body"` } type xmlSoapBody struct { XMLName xml.Name Content xmlElement `xml:",any"` } type xmlElement struct { XMLName xml.Name Value string `xml:",chardata"` } // 处理SOAP请求 func handleSOAPRequest(c *gin.Context) { // 解析请求体 decoder := xml.NewDecoder(c.Request.Body) var req soapRequest err := decoder.Decode(&req) if err != nil { c.AbortWithStatus(http.StatusBadRequest) return } // 从请求中提取需要的参数信息 param := req.Body.Content.XMLName.Local paramValue := req.Body.Content.Value // 处理请求 result := processRequest(param, paramValue) // 构造响应 var buffer bytes.Buffer buffer.WriteString("<?xml version="1.0" encoding="UTF-8"?> ") buffer.WriteString("<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> ") buffer.WriteString(" <soap:Body> ") buffer.WriteString(" <" + param + "Response" + "> ") buffer.WriteString(" <" + param + "Result" + ">" + result + "</" + param + "Result" + "> ") buffer.WriteString(" </" + param + "Response" + "> ") buffer.WriteString(" </soap:Body> ") buffer.WriteString("</soap:Envelope> ") // 返回响应 c.Data(http.StatusOK, "application/xml", buffer.Bytes()) } // 处理请求 func processRequest(param string, paramValue string) string { // 这里可以编写自己的业务处理逻辑 // ... return "Hello, " + paramValue + "!" }
この関数では、まず SOAP リクエストを解析し、必要なリクエスト パラメータとパラメータ値を取得します。次に、processRequest
関数を呼び出してリクエストを処理し、パラメータ応答を含む XML 応答を構築します。最後に、応答をタイプ application/xml
としてクライアントに返します。
これで、main 関数に単純な Web サービスを作成し、作成したばかりの関数にリクエストをルーティングできるようになります。 main.go
ファイルを開き、次のコードを追加します。
package main import "github.com/gin-gonic/gin" func main() { r := gin.Default() // 配置路由 r.POST("/", handleSOAPRequest) // 启动Web服务 r.Run(":8080") }
この関数では、gin
フレームワークを使用して HTTP サービスを作成します。 POST
メソッドを呼び出してルートを定義し、handleSOAPRequest
関数を使用してリクエスト処理関数を構成します。最後に、HTTP サービスを開始し、ポート 8080
からのすべてのリクエストをリッスンします。
これで、SOAP プロトコルをサポートする任意のクライアントを使用して Web サービスをテストできます。 Postman などのツールを使用してリクエストをシミュレートし、関数が期待した結果を返すかどうかを確認できます。
Postman では、HTTP POST リクエストを http://localhost:8080
に送信し、次の SOAP リクエスト本文をリクエストに追加できます:
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <sayHello> <name>Tom</name> </sayHello> </soap:Body> </soap:Envelope>
送信後
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <sayHelloResponse> <sayHelloResult>Hello, Tom!</sayHelloResult> </sayHelloResponse> </soap:Body> </soap:Envelope>
これは、Web サービスが SOAP リクエストを正常に処理し、予期した結果を返したことを示します。
この記事では、golang を使用して SOAP リクエストを処理し、それを HTTP レスポンスに変換する方法を紹介しました。リクエストとレスポンスを処理するために gin
フレームワークを使用し、XML を解析してレスポンスを構築するために antchfx/xml
ライブラリを使用します。この例を通して、golang を使用して SOAP リクエストを処理することが非常に簡単かつシンプルであることがわかります。 Web サービスを開発している場合は、これが良い選択となる可能性があります。
以上がgolang は SOAP リクエストを処理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。