构建 API 应用

API 应用

只提供 API 端点(通常是 JSON)的应用程序与提供 HTMLJavaScriptCSS 的应用程序非常不同。 在本指南中,您将学习如何使用Buffalo 构建仅 api 的应用程序。

创建一个新的 API 应用程序

当使用 Buffalo new 命令创建一个新的 Buffalo 应用程序时,可选的 -- api 标志将生成一个更适合于服务 api 的应用程序,而不是一个普通的 Buffalo 应用程序。

$ buffalo new --api coke

细化项目布局

使用 -- api 标志生成的应用程序不包含任何前端系统,这意味着没有模板、样式表等等。

buffalo new coke --api
├── Dockerfile
├── README.md
├── actions
│   ├── actions_test.go
│   ├── app.go
│   ├── home.go
│   ├── home_test.go
│   └── render.go
├── database.yml
├── fixtures
│   └── sample.toml
├── grifts
│   ├── db.go
│   └── init.go
├── inflections.json
├── main.go
└── models
    ├── models.go
    └── models_test.go
buffalo new coke
├── Dockerfile
├── README.md
├── actions
│   ├── actions_test.go
│   ├── app.go
│   ├── home.go
│   ├── home_test.go
│   └── render.go
├── assets
│   ├── css
│   │   └── application.scss
│   ├── images
│   │   ├── favicon.ico
│   │   └── logo.svg
│   └── js
│       └── application.js
├── database.yml
├── fixtures
│   └── sample.toml
├── grifts
│   ├── db.go
│   └── init.go
├── inflections.json
├── locales
│   └── all.en-us.yaml
├── main.go
├── models
│   ├── models.go
│   └── models_test.go
├── node_modles
├── package.json
├── public
│   ├── assets
│   │   └── .keep
│   └── robots.txt
├── templates
│   ├── _flash.html
│   ├── application.html
│   └── index.html
├── webpack.config.js
└── yarn.lock

应用实例及数据渲染

buffalo new coke --api
func App() *buffalo.App {
    if app == nil {
        app = buffalo.New(buffalo.Options{
            Env:          ENV,
            SessionStore: sessions.Null{},
            PreWares: []buffalo.PreWare{
                cors.Default().Handler,
            },
            SessionName: "_coke_session",
        })
        app.Use(forceSSL())
        app.Use(middleware.SetContentType("application/json"))

        if ENV == "development" {
            app.Use(middleware.ParameterLogger)
        }

        app.Use(middleware.PopTransaction(models.DB))
        app.GET("/", HomeHandler)
    }
    return app
}
Copyfunc init() {
    r = render.New(render.Options{})
}
buffalo new coke
func App() *buffalo.App {
    if app == nil {
        app = buffalo.New(buffalo.Options{
            Env:         ENV,
            SessionName: "_coke_session",
        })
        app.Use(forceSSL())
        if ENV == "development" {
            app.Use(middleware.ParameterLogger)
        }
        app.Use(csrf.New)
        app.Use(middleware.PopTransaction(models.DB))
        app.Use(translations())
        app.GET("/", HomeHandler)
        app.ServeFiles("/", assetsBox) // serve files from the public directory
    }
    return app
}
func init() {
    r = render.New(render.Options{
        HTMLLayout:   "application.html",
        TemplatesBox: packr.NewBox("../templates"),
        AssetsBox:    assetsBox,
        Helpers:      render.Helpers{},
    })
}
本作品采用《CC 协议》,转载必须注明作者和本文链接

曹阿宇

讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!