构建 API 应用
API 应用
只提供 API
端点(通常是 JSON
)的应用程序与提供 HTML
、 JavaScript
和 CSS
的应用程序非常不同。 在本指南中,您将学习如何使用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 协议》,转载必须注明作者和本文链接