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.
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
Antaranya, gin
ialah rangka kerja web yang popular dan antchfx/xml
ialah perpustakaan untuk memproses XML.
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 + "!" }
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
.
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") }
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
.
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>
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>
Ini menunjukkan bahawa perkhidmatan web kami berjaya memproses permintaan SOAP dan mengembalikan hasil yang diharapkan.
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!