golang は SOAP リクエストを処理します

WBOY
リリース: 2023-05-11 12:08:36
オリジナル
1104 人が閲覧しました

インターネット テクノロジーの継続的な発展に伴い、Web サービスはエンタープライズ アプリケーション アーキテクチャの一部となり、SOAP (Simple Object Access Protocol) が最も一般的に使用されています。 SOAP は XML ベースのプロトコルで、HTTP またはその他のトランスポート プロトコルを介した異なるシステム間の通信を可能にし、クライアント アプリケーションがサーバー アプリケーションと対話できるようにします。この記事では、golang を使用して SOAP リクエストを処理する方法を紹介します。

  1. 準備作業

開始する前に、go 言語環境と関連する依存ライブラリをインストールする必要があります。次のコマンドを使用してインストールできます。

go get -u github.com/gin-gonic/gin
go get -u github.com/antchfx/xquery/xml
ログイン後にコピー

その中で、gin は人気のある Web フレームワークであり、antchfx/xml は XML を処理するためのライブラリです。

  1. リクエスト処理関数の作成

次に、クライアントから送信された 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 としてクライアントに返します。

  1. ルーティングの構成

これで、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 からのすべてのリクエストをリッスンします。

  1. テスト

これで、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 リクエストを正常に処理し、予期した結果を返したことを示します。

  1. 概要

この記事では、golang を使用して SOAP リクエストを処理し、それを HTTP レスポンスに変換する方法を紹介しました。リクエストとレスポンスを処理するために gin フレームワークを使用し、XML を解析してレスポンスを構築するために antchfx/xml ライブラリを使用します。この例を通して、golang を使用して SOAP リクエストを処理することが非常に簡単かつシンプルであることがわかります。 Web サービスを開発している場合は、これが良い選択となる可能性があります。

以上がgolang は SOAP リクエストを処理しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート