我创建了一个 REST API,用于从数据库中获取记录,其中每一行都是关于过去在杂货店购买的信息。
在我的 main.go 文件中,我声明了一个连接到我的数据库的函数,然后创建一个可以获取所有购买的路由。
func HandleRequests() {
port := os.Getenv("PORT")
if len(port) == 0 {
port = "8080"
}
db, err = sql.Open("mysql", "<link-to-my-MYSQL-database>")
if err != nil {
panic(err.Error())
}
defer db.Close()
router := mux.NewRouter()
router.HandleFunc("/purchases", getAllPurchases).Methods("GET")
http.ListenAndServe(":"+port, router)
}
在这里,我的处理程序获取 MYSQL 模式中的所有行并将其作为 JSON 返回。
func getAllPurchases(response http.ResponseWriter, request *http.Request) {
response.Header().Set("content-type", "application/json")
var purchases Data
result, err := db.Query("SELECT Timestamp,PurchaseID,CustomerID from purchases ORDER BY Timestamp")
if err != nil {
panic(err.Error())
}
defer result.Close()
for result.Next() {
var purchase Purchase
err := result.Scan(&purchase.Timestamp, &purchase.PurchaseID, &purchase.CustomerID)
if err != nil {
panic(err.Error())
}
purchases.Data = append(purchases.Data, purchase)
}
json.NewEncoder(response).Encode(purchases)
}
这是结构。
type Data struct {
Data []Request `json:"data"`
}
type Purchase struct {
Timestamp string `json:"Timestamp"`
PurchaseID int `json:"PurchaseID"`
CustomerID int `json:"CustomerID"`
}
时间戳的格式如下:"Timestamp": "2021-01-11T16:25:52.499762+01:00",
所以这很好用,代码成功地能够返回 MySQL 表中的所有行。
我的目标是做同样的事情,但不是获取所有购买,而是创建一个端点,返回两个时间戳之间的所有行。
自然地,SQL 查询会是这样的
SELECT * from Purchases WHERE Timestamp BETWEEN TO_DATE ('2015-05-06T15:39:00', 'YYYY-MM-DD"T"HH24:MI:SS') AND TO_DATE('2015-04-06T15:39:00', 'YYYY-MM-DD"T"HH24:MI:SS');
但我对如何制作端点 url 感到困惑。它会叫什么?我的假设是
/purchases/{timestamp1}{timestamp2}