iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 14
0
Modern Web

Go into Web!系列 第 14

Day14 | 透過 golang 實作一個簡單的使用者管理 API(一)

  • 分享至 

  • xImage
  •  

大家好,今天算是把前幾天提到的 i18nlogormginRESTfulclean architecture 的概念做一個整理,簡單的做一個 使用者管理 API 出來,今天使用了我自己封裝的 cxgateway 實作,廢話不多說,就讓我們開始吧!

需求

做出可以對使用者進行 CRUD 的 API,要符合以下幾個要求

  • 必須支援多語,預設語言為 繁體中文
  • 使用 mariadb 作為資料庫
  • 預設 log 輸出等級為 info,使用 json 格式
  • 使用 api 的路徑為 /api/v1/user

資料模型

  • 首先建立一個名為 model 的資料夾,在此資料夾內建立 model.go
/
   /model
      - model.go
  • model.go 內建立一個名為 Userstruct,並且給予簡單的 idusernameemailphone 四個欄位
type User struct {
	ID       string `json:"id"`
	Username string `json:"username"`
	Email    string `json:"email"`
	Phone    string `json:"phone"`
}

建立 User 模組

建立模組

首先,先在根目錄建立一個名為 module 的資料夾,接著在底下建立 user 的資料夾,此時的資料夾結構如下

/
   /model
      - model.go
   /module
      /user

建立 Interface

接著我們建立 interface 來進行方法宣告

Repository

/module/user 底下建立名為 repository.go 的檔案,填寫內容如下

package user

import "sample_api/model"

type Repository interface {
	GetUserList(map[string]interface{}) ([]*model.User, error)
	GetUser(in *model.User) (*model.User, error)
	CreateUser(in *model.User) (*model.User, error)
	ModifyUser(in *model.User, data map[string]interface{}) (*model.User, error)
	DeleteUser(in *model.User) error
}

Service

/module/user 底下建立名為 service.go 的檔案,填寫內容如下

type Service interface {
	GetUserList(map[string]interface{}) ([]*model.User, error)
	GetUser(in *model.User) (*model.User, error)
	CreateUser(in *model.User) (*model.User, error)
	ModifyUser(in *model.User, data map[string]interface{}) (*model.User, error)
	DeleteUser(in *model.User) error
}

Delivery

最後我們在 /module/user 底下建立名為 delivery 的資料夾,在其內建立 handler.go,內容如下

package delivery

import "github.com/gin-gonic/gin"

type HttpHandler interface {
	GetUserList(c *gin.Context)
	GetUser(c *gin.Context)
	CreateUser(c *gin.Context)
	ModifyUser(c *gin.Context)
	DeleteUser(c *gin.Context)
}

統整

目前專案的架構會像是這樣

/
   /model
      - model.go
   /module
      /user
         /delivery
            - handler.go
         - repository.go
         - service.go

小結

今天我們先將專案所需的架構建構出來,明天讓我們實作他們吧!

程式範例檔

程式範例我放在個人的 github 中,有興趣的朋友可以到 https://github.com/codingXiang/sample_api


上一篇
Day13 | log 輸出的重要性
下一篇
Day15 | 透過 golang 實作一個簡單的使用者管理 API(二)
系列文
Go into Web!30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

0
moblinfish
iT邦新手 4 級 ‧ 2021-12-23 15:32:50

Service interface 的內容是否有誤?
根據你 Clean Architecture 那篇內容應為 login 和 Register (?)

阿翔 iT邦新手 4 級 ‧ 2022-09-02 16:32:43 檢舉

是的,感謝提醒!

我要留言

立即登入留言