與 Gin 的 Restfull Projects API
Gin 是一個用 Golang 編寫的 Web 框架。它具有類似馬提尼的 API,具有更好的效能,速度提高了 40 倍。如果你需要表現和良好的生產力,你會愛上杜松子酒。
將有 8 個包+ main.go
- 控制器
- 核心
- 庫
- 中介軟體
- 上市
- 路由器
- 服務
- 測試
- main.go
控制器
Controllers 包將儲存所有 API 邏輯。無論你的 API 是什麼,你的邏輯都會在這裡發生
核心
核心包將儲存你建立的所有模型,ORM 等
庫
該包將儲存專案中使用的任何庫。但僅限於手動建立/匯入的庫,使用 go get package_name
命令時不可用。可能是你自己的雜湊演算法,圖形,樹等。
中介軟體
這個包儲存了專案中使用的每個中介軟體,可以是 cors,device-id,auth 等的建立/驗證
上市
這個 pacakge 將儲存每個公共和靜態檔案,可以是 html,css,javascript,影象等
路由器
該包將儲存 REST API 中的每個路由。
請參閱示例程式碼如何分配路由。
auth_r.go
import (
auth "simple-api/controllers/v1/auth"
"gopkg.in/gin-gonic/gin.v1"
)
func SetAuthRoutes(router *gin.RouterGroup) {
/**
* @api {post} /v1/auth/login Login
* @apiGroup Users
* @apiHeader {application/json} Content-Type Accept application/json
* @apiParam {String} username User username
* @apiParam {String} password User Password
* @apiParamExample {json} Input
* {
* "username": "your username",
* "password" : "your password"
* }
* @apiSuccess {Object} authenticate Response
* @apiSuccess {Boolean} authenticate.success Status
* @apiSuccess {Integer} authenticate.statuscode Status Code
* @apiSuccess {String} authenticate.message Authenticate Message
* @apiSuccess {String} authenticate.token Your JSON Token
* @apiSuccessExample {json} Success
* {
* "authenticate": {
* "statuscode": 200,
* "success": true,
* "message": "Login Successfully",
* "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ"
* }
* }
* @apiErrorExample {json} List error
* HTTP/1.1 500 Internal Server Error
*/
router.POST("/auth/login" , auth.Login)
}
如果你看到,我將處理程式分開的原因是,我們很容易管理每個路由器。所以我可以建立關於 API 的註釋,使用 apidoc 將其生成結構化文件。然後我將在當前包中呼叫 index.go 中的函式
index.go
package v1
import (
"gopkg.in/gin-gonic/gin.v1"
token "simple-api/middlewares/token"
appid "simple-api/middlewares/appid"
)
func InitRoutes(g *gin.RouterGroup) {
g.Use(appid.AppIDMiddleWare())
SetHelloRoutes(g)
SetAuthRoutes(g) // SetAuthRoutes invoked
g.Use(token.TokenAuthMiddleWare()) //secure the API From this line to bottom with JSON Auth
g.Use(appid.ValidateAppIDMiddleWare())
SetTaskRoutes(g)
SetUserRoutes(g)
}
服務
這個包將儲存任何使用過的服務在專案中使用的任何配置和設定,可以是 mongodb,redis,mysql,elasticsearch 等。
main.go
API 的主要入口。此處將配置有關開發環境設定,系統,埠等的任何配置。
示例:
main.go
package main
import (
"fmt"
"net/http"
"gopkg.in/gin-gonic/gin.v1"
"articles/services/mysql"
"articles/routers/v1"
"articles/core/models"
)
var router *gin.Engine;
func init() {
mysql.CheckDB()
router = gin.New();
router.NoRoute(noRouteHandler())
version1:=router.Group("/v1")
v1.InitRoutes(version1)
}
func main() {
fmt.Println("Server Running on Port: ", 9090)
http.ListenAndServe(":9090",router)
}
func noRouteHandler() gin.HandlerFunc{
return func(c *gin.Context) {
var statuscode int
var message string = "Not Found"
var data interface{} = nil
var listError [] models.ErrorModel = nil
var endpoint string = c.Request.URL.String()
var method string = c.Request.Method
var tempEr models.ErrorModel
tempEr.ErrorCode = 4041
tempEr.Hints = "Not Found !!
Routes In Valid. You enter on invalid Page/Endpoint"
tempEr.Info = "visit http://localhost:9090/v1/docs to see the available routes"
listError = append(listError,tempEr)
statuscode = 404
responseModel := &models.ResponseModel{
statuscode,
message,
data,
listError,
endpoint,
method,
}
var content gin.H = responseModel.NewResponse();
c.JSON(statuscode,content)
}
}
ps:本例中的每個程式碼都來自不同的專案