網路上找了一下方法,其實方法相當的多.大家可以找自己適合的方式來做,反正我也在學,乾脆把每一種看到的都開始試試看:

  • net/http

    • 這篇文章談到如何用net/http 來做,其實也沒那麼難,不過問題都一樣.都得對於每個物件與方式座對應.

    • 不僅僅是個別東西得自己寫出來,由於每一個都是走 url.values所以幾乎是無法辨別 albums/1 這樣的REST API,必須傳遞 ?albums=1 

    • 目前還沒有想到比較好的方式可以做出get/add/delete,繼續研究其他的.

  • gorilla/mux:

  • go/martini

    • martini算是相當適合拿來做REST(基本上內建已經支援了)

    m.Get(“/hello/:name”, func(params martini.Params) string { return “Hello “ + params[“name”] })

    • 這邊要注意的是:

      • 內容是  :name 你可不能輸入 curl  -i  localhost.com:xxxx/hello/:name  而必須要輸入 name

      •  params[“name”] 出來都是字串,要轉數字要注意error exception.  

      • 其實有個文件上沒有講清楚的就是針對 Get/PUT/POST 的function input,少寫是會找不到的
        func getItem(params martini.Params) string {
          //….
        }
        func updateItem(w http.ResponseWriter, r *http.Request, params martini.Params) (int, string) {
          //…..
        }
        func addItem(w http.ResponseWriter, r *http.Request) (int, string) {
         //….

    • 範例與實作的部分:

      • 我在練習的時候主要是利用類似範例裡面的in-memory database 還有 martini 來完成REST.此外並沒有用到JSON的格式,主要是因為之後打算拿來練習其他的資料庫mongoDB.

      • 實作的時候,我發現問題比較多的其實不外乎就是function的parameter 之外,再來就是client端要如何下指令去打成 GET/PUT/POST/DELETE 的指令,主要用的是CURL這裡簡單的列一下:

        • GET:  curl -i  ”https://localhost:8001/albums”

        • POST:  curl -i POST –data “band=Carcass&title=Heartwork&year=1994” “https://localhost:8001/albums.xml”

        • PUT:  curl -i  PUT –data “band=Carcass&title=Heartwork&year=1993” “https://localhost:8001/albums/4”

        • DELETE: curl -i DELETE “https://localhost:8001/albums/1”

    • 參考:


Evan

Attitude is everything