golang uruskan permintaan sabun

WBOY
Lepaskan: 2023-05-11 12:08:36
asal
1091 orang telah melayarinya

Dengan pembangunan berterusan teknologi Internet, perkhidmatan Web telah menjadi sebahagian daripada seni bina aplikasi perusahaan, dan SOAP (Simple Object Access Protocol) adalah yang paling biasa digunakan. SOAP ialah protokol berasaskan XML yang membolehkan komunikasi antara sistem yang berbeza melalui HTTP atau protokol pengangkutan lain, membenarkan aplikasi klien berinteraksi dengan aplikasi pelayan. Dalam artikel ini, kami akan memperkenalkan cara menggunakan golang untuk mengendalikan permintaan SOAP.

  1. Persediaan

Sebelum bermula, kita perlu memasang persekitaran bahasa go dan perpustakaan bergantung yang berkaitan. Kita boleh menggunakan arahan berikut untuk memasang:

go get -u github.com/gin-gonic/gin
go get -u github.com/antchfx/xquery/xml
Salin selepas log masuk

Antaranya, gin ialah rangka kerja web yang popular dan antchfx/xml ialah perpustakaan untuk memproses XML.

  1. Buat fungsi pemprosesan permintaan

Seterusnya, kita boleh mencipta fungsi pemprosesan permintaan untuk memproses permintaan SOAP yang dihantar oleh pelanggan dan mengembalikan respons kepadanya. Dalam contoh ini, kami akan menggunakan rangka kerja gin untuk mengendalikan permintaan dan respons. Cipta fail soap_handler.go dan tambah kod berikut:

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 + "!"
}
Salin selepas log masuk

Dalam fungsi ini, kami mula-mula menghuraikan permintaan SOAP dan mendapatkan parameter permintaan dan nilai parameter yang diperlukan. Kami kemudian memanggil fungsi processRequest untuk mengendalikan permintaan dan membina respons XML yang mengandungi respons parameter. Akhir sekali, kami mengembalikan respons kepada pelanggan sebagai jenis application/xml.

  1. Mengkonfigurasi Penghalaan

Kini kita boleh mencipta perkhidmatan web ringkas dalam fungsi utama dan laluan permintaan ke fungsi yang baru kita buat. Buka fail main.go dan tambah kod berikut:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()

    // 配置路由
    r.POST("/", handleSOAPRequest)

    // 启动Web服务
    r.Run(":8080")
}
Salin selepas log masuk

Dalam fungsi ini, kami menggunakan rangka kerja gin untuk mencipta perkhidmatan HTTP. Kami mentakrifkan laluan dengan memanggil kaedah POST dan menggunakan fungsi handleSOAPRequest untuk mengkonfigurasi fungsi pemprosesan permintaan. Akhir sekali, kami memulakan perkhidmatan HTTP dan mendengar semua permintaan daripada port 8080.

  1. Pengujian

Kini, kami boleh menguji perkhidmatan web kami dengan mana-mana pelanggan yang menyokong protokol SOAP. Kita boleh menggunakan alatan seperti Postman untuk mensimulasikan permintaan dan melihat sama ada fungsi kita mengembalikan hasil yang diharapkan.

Dalam Posmen, kami boleh menghantar permintaan HTTP POST ke http://localhost:8080 dan menambah badan permintaan SOAP berikut pada permintaan:

<?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>
Salin selepas log masuk

Selepas menghantar permintaan, kami sepatutnya dapat menerima Respons berikut:

<?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>
Salin selepas log masuk

Ini menunjukkan bahawa perkhidmatan web kami berjaya memproses permintaan SOAP dan mengembalikan hasil yang diharapkan.

  1. Ringkasan

Dalam artikel ini, kami memperkenalkan cara menggunakan golang untuk memproses permintaan SOAP dan menukarnya menjadi respons HTTP. Kami menggunakan rangka kerja gin untuk mengendalikan permintaan dan respons, dan pustaka antchfx/xml untuk menghuraikan XML dan membina respons. Melalui contoh ini, kita dapat melihat bahawa menggunakan golang untuk mengendalikan permintaan SOAP boleh menjadi sangat mudah dan ringkas. Jika anda sedang membangunkan perkhidmatan web, ini mungkin pilihan yang baik.

Atas ialah kandungan terperinci golang uruskan permintaan sabun. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan