iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 10
0

常常聽到webserver提到API API,那麼API到底是什麼?
API是應用程式介面(Application Programming Interface)的縮寫,既然提到了API,
那就不能不提RESTful API了。

RESTful

RESTful API其中一個特色是,透過不同的HTTP method來當作動詞,以處理不同的行為。
以RESTful API來寫的話,我們的API會像這樣:

/data (GET)
/data (POST)
/data/1 (DELETE)

透過這種方式就可以統合成一個標準化介面,
不會說出現一堆奇怪名稱與HTTPMETHOD的API,
讓使用者搞不清楚如何使用。

Handler

在前面的章節提到,router可以指定這個api會呼叫哪個函數,
被呼叫的函數必須符合特定格式

func (r *Router) HandleFunc(path string, f func(http.ResponseWriter,
    *http.Request)) *Route

這是mux官方提供的函數所需參數,
可以看到handler需要一個有著http.ResponseWriter跟*http.Request的函數
因此我們可以寫出像下面這樣的函數:

func handler(w http.ResponseWriter, r *http.Request) {
	return
}

或是像這樣

func handler()http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
    }
}

第一個範例是直接寫一個函數,並指定參數符合要求,但是這樣會有個問題,
如果你需要帶一些其他參數進來,就會很麻煩,
這時第二種範例的好處就出來了,由於他是回傳符合條件的函數,因此參數可以自己指定,像下面這樣:

func handler(dbMaster, dbSlave *sqlwrapperX.DB)http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        dbMaster.Query("......")
    }
}

就可以帶上建立好的mysql物件,來執行相關動作。
透過這種方式建立好各種handler,就可以處理各式各樣的需求,
對於這些需求,使用者會帶著各種參數來查詢,修改,
這些參數要如何取得,就是我們下一章的議題了。


上一篇
Day9-中介器(middleware)
下一篇
Day11-http參數
系列文
從0開始的golang web server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言