Go
Рекомендации по структуре проекта
Поиск…
Restfull API проектов с Gin
Джин - это веб-фреймворк, написанный в Голанге. Он имеет мартини-подобный API с гораздо лучшей производительностью, в 40 раз быстрее. Если вам нужна производительность и хорошая производительность, вы будете любить Джин.
Будет 8 пакетов + main.go
- контроллеры
- ядро
- ЛИЭС
- промежуточное программное
- общественности
- маршрутизаторы
- Сервисы
- тесты
- main.go
контроллеры
Пакет контроллеров сохранит всю логику API. Независимо от вашего API, ваша логика произойдет здесьядро
Основной пакет сохранит все созданные вами модели, ORM и т. Д.ЛИЭС
Этот пакет будет хранить любую библиотеку, которая используется в проектах. Но только для созданной вручную / импортированной библиотеки, недоступной при использованииgo get package_name команды go get package_name . Может быть ваш собственный алгоритм хэширования, графика, дерева и т. Д. промежуточное программное
Этот пакет хранит каждое промежуточное программное обеспечение, которое используется в проекте, может быть создание / валидация корса, идентификатор устройства, 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. Здесь будет сконфигурирована любая настройка параметров среды dev, систем, порта и т. Д. Пример:
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 !! \n 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: Каждый код в этом примере исходит из разных проектов
см. примеры проектов на github
Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow







