3
我想在golang站點中有一個簡單的REST API服務器,它服務於客戶端請求的同一日期的HTML,JSON或XML格式。我無法弄清楚。我希望我沒有做一些愚蠢的事情。如何在golang和martini中動態呈現爲HTML/JSON/XML?
代碼:
package main
import (
"github.com/go-martini/martini"
"github.com/martini-contrib/render"
)
type Ticket struct {
Number int `json:"number"`
Description string `json:"description"`
State string `json:"state"`
}
func dummyStatus() Ticket {
ticket := Ticket{
Number: 2345,
Description: "A dummy customer ticket",
State: "resolved",
}
return ticket
}
// http://localhost:3000/status/id:1
func ReadStatus(r render.Render, params martini.Params) Ticket {
// read from DB
return dummyStatus()
}
func WriteStatus(params martini.Params) Ticket {
// write to DB
return dummyStatus()
}
func main() {
m := martini.Classic()
m.Use(render.Renderer())
m.Group("/status", func(r martini.Router) {
r.Get("/:id", ReadStatus)
r.Post("/:id", WriteStatus)
})
m.Run()
}
結果: 我請求JSON,我只是得到一個字符串
$ curl -i -H "Accept: application/json" -H "Content-Type:application/json" -X GET http://localhost:3000/status/id:12345
HTTP/1.1 200 OK
Date: Wed, 24 Dec 2014 20:01:32 GMT
Content-Length: 19
Content-Type: text/plain; charset=utf-8
<main.Ticket Value>
哦,我忘了提及我對這個代碼的第二個限制......它不會根據請求動態更改格式。現在硬編碼的JSON響應。 :-( – FlowRaja
我不得不執行一個類似的任務,默認情況下輸出是JSON,然後是XML。我這樣做只是爲了執行一個針對我的數據的方法的第二路由,以將其呈現爲XML並且那麼r.Data(200,[] byte(xmlstring)) – shat