使用Go語言建立Api Server

Kelly Wu 2023/06/28 11:12:27
1746

前言

RESTful APl是一種能讓兩個電腦系統透過網路交換資訊的介面,

身為App開發者,功能實作很大部分都需要仰賴api來獲取所需資訊,

為了避免Client Side常常因各種干擾(網路異常)造成測試不順,

於是有了本篇實作Local Api Server的誕生。

 

能實現Api Server的程式語言百百種,為什麼選擇Golang呢?

除了在GitHub上的程式語言熱門度排名擠入前三名,

圖源來源https://madnight.github.io/githut/#/pull_requests/2023/1

另一個重要的原因是Golang與我擅長的Kotlin相仿,可以直觀地讀code,大幅降地學習門檻,讓我能將較多的心力著重在App開發。


請注意,本篇採用local執行API server,所以App搭配時需要反轉tcp接口,App端才能順利取得response。


環境(以Window電腦開發)

IDE: Visual Studio Code

使用語言:Golang

 

 

環境設定

1.先至Golang官網安裝最新版本Go
Golang安裝網址: https://go.dev/dl/

2.到Visual Studio Code安裝所需版本
下載網址:https://code.visualstudio.com/download

3.建立空白資料夾(此篇路徑為 D:/<Your Path>/Golang)

4.從VS Code 開啟folder, 安裝Golang(圖上步驟依序操作)

接下來請點選show all command ,輸入 Go: Install/Update tools,以上動作完成後,環境架設皆完成了



內容實作

接著開始實作Server部分,除了go.mod, go.sum的為Module所需要之配置(請參閱下方的說明及連結)

架構說明:
src

  |--image(所有圖片將放置在這)
        |--resource

  |--db.json(類似資料集結)
  |--index.go(最主要程式)
go.mod
go.sum

go.mod 為相關Go包集合,基於替換舊有的GoPath方法來指定使用那些源文件,官方網站有詳細說明這邊僅簡單介紹

Go Modules Reference : https://go.dev/ref/mod

建立index.go和db.json,兩者都用New file來去新增

此篇預計會開三個Api,以下為Api Spec

Name

http://localhost:3001/userLogin

Method

GET 

*登入請用POST,此篇僅demo方便使用GET

Body


name

type

nullable

code

int

false

content

string

false

result

object

true



Name

http://localhost:3001/userInfo

Method

GET

Body


name

type

nullable

code

string

false

content

string

false

result

object

true

 

memberName

string

 
 

mobileNumber

string

 
 

isLogin

boolean

 
 

isBio

boolean

 
 

totalAmount

double

 
 

creditCardInfo

array

 
 

cardId

string

 
 

cardName

string

 
 

expiresDate

string

 
 

subAccountInfo

array

 
 

cardId

string

 
 

cardName

string

 
 

balance

double

 
 

backImageUrl

string

 








Name

http://localhost:3001/homeInfo

Method

GET

Body

     

name

type

nullable

code

string

false

content

string

false

result

object

true

 

favorSongList

array

false

 

singer

string

 
 

song

string

 
 

url

string

 
 

intro

string

 


 


依照 Api Spec 在 db.json寫入所需要的Response Body




接下來在index.go開始寫Http處理

package name皆可替換

此篇import的包主要為
json, io, os, 和實現http最重要的gin

Gin Web Framework: https://pkg.go.dev/github.com/gin-gonic/gin

 

主要實作


讀取json file後,找出需要的json object


homeInfo := result["HomeInfo"].(map[string]any)

把他填入我的router response中

router.GET("/homeInfo", func(c *gin.Context) { c.JSON(200, homeInfo) })

圖片都放在了image folder底下,所以需要使用的話用"./image/<你的圖片>" 便可以讀取

此篇只是簡單舉例,圖片僅掛在localhost上,讓Client Side能簡易讀取


全部完成後,記得Save all,打開終端機輸入go run index.go,成功的話應該會出現以下畫面


也可以用Postman試call api,成功會回應200


結語
前端開發者開發時期最頭痛的問題應該是測試api是否正確回應,比起放在App Local Resource中,以Local Server來測試可以簡單且快速新增所需response,App端的resource也不用放入測試用的json檔案,也大大減少Compiler時間。







Kelly Wu