c语言编程笔录

首页 >   > 笔记大全

笔记大全

golang实现webservice

更新时间:2023-12-24

第一段:什么是Web Service

Web Service是一种基于Web(互联网)的传统软件组件模型,它能够允许应用程序之间进行互操作,即使这些应用程序是通过不同的编程语言、不同的平台和不同的技术来实现的。

示例:
func main() {
  http.HandleFunc("/hello", hello)
  http.ListenAndServe(":8080", nil)
}

func hello(w http.ResponseWriter, r *http.Request) {
  fmt.Fprintf(w, "Hello")
}

第二段:golang实现Web Service

Go是一种适用于高并发的编程语言,也可以使用golang来实现Web Service。我们可以使用http包来搭建HTTP服务。

示例:
package main

import (
    "encoding/json"
    "fmt"
    "log"
    "net/http"
)

type Book struct {
    Title  string `json:"title"`
    Author string `json:"author"`
}

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        book := &Book{"Golang Web Service", "Author"}
        json.NewEncoder(w).Encode(book)
    })

    log.Fatal(http.ListenAndServe(":9090", nil))
}

第三段:Web Service的RESTful API

RESTful是一种软件架构风格,用于构建分布式的Web Service。RESTful API是指按照RESTful原则定义API的方式。

示例: 
package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        switch r.Method {
        case "GET":
            fmt.Fprintf(w, "GET method")
        case "POST":
            fmt.Fprintf(w, "POST method")
        case "PUT":
            fmt.Fprintf(w, "PUT method")
        case "DELETE":
            fmt.Fprintf(w, "DELETE method")
        default:
            http.Error(w, "Invalid request method", http.StatusMethodNotAllowed)
        }
    })

    log.Fatal(http.ListenAndServe(":9090", nil))
}

第四段:Web Service的安全性

在Web Service中,数据的传输是通过网络进行的,所以要确保传输的安全性。我们可以在HTTP服务中使用HTTPS协议来保证数据传输的安全。此外,还需要在代码中进行安全检查,例如防止SQL注入和跨站脚本攻击。

示例:
package main

import (
    "fmt"
    "html/template"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        if r.Method == "POST" {
            username := r.FormValue("username")
            password := r.FormValue("password")

            if username == "admin" && password == "password" {
                tpl := template.Must(template.ParseFiles("success.html"))
                tpl.Execute(w, nil)
            } else {
                fmt.Fprint(w, "Invalid username or password")
            }
        } else {
            tpl := template.Must(template.ParseFiles("login.html"))
            tpl.Execute(w, nil)
        }
    })

    log.Fatal(http.ListenAndServeTLS(":9090", "server.crt", "server.key", nil))
}