iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 19
0
Modern Web

Golang - 從打造一個 API 開始學起系列 第 19

[Day19] 儲存圖表資料並提供使用的 api (三)

  • 分享至 

  • xImage
  •  

本文同步發表於: Sponge Records

本文將會繼續上一回的內容,針對上一篇實作會產生的問題作解決與設計如何提供圖表資料

增加圖表驗證機制

上回實作的 api 並未加上圖表名稱的驗證機制,因此可能會出現重名的狀況
我們先加上這一機制,只需要在 models\chat.go 內加上驗證機制就好

models\chat.go - var Validate()

//驗證傳入訊息
func (chatlist *ChatList) Validate() (map[string]interface{}, bool) {
	//認證圖表是否存在
	temp := &ChatList{}

	err := GetDB().Table("chatlist").Where("chatname = ?", chatlist.ChatName).First(temp).Error
	if err != nil && err != gorm.ErrRecordNotFound {
		return u.Message(false, "Connection error"), false
	}
	if temp.ChatName != "" {
		return u.Message(false, "chat has been used"), false
	}

	return u.Message(false, "Requirement passed"), true
}

這樣就可以避免圖表名稱重複了

圖表列表的讀取

由於我們設計時需要考慮權限,目前只會先驗證帳號是否存在,如果存在才會將列表回傳
並且在資料讀取方面也需要傳入 token 才能進行,因此在傳入的資料後會先做以下判定

判定帳號是否存在 -> 回傳列表 -> 透過列表取得圖表資料

我們先在 main.go 增加讀取用 api 的路由

//讀取圖表 api
router.HandleFunc("/api/chat/getList", controllers.GetChatList).Methods("POST")
router.HandleFunc("/api/chat/getData", controllers.GetChatData).Methods("POST")

然後在 controllers\chatsControllers.go 中增加

controllers\chatsControllers.go- var GetChatList

var GetChatList = func(w http.ResponseWriter, r *http.Request) {

	ChatList := &models.ChatList{}
	err := json.NewDecoder(r.Body).Decode(ChatList)
	//如果輸入的請求錯誤
	if err != nil {
		u.Respond(w, u.Message(false, "Invalid request"))
		return
	}

	resp := ChatList.GetChatData()
	u.Respond(w, resp)
}

下回預告

下一回將會繼續設計讀取的 api 中的邏輯部分 ,讓存入資料庫的圖表可以被前端所使用


上一篇
[Day18] 儲存圖表資料並提供使用的 api (二)
下一篇
[Day20] 儲存圖表資料並提供使用的 api (四)
系列文
Golang - 從打造一個 API 開始學起30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言