与 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:本例中的每个代码都来自不同的项目